# HG changeset patch # User mpm@selenic.com # Date 1117852186 28800 # Node ID afe895fcc0d00db4b92ed07364a212486698288b # Parent 737c66b682900d82aaca6aa0310c0defd42302af# Parent 4f802588cdfbe71a17a754bd5c477b2c2e8239c5 Resolve bits from TAH -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Resolve bits from TAH manifest hash: dc639d419de857b22da9f707cbb557c328eb12f5 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCoRIaywK+sNU5EO8RAswQAKCiEcQ5RV3C2JZXgQBch28VO3NpSgCdEzcD Td8bV8IKVUIXtvrcy1rCZTY= =tAU7 -----END PGP SIGNATURE----- diff --git a/README b/README --- a/README +++ b/README @@ -19,10 +19,6 @@ Setting up Mercurial: $ export PYTHONPATH=${HOME}/lib/python # add this to your .bashrc $ export PATH=${HOME}/bin:$PATH # - You'll also need to set up a tool to handle three-way merges: - - $ export HGMERGE=tkmerge # customize this - And finally: $ hg # test installation, show help diff --git a/hg b/hg diff --git a/hgmerge b/hgmerge new file mode 100644 --- /dev/null +++ b/hgmerge @@ -0,0 +1,68 @@ +#!/bin/bash +# +# hgmerge - default merge helper for Mercurial +# +# This tries to find a way to do three-way merge on the current system. +# The result ought to end up in $1. + +set -e # bail out quickly on failure + +LOCAL=$1 +BASE=$2 +OTHER=$3 + +# Back up our file +cp $LOCAL $LOCAL.orig + +# Attempt to do a non-interactive merge +if which merge > /dev/null ; then + if merge $LOCAL $BASE $OTHER 2> /dev/null; then + # success! + exit 0 + fi + cp $LOCAL.orig $LOCAL +fi + +# try using kdiff3, which is fairly nice +if which kdiff3 > /dev/null ; then + if kdiff3 --auto $BASE $LOCAL $OTHER -o $LOCAL ; then + exit 0 + else + exit 1 + fi +fi + +# try using tkdiff, which is a bit less sophisticated +if which tkdiff > /dev/null ; then + if tkdiff $LOCAL $OTHER -a $BASE -o $LOCAL ; then + exit 0 + else + exit 1 + fi +fi + +# Attempt to do a merge with $EDITOR +if which merge > /dev/null ; then + echo "conflicts detected in $LOCAL" + merge $LOCAL $BASE $OTHER 2>/dev/null || $EDITOR $LOCAL +fi + +# attempt to manually merge with diff and patch +if which diff > /dev/null ; then + if which patch > /dev/null ; then + T=`mktemp` + diff -u $BASE $OTHER > $T + if patch $LOCAL < $T ; then + exit 0 + else + $EDITOR $LOCAL $LOCAL.rej + fi + rm $T + exit 1 + fi +fi + +echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!" +exit 1 + + diff --git a/mercurial/commands.py b/mercurial/commands.py diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -981,8 +981,8 @@ class localrepository: self.ui.debug("file %s: other %s ancestor %s\n" % (fn, short(other), short(base))) - cmd = os.environ["HGMERGE"] - r = os.system("%s %s %s %s %s" % (cmd, a, b, c, fn)) + cmd = os.environ.get("HGMERGE", "hgmerge") + r = os.system("%s %s %s %s" % (cmd, a, b, c)) if r: self.ui.warn("merging %s failed!\n" % f) diff --git a/mercurial/hgweb.py b/mercurial/hgweb.py --- a/mercurial/hgweb.py +++ b/mercurial/hgweb.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python +# hgweb.py - web interface to a mercurial repository # -# hgweb.py - 0.2 - 21 May 2005 - (c) 2005 Jake Edge -# - web interface to a mercurial repository +# Copyright 21 May 2005 - (c) 2005 Jake Edge +# Copyright 2005 Matt Mackall # # This software may be used and distributed according to the terms # of the GNU General Public License, incorporated herein by reference. diff --git a/mercurial/mdiff.py b/mercurial/mdiff.py --- a/mercurial/mdiff.py +++ b/mercurial/mdiff.py @@ -1,4 +1,10 @@ -#!/usr/bin/python +# mdiff.py - diff and patch routines for mercurial +# +# Copyright 2005 Matt Mackall +# +# This software may be used and distributed according to the terms +# of the GNU General Public License, incorporated herein by reference. + import difflib, struct, mmap from mercurial.mpatch import * diff --git a/mercurial/revlog.py b/mercurial/revlog.py diff --git a/mercurial/ui.py b/mercurial/ui.py diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -29,4 +29,4 @@ setup(name='mercurial', glob.glob('templates/map-*') + glob.glob('templates/*.tmpl'))], cmdclass = { 'install_data' : install_package_data }, - scripts=['hg']) + scripts=['hg', 'hgmerge']) diff --git a/templates/changelogentry.tmpl b/templates/changelogentry.tmpl diff --git a/templates/fileannotate.tmpl b/templates/fileannotate.tmpl diff --git a/templates/filelogentry.tmpl b/templates/filelogentry.tmpl diff --git a/templates/map b/templates/map diff --git a/tkmerge b/tkmerge deleted file mode 100644 --- a/tkmerge +++ /dev/null @@ -1,2 +0,0 @@ -merge $1 $3 $2 || tkdiff -conflict $1 -o $1 -