hgmerge
changeset 829 764b0350acb8
parent 828 7a6acd56cd5a
child 830 ca080d28d0af
equal deleted inserted replaced
828:7a6acd56cd5a 829:764b0350acb8
    18 # Back up our file
    18 # Back up our file
    19 cp "$LOCAL" "$LOCAL.orig"
    19 cp "$LOCAL" "$LOCAL.orig"
    20 
    20 
    21 # Attempt to do a non-interactive merge
    21 # Attempt to do a non-interactive merge
    22 if type merge > /dev/null 2>&1; then
    22 if type merge > /dev/null 2>&1; then
    23     if merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null; then
    23     merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0
    24 	# success!
       
    25 	exit 0
       
    26     fi
       
    27     cp "$LOCAL.orig" "$LOCAL"
    24     cp "$LOCAL.orig" "$LOCAL"
    28 elif type diff3 > /dev/null 2>&1; then
    25 elif type diff3 > /dev/null 2>&1; then
    29     if diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" ; then
    26     diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0
    30 	# success
       
    31 	exit 0
       
    32     fi
       
    33     cp "$LOCAL.orig" "$LOCAL"
    27     cp "$LOCAL.orig" "$LOCAL"
    34 fi
    28 fi
    35 
    29 
    36 if [ -n "$DISPLAY" ]; then
    30 if [ -n "$DISPLAY" ]; then
    37     # try using kdiff3, which is fairly nice
    31     # try using kdiff3, which is fairly nice
    38     if type kdiff3 > /dev/null 2>&1; then
    32     if type kdiff3 > /dev/null 2>&1; then
    39 	if kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" ; then
    33 	kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || exit 1
    40 	    exit 0
    34 	exit 0
    41 	else
       
    42 	    exit 1
       
    43 	fi
       
    44     fi
    35     fi
    45 
    36 
    46     # try using tkdiff, which is a bit less sophisticated
    37     # try using tkdiff, which is a bit less sophisticated
    47     if type tkdiff > /dev/null 2>&1; then
    38     if type tkdiff > /dev/null 2>&1; then
    48 	if tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" ; then
    39 	tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || exit 1
    49 	    exit 0
    40 	exit 0
    50 	else
       
    51 	    exit 1
       
    52 	fi
       
    53     fi
    41     fi
    54 fi
    42 fi
    55 
    43 
    56 # Attempt to do a merge with $EDITOR
    44 # Attempt to do a merge with $EDITOR
    57 if type merge > /dev/null 2>&1; then
    45 if type merge > /dev/null 2>&1; then
    71     rm -rf "$HGTMP"
    59     rm -rf "$HGTMP"
    72     exit $1
    60     exit $1
    73 }
    61 }
    74 
    62 
    75 # attempt to manually merge with diff and patch
    63 # attempt to manually merge with diff and patch
    76 if type diff > /dev/null 2>&1; then
    64 if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then
    77     if type patch > /dev/null 2>&1; then
    65     # Remove temporary files even if we get interrupted
    78 	# Remove temporary files even if we get interrupted
    66     trap "cleanup_exit 1" TERM KILL INT QUIT ABRT
    79 	trap "cleanup_exit 1" TERM KILL INT QUIT ABRT
       
    80 
    67 
    81 	HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
    68     HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
    82 	(umask 077 && mkdir "$HGTMP") || {
    69     (umask 077 && mkdir "$HGTMP") || {
    83 	    echo "Could not create temporary directory! Exiting." 1>&2
    70 	echo "Could not create temporary directory! Exiting." 1>&2
    84 	    exit 1
    71 	exit 1
    85 	}
    72     }
    86 
    73 
    87 	diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
    74     diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
    88 	if patch "$LOCAL" < "$HGTMP/diff" ; then
    75     if patch "$LOCAL" < "$HGTMP/diff"; then
    89 	    cleanup_exit 0
    76 	cleanup_exit 0
    90 	else
    77     else
    91 	    $EDITOR "$LOCAL" "$LOCAL.rej"
    78 	$EDITOR "$LOCAL" "$LOCAL.rej"
    92 	fi
       
    93 	cleanup_exit 1
       
    94     fi
    79     fi
       
    80     cleanup_exit 1
    95 fi
    81 fi
    96 
    82 
    97 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
    83 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
    98 exit 1
    84 exit 1