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

Re: [PATCH v2 3/3] git-merge-one-file: revise merge error reporting

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 25, 2013, 17:04 UTC
Message-ID
<7vk3ovz9zb.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1364127985-13366-4-git-send-email-kevin@bracey.fi>
Kevin Bracey <kevin@bracey.fi> writes:
Show 9 quoted lines
> Commit 718135e improved the merge error reporting for the resolve
> strategy's merge conflict and permission conflict cases, but led to a
> malformed "ERROR:  in myfile.c" message in the case of a file added
> differently.
>
> This commit reverts that change, and uses an alternative approach without
> this flaw.
>
> Signed-off-by: Kevin Bracey <kevin@bracey.fi>

We used to treat "Both added differently" as a separate "info" message, just like the "Auto-merging" message, and let "content conflict" that is an "error" to happen naturally by doing such a merge, possibly followed by permission conflict which is another kind of "error". We coalesced these two into a single message.

And this patch breaks them into separate messages. I am not sure if that aspect of the change is desirable.

The source of "malformed" message seems suspicious. Isn't the root cause of $msg being empty that merge-file can (sometimes) cleanly merge two files using the phoney base in the "both added differently" codepath?

If you resolve that issue by forcing a "conflicted" failure when we handle "add/add" conflict, I think the behaviour of the remainder of the code is better in the original than the updated one.

Perhaps something like this (I am applying these on 'maint')?
 git-merge-one-file.sh | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh
index 25d7714..aa06282 100755
--- a/git-merge-one-file.sh
+++ b/git-merge-one-file.sh
@@ -107,6 +107,7 @@ case "${1:-.}${2:-.}${3:-.}" in
 		;;
 	esac
 
+	add_add_conflict=
 	src2=`git-unpack-file $3`
 	case "$1" in
 	'')
@@ -121,6 +122,7 @@ case "${1:-.}${2:-.}${3:-.}" in
 		# If we do not have enough common material, it is not
 		# worth trying two-file merge using common subsections.
 		expr $sz0 \< $sz1 \* 2 >/dev/null || : >$orig
+		add_add_conflict=yes
 		;;
 	*)
 		echo "Auto-merging $4"
@@ -128,15 +130,13 @@ case "${1:-.}${2:-.}${3:-.}" in
 		;;
 	esac
 
-	# Be careful for funny filename such as "-L" in "$4", which
-	# would confuse "merge" greatly.
 	src1=`git-unpack-file $2`
-	git merge-file "$src1" "$orig" "$src2"
-	ret=$?
-	msg=
-	if test $ret != 0
+
+	ret=0 msg=
+	if git merge-file "$src1" "$orig" "$src2" || test -n "$add_add_conflict"
 	then
 		msg='content conflict'
+		ret=1
 	fi
 
 	# Create the working tree file, using "our tree" version from the
Previous: Kevin BraceyNext: Junio C Hamano
Message 28 of 40 in “Improve P4Merge mergetool invocation”
  1. 0/2 Improve P4Merge mergetool invocationKevin Bracey, Mar 6, 2013
  2. 1/2 p4merge: swap LOCAL and REMOTE for mergetoolKevin Bracey, Mar 6, 2013
  3. Junio C HamanoMar 7, 2013
  4. Kevin BraceyMar 7, 2013
  5. Junio C HamanoMar 7, 2013
  6. Kevin BraceyMar 7, 2013
  7. Junio C HamanoMar 7, 2013
  8. David AguilarMar 7, 2013
  9. Junio C HamanoMar 7, 2013
  10. 2/2 p4merge: create a virtual base if none availableKevin Bracey, Mar 6, 2013
  11. David AguilarMar 7, 2013
  12. Kevin BraceyMar 7, 2013
  13. Junio C HamanoMar 7, 2013
  14. David AguilarMar 7, 2013
  15. 0/3 Improve P4Merge mergetool invocationKevin Bracey, Mar 9, 2013
  16. 1/3 mergetools/p4merge: swap LOCAL and REMOTEKevin Bracey, Mar 9, 2013
  17. 2/3 mergetools/p4merge: create a base if none availableKevin Bracey, Mar 9, 2013
  18. Junio C HamanoMar 10, 2013
  19. 3/3 git-merge-one-file: revise merge error reportingKevin Bracey, Mar 9, 2013
  20. 1/3 mergetools/p4merge: swap LOCAL and REMOTEKevin Bracey, Mar 13, 2013
  21. 2/3 mergetools/p4merge: create a base if none availableKevin Bracey, Mar 13, 2013
  22. 3/3 git-merge-one-file: revise merge error reportingKevin Bracey, Mar 13, 2013
  23. David AguilarMar 13, 2013
  24. 0/3 git-merge-one-file error reportingKevin Bracey, Mar 24, 2013
  25. 1/3 git-merge-one-file: style cleanupKevin Bracey, Mar 24, 2013
  26. 2/3 git-merge-one-file: send "ERROR:" messages to stderrKevin Bracey, Mar 24, 2013
  27. 3/3 git-merge-one-file: revise merge error reportingKevin Bracey, Mar 24, 2013
  28. Junio C HamanoMar 25, 2013
  29. Junio C HamanoMar 25, 2013
  30. Junio C HamanoMar 25, 2013
  31. Eric SunshineMar 25, 2013
  32. Junio C HamanoMar 13, 2013
  33. Kevin BraceyMar 14, 2013
  34. Junio C HamanoMar 14, 2013
  35. Kevin BraceyMar 14, 2013
  36. Kevin BraceyMar 14, 2013
  37. David AguilarMar 13, 2013
  38. 1/2 mergetools/p4merge: swap LOCAL and REMOTEKevin Bracey, Mar 24, 2013
  39. 2/2 mergetools/p4merge: create a base if none availableKevin Bracey, Mar 24, 2013
  40. Junio C HamanoMar 25, 2013

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.