Mercurial > hg
diff hgmerge @ 1434:696851b1bba9
Fix use of diff(1) triggered by set -e.
Search harder for a decent diff/patch to use.
author | levon@movementarian.org |
---|---|
date | Mon, 24 Oct 2005 14:55:53 -0700 |
parents | 9c918287d10b |
children | 64a1169c927d |
line wrap: on
line diff
--- a/hgmerge Mon Oct 24 14:55:46 2005 -0700 +++ b/hgmerge Mon Oct 24 14:55:53 2005 -0700 @@ -15,6 +15,17 @@ EDITOR="vi" fi +# find decent versions of our utilities, insisting on the GNU versions where we +# need to +DIFF3=gdiff3 +DIFF=gdiff +PATCH=gpatch + +type $DIFF3 >/dev/null 2>&1 || DIFF3=diff3 +type $DIFF >/dev/null 2>&1 || DIFF=diff +type $PATCH >/dev/null 2>&1 || PATCH=patch +$DIFF3 --version >/dev/null 2>&1 || DIFF3= + # Back up our file cp "$LOCAL" "$LOCAL.orig" @@ -22,8 +33,14 @@ if type merge > /dev/null 2>&1; then merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0 cp "$LOCAL.orig" "$LOCAL" -elif type diff3 > /dev/null 2>&1; then - diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0 +elif [ -n "$DIFF3" ]; then + echo $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" + $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0 + if [ $? -eq 2 ]; then + echo "$DIFF3 failed! Exiting." 1>&2 + cp "$LOCAL.orig" "$LOCAL" + exit 1 + fi cp "$LOCAL.orig" "$LOCAL" fi @@ -48,10 +65,18 @@ exit 0 fi -if type diff3 > /dev/null 2>&1; then +if [ -n "$DIFF3" ]; then echo "conflicts detected in $LOCAL" - diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL" - exit 0 + $DIFF3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || { + case $? in + 1) + $EDITOR "$LOCAL" ;; + 2) echo "$DIFF3 failed! Exiting." 1>&2 + cp "$LOCAL.orig" "$LOCAL" + exit 1 ;; + esac + exit 0 + } fi HGTMP="" @@ -60,7 +85,7 @@ } # attempt to manually merge with diff and patch -if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then +if [ -n "$DIFF" -a -n "$PATCH" ]; then # Remove temporary files even if we get interrupted trap "cleanup_exit" 0 # normal exit trap "exit 1" 1 2 3 6 15 # HUP INT QUIT ABRT TERM @@ -71,8 +96,8 @@ exit 1 } - diff -u "$BASE" "$OTHER" > "$HGTMP/diff" - if patch "$LOCAL" < "$HGTMP/diff"; then + $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || : + if $PATCH "$LOCAL" < "$HGTMP/diff"; then exit 0 else # If rejects are empty after using the editor, merge was ok