##// END OF EJS Templates
Additional appendfile fixes for interleaved data/index files...
Additional appendfile fixes for interleaved data/index files The appendfile code was not passing default version info to the changelog or manifest classes, and so they were always being created as version 0. revlog.checkinlinesize had to be corrected to seek to the end of the index file when no index file was passed (only clone does this)

File last commit:

r2051:6a03cff2 0.8.1 default
r2082:856f0ba2 default
Show More
hgmerge
183 lines | 4.8 KiB | text/plain | TextLexer
Thomas Arendsen Hein
Remove bashisms and use /bin/sh instead of /bin/bash....
r544 #!/bin/sh
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 #
# hgmerge - default merge helper for Mercurial
#
# This tries to find a way to do three-way merge on the current system.
Vadim Gelfer
run merge program in repo root....
r1885 # The result ought to end up in $1. Script is run in root directory of
# repository.
Vadim Gelfer
give more info to hgmerge script.
r1883 #
# Environment variables set by Mercurial:
# HG_FILE name of file within repo
# HG_MY_NODE revision being merged
# HG_OTHER_NODE revision being merged
mpm@selenic.com
Replace tkmerge with hgmerge...
r240
set -e # bail out quickly on failure
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 LOCAL="$1"
BASE="$2"
OTHER="$3"
mpm@selenic.com
Replace tkmerge with hgmerge...
r240
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795 if [ -z "$EDITOR" ]; then
EDITOR="vi"
fi
Thomas Arendsen Hein
Use vi if $EDITOR is unset.
r304
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 # find decent versions of our utilities, insisting on the GNU versions where we
# need to
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 MERGE="merge"
DIFF3="gdiff3"
DIFF="gdiff"
PATCH="gpatch"
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 type "$MERGE" >/dev/null 2>&1 || MERGE=
type "$DIFF3" >/dev/null 2>&1 || DIFF3="diff3"
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 $DIFF3 --version >/dev/null 2>&1 || DIFF3=
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 type "$DIFF" >/dev/null 2>&1 || DIFF="diff"
type "$DIFF" >/dev/null 2>&1 || DIFF=
type "$PATCH" >/dev/null 2>&1 || PATCH="patch"
type "$PATCH" >/dev/null 2>&1 || PATCH=
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 # find optional visual utilities
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 FILEMERGE="/Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge"
KDIFF3="kdiff3"
TKDIFF="tkdiff"
Radoslaw Szkodzinski
hgmerge: add meld support
r1774 MELD="meld"
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 type "$FILEMERGE" >/dev/null 2>&1 || FILEMERGE=
type "$KDIFF3" >/dev/null 2>&1 || KDIFF3=
type "$TKDIFF" >/dev/null 2>&1 || TKDIFF=
Radoslaw Szkodzinski
hgmerge: add meld support
r1774 type "$MELD" >/dev/null 2>&1 || MELD=
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701 # random part of names
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 RAND="$RANDOM$RANDOM"
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 # temporary directory for diff+patch merge
Thomas Arendsen Hein
Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
r1797 HGTMP="${TMPDIR-/tmp}/hgmerge.$RAND"
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701
# backup file
BACKUP="$LOCAL.orig.$RAND"
# file used to test for file change
CHGTEST="$LOCAL.chg.$RAND"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700
# put all your required cleanup here
cleanup() {
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701 rm -f "$BACKUP" "$CHGTEST"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 rm -rf "$HGTMP"
}
# functions concerning program exit
success() {
cleanup
exit 0
}
failure() {
echo "merge failed" 1>&2
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701 mv "$BACKUP" "$LOCAL"
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 cleanup
exit 1
}
Radoslaw Szkodzinski
hgmerge: add and use ask_if_merged function...
r1771 # Ask if the merge was successful
ask_if_merged() {
Thomas Arendsen Hein
Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
r1797 while true; do
echo "$LOCAL seems unchanged."
echo "Was the merge successful? [y/n]"
Radoslaw Szkodzinski
hgmerge: add and use ask_if_merged function...
r1771 read answer
Thomas Arendsen Hein
Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
r1797 case "$answer" in
Radoslaw Szkodzinski
hgmerge: add and use ask_if_merged function...
r1771 y*|Y*) success;;
n*|N*) failure;;
esac
done
}
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 # Clean up when interrupted
trap "failure" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701 # Back up our file (and try hard to keep the mtime unchanged)
mv "$LOCAL" "$BACKUP"
cp "$BACKUP" "$LOCAL"
mpm@selenic.com
Replace tkmerge with hgmerge...
r240
# Attempt to do a non-interactive merge
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 if [ -n "$MERGE" -o -n "$DIFF3" ]; then
if [ -n "$MERGE" ]; then
$MERGE "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && success
elif [ -n "$DIFF3" ]; then
$DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" && success
fi
if [ $? -gt 1 ]; then
echo "automatic merge failed! Exiting." 1>&2
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 fi
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Brendan Cully
Safer version of FileMerge merge
r1664 # on MacOS X try FileMerge.app, shipped with Apple's developer tools
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$FILEMERGE" ]; then
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701 cp "$BACKUP" "$LOCAL"
cp "$BACKUP" "$CHGTEST"
Brendan Cully
Safer version of FileMerge merge
r1664 # filemerge prefers the right by default
Radoslaw Szkodzinski
hgmerge: various cleanups...
r1701 $FILEMERGE -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
[ $? -ne 0 ] && echo "FileMerge failed to launch" && failure
Radoslaw Szkodzinski
hgmerge: add and use ask_if_merged function...
r1771 test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
Christian Ebert
Use of opendiff as merge program on MacOS X...
r1647 fi
Thomas Arendsen Hein
Check if $DISPLAY is set before using tkdiff or kdiff3.
r303 if [ -n "$DISPLAY" ]; then
# try using kdiff3, which is fairly nice
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$KDIFF3" ]; then
Radoslaw Szkodzinski
hgmerge: do not use file with markers in tools merging themselves...
r1798 $KDIFF3 --auto "$BASE" "$BACKUP" "$OTHER" -o "$LOCAL" || failure
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 success
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Thomas Arendsen Hein
Check if $DISPLAY is set before using tkdiff or kdiff3.
r303 # try using tkdiff, which is a bit less sophisticated
Radoslaw Szkodzinski
hgmerge: add and use more tool variables...
r1699 if [ -n "$TKDIFF" ]; then
Radoslaw Szkodzinski
hgmerge: do not use file with markers in tools merging themselves...
r1798 $TKDIFF "$BACKUP" "$OTHER" -a "$BASE" -o "$LOCAL" || failure
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 success
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Radoslaw Szkodzinski
hgmerge: add meld support
r1774
if [ -n "$MELD" ]; then
cp "$BACKUP" "$CHGTEST"
# protect our feet - meld allows us to save to the left file
cp "$BACKUP" "$LOCAL.tmp.$RAND"
# Meld doesn't have automatic merging, so to reduce intervention
# use the file with conflicts
$MELD "$LOCAL.tmp.$RAND" "$LOCAL" "$OTHER" || failure
# Also it doesn't return good error code
test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
fi
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
# Attempt to do a merge with $EDITOR
Radoslaw Szkodzinski
hgmerge: logic changes...
r1772 if [ -n "$MERGE" -o -n "$DIFF3" ]; then
mpm@selenic.com
hgmerge: use diff3 if available...
r242 echo "conflicts detected in $LOCAL"
Radoslaw Szkodzinski
hgmerge: logic changes...
r1772 cp "$BACKUP" "$CHGTEST"
$EDITOR "$LOCAL" || failure
# Some editors do not return meaningful error codes
# Do not take any chances
test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
# attempt to manually merge with diff and patch
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 if [ -n "$DIFF" -a -n "$PATCH" ]; then
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795
Thomas Arendsen Hein
Shortened hgmerge a little bit.
r829 (umask 077 && mkdir "$HGTMP") || {
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 echo "Could not create temporary directory $HGTMP" 1>&2
failure
Thomas Arendsen Hein
Shortened hgmerge a little bit.
r829 }
Thomas Arendsen Hein
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
r795
levon@movementarian.org
Fix use of diff(1) triggered by set -e....
r1434 $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || :
if $PATCH "$LOCAL" < "$HGTMP/diff"; then
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 success
Thomas Arendsen Hein
Shortened hgmerge a little bit.
r829 else
Radoslaw Szkodzinski
hgmerge: fix diff+patch detection; cleanups...
r1770 # If rejects are empty after using the editor, merge was ok
Radoslaw Szkodzinski
hgmerge: logic changes...
r1772 $EDITOR "$LOCAL" "$LOCAL.rej" || failure
test -s "$LOCAL.rej" || success
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure
mpm@selenic.com
Replace tkmerge with hgmerge...
r240 fi
Radoslaw Szkodzinski
hgmerge: improve "apps not found" message
r1773 echo
echo "hgmerge: unable to find any merge utility!"
echo "supported programs:"
Radoslaw Szkodzinski
hgmerge: add meld support
r1774 echo "merge, FileMerge, tkdiff, kdiff3, meld, diff+patch"
Radoslaw Szkodzinski
hgmerge: improve "apps not found" message
r1773 echo
Radoslaw Szkodzinski
hgmerge: add cleanup functions...
r1700 failure