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

[PATCH 13/14] cherry-pick, revert: add a label for ancestor

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Mar 21, 2010, 00:46 UTC
Message-ID
<20100321004607.GH23888@progeny.tock>
In-Reply-To
<20100321002535.GA23681@progeny.tock>

When writing conflict hunks in ‘diff3 -m’ format, also add a label to the common ancestor. Especially in a cherry-pick, it is not immediately obvious without such a label what the common ancestor represents.

git rerere does not have trouble parsing the new output and its preimage ids are unchanged since it includes its own code for recreating conflict hunks. No other code in git parses conflict hunks.

Requested-by: Stefan Monnier <monnier@iro.umontreal.ca>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
From <http://thread.gmane.org/gmane.comp.version-control.git/142374/focus=142449>.
 builtin/revert.c                |    5 ++++-
 t/t3507-cherry-pick-conflict.sh |    4 ++--
 2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c
index b314629..625281c 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -280,7 +280,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
 {
 	unsigned char head[20];
 	struct commit *base, *next, *parent;
-	const char *next_label;
+	const char *base_label, *next_label;
 	int i, index_fd, clean;
 	struct commit_message msg = { NULL, NULL, NULL, NULL, NULL };
 
@@ -367,6 +367,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
 
 	if (action == REVERT) {
 		base = commit;
+		base_label = msg.label;
 		next = parent;
 		next_label = msg.parent_label;
 		add_to_msg("Revert \"");
@@ -381,6 +382,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
 		add_to_msg(".\n");
 	} else {
 		base = parent;
+		base_label = msg.parent_label;
 		next = commit;
 		next_label = msg.label;
 		set_author_ident_env(msg.message);
@@ -394,6 +396,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
 
 	read_cache();
 	init_merge_options(&o);
+	o.ancestor = base ? base_label : "(empty tree)";
 	o.branch1 = "HEAD";
 	o.branch2 = next ? next_label : "(empty tree)";
 
diff --git a/t/t3507-cherry-pick-conflict.sh b/t/t3507-cherry-pick-conflict.sh
index 6a20817..e25cf80 100644
--- a/t/t3507-cherry-pick-conflict.sh
+++ b/t/t3507-cherry-pick-conflict.sh
@@ -112,7 +112,7 @@ test_expect_success 'diff3 -m style' '
 	cat <<-EOF > expected &&
 	<<<<<<< HEAD
 	a
-	|||||||
+	||||||| parent of objid picked
 	b
 	=======
 	c
@@ -179,7 +179,7 @@ test_expect_success 'revert conflict, diff3 -m style' '
 	cat <<-EOF > expected &&
 	<<<<<<< HEAD
 	a
-	|||||||
+	||||||| objid picked
 	c
 	=======
 	b
-- 
1.7.0.2
Previous: Jonathan NiederNext: Jonathan Nieder
Message 15 of 16 in “What's cooking in git.git (Mar 2010, #05; Sat, 20)”
  1. Junio C HamanoMar 20, 2010
  2. 0/14 jn/merge-diff3-labelJonathan Nieder, Mar 21, 2010
  3. 01/14 tests: document format of conflicts from checkout -mJonathan Nieder, Mar 21, 2010
  4. 02/14 tests: document cherry-pick behavior in face of conflictsJonathan Nieder, Mar 21, 2010
  5. 03/14 xdl_merge(): add optional ancestor label to diff3-style outputJonathan Nieder, Mar 21, 2010
  6. 04/14 xdl_merge(): move file1 and file2 labels to xmparam structureJonathan Nieder, Mar 21, 2010
  7. 05/14 merge-file --diff3: add a label for ancestorJonathan Nieder, Mar 21, 2010
  8. 06/14 ll_merge(): add ancestor label parameter for diff3-style outputJonathan Nieder, Mar 21, 2010
  9. 07/14 checkout --conflict=diff3: add a label for ancestorJonathan Nieder, Mar 21, 2010
  10. 08/14 merge_file(): add comment explaining behavior wrt conflict styleJonathan Nieder, Mar 21, 2010
  11. 09/14 merge_trees(): add ancestor label parameter for diff3-style outputJonathan Nieder, Mar 21, 2010
  12. 10/14 checkout -m --conflict=diff3: add a label for ancestorJonathan Nieder, Mar 21, 2010
  13. 11/14 compat: add mempcpy()Jonathan Nieder, Mar 21, 2010
  14. 12/14 revert: clarify label on conflict hunksJonathan Nieder, Mar 21, 2010
  15. 13/14 cherry-pick, revert: add a label for ancestorJonathan Nieder, Mar 21, 2010
  16. 14/14 merge-recursive: add a label for ancestorJonathan Nieder, Mar 21, 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.