git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 0/16] Add label for common ancestor to conflictstyle=diff3

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Mar 17, 2010, 11:36 UTC
Message-ID
<20100317113655.GA25470@progeny.tock>
Hi all,

This is a more polished version of a series I sent a couple of days ago [1]. Thanks to Junio for some helpful advice.

The purpose: When outputting diff3-style conflict hunks, this patch series adds a label for the common ancestor (like diff3 -m would):

 <<<<<<< ours
 Text from the current branch
 ||||||| base
 Text from the merge base
 =======
 Text from the remote branch
 >>>>>>> theirs

Apparently, without this label, smerge-mode.el found in emacs 22 and later has trouble parsing the conflict hunks created by git with merge.conflictstyle=diff3. More importantly, humans can sometimes use a reminder of what the ancestor represents, especially in cases like cherry-pick and revert.

As before, the bad news is that sometimes the labels for the ancestor are kind of pointless, as in “merged common ancestors” for merge-recursive. I am not planning to improve this. I’d be thrilled if someone changes it to something like “merge of ac76d, 8d7ca9, and 81873”.

The good news is a couple of new tests thrown in. All the other changes I can remember are detailed in the comments after each patch (probably missing some, since I haven’t started using git notes for this).

I think the series is ready to receive wider exposure. Please let me know if you run into any problems when trying it out. I would also be glad to hear thoughts about the details of its behavior and implementation.

The series is based against master. There are a few small conflicts with next, but nothing major; I’ll point out the few that I remember as I go.

Enjoy,
Jonathan Nieder (16):
  xdl_merge(): add optional ancestor label to diff3-style output
  xdl_merge(): move file1 and file2 labels to xmparam structure
  merge-file --diff3: add a label for ancestor
  ll_merge(): add ancestor label parameter for diff3-style output
  checkout --conflict=diff3: add a label for ancestor
  merge_file(): add comment explaining behavior wrt conflict style
  merge_trees(): add ancestor label parameter for diff3-style output
  tests: document format of conflicts from checkout -m
  checkout -m --conflict=diff3: add a label for ancestor
  tests: document cherry-pick behavior in face of conflicts
  revert_or_cherry_pick(): get oneline_body from get_oneline()
  compat: add mempcpy()
  revert: simplify get_oneline() using mempcpy
  revert: clarify label on conflict hunks
  cherry-pick: add a label for ancestor
  merge-recursive: add a label for ancestor
 builtin/checkout.c              |    3 +-
 builtin/merge-file.c            |    7 +-
 builtin/revert.c                |   33 ++++---
 git-compat-util.h               |    9 ++
 ll-merge.c                      |   28 +++---
 ll-merge.h                      |    2 +-
 merge-file.c                    |    8 ++-
 merge-recursive.c               |   12 ++-
 merge-recursive.h               |    1 +
 rerere.c                        |    4 +-
 t/t3507-cherry-pick-conflict.sh |  198 +++++++++++++++++++++++++++++++++++++++
 t/t6023-merge-file.sh           |    2 +-
 t/t7201-co.sh                   |   69 ++++++++++++-
 xdiff/xdiff.h                   |    6 +-
 xdiff/xmerge.c                  |   29 ++++--
 15 files changed, 358 insertions(+), 53 deletions(-)
 create mode 100644 t/t3507-cherry-pick-conflict.sh
[1] http://thread.gmane.org/gmane.linux.debian.devel.bugs.general/680778/focus=142176
Next: Jonathan Nieder
Message 1 of 23 in “Add label for common ancestor to conflictstyle=diff3”
  1. 0/16 Add label for common ancestor to conflictstyle=diff3Jonathan Nieder, Mar 17, 2010
  2. 01/16 xdl_merge(): add optional ancestor label to diff3-style outputJonathan Nieder, Mar 17, 2010
  3. Bert WesargMar 17, 2010
  4. Jonathan NiederMar 20, 2010
  5. 02/16 xdl_merge(): move file1 and file2 labels to xmparam structureJonathan Nieder, Mar 17, 2010
  6. 03/16 merge-file --diff3: add a label for ancestorJonathan Nieder, Mar 17, 2010
  7. 04/16 ll_merge(): add ancestor label parameter for diff3-style outputJonathan Nieder, Mar 17, 2010
  8. 05/16 checkout --conflict=diff3: add a label for ancestorJonathan Nieder, Mar 17, 2010
  9. 06/16 merge_file(): add comment explaining behavior wrt conflict styleJonathan Nieder, Mar 17, 2010
  10. 07/16 merge_trees(): add ancestor label parameter for diff3-style outputJonathan Nieder, Mar 17, 2010
  11. 08/16 tests: document format of conflicts from checkout -mJonathan Nieder, Mar 17, 2010
  12. 09/16 checkout -m --conflict=diff3: add a label for ancestorJonathan Nieder, Mar 17, 2010
  13. 10/16 tests: document cherry-pick behavior in face of conflictsJonathan Nieder, Mar 17, 2010
  14. 11/16 revert_or_cherry_pick(): get oneline_body from get_oneline()Jonathan Nieder, Mar 17, 2010
  15. Stephen BoydMar 17, 2010
  16. Jonathan NiederMar 18, 2010
  17. revert: clarify label on conflict hunksJonathan Nieder, Mar 18, 2010
  18. 15/16 cherry-pick, revert: add a label for ancestorJonathan Nieder, Mar 18, 2010
  19. 12/16 compat: add mempcpy()Jonathan Nieder, Mar 17, 2010
  20. 13/16 revert: simplify get_oneline() using mempcpyJonathan Nieder, Mar 17, 2010
  21. 14/16 revert: clarify label on conflict hunksJonathan Nieder, Mar 17, 2010
  22. 15/16 cherry-pick: add a label for ancestorJonathan Nieder, Mar 17, 2010
  23. 16/16 merge-recursive: add a label for ancestorJonathan Nieder, Mar 17, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.