annotate hgmerge @ 1335:bea6356b8bca

git -> hg conversion script contrib/convert-repo changes: - do not print verbose output so that error messages are seen more easily - Output the date as integer and not as floating point number. - Do not require a ".git" subdirectory to work on, but use the GIT_DIR environment var to specify the git repository. Change is otherwise compatible to the current version and I have tested it by converting the kernel and several git respositories from kernel.org. (Btw, the udev test dir contains a /sys dir with entries which should not be normal dirs and not be normal files. ;-) Thanks again for mercurial, Florian La Roche --- a/contrib/convert-repo +++ b/contrib/convert-repo @@ -28,26 +28,18 @@ self.path = path def getheads(self): - h = file(self.path + "/.git/HEAD").read()[:-1] - return [h] + return [file(self.path + "/HEAD").read()[:-1]] def catfile(self, rev, type): if rev == "0" * 40: raise IOError() - path = os.getcwd() - os.chdir(self.path) - fh = os.popen("git-cat-file %s %s 2>/dev/null" % (type, rev)) - os.chdir(path) + fh = os.popen("GIT_DIR=%s git-cat-file %s %s 2>/dev/null" % (self.path, type, rev)) return fh.read() def getfile(self, name, rev): return self.catfile(rev, "blob") def getchanges(self, version): - path = os.getcwd() - os.chdir(self.path) - fh = os.popen("git-diff-tree --root -m -r %s" % (version)) - os.chdir(path) - + fh = os.popen("GIT_DIR=%s git-diff-tree --root -m -r %s" % (self.path, version)) changes = [] for l in fh: if "\t" not in l: continue @@ -83,9 +75,9 @@ def gettags(self): tags = {} - for f in os.listdir(self.path + "/.git/refs/tags"): + for f in os.listdir(self.path + "/refs/tags"): try: - h = file(self.path + "/.git/refs/tags/" + f).read().strip() + h = file(self.path + "/refs/tags/" + f).read().strip() tags[f] = h except: pass @@ -99,8 +91,7 @@ def getheads(self): h = self.repo.changelog.heads() - h = [ hg.hex(x) for x in h ] - return h + return [ hg.hex(x) for x in h ] def putfile(self, f, e, data): self.repo.wfile(f, "w").write(data) @@ -155,12 +146,12 @@ newlines.sort() if newlines != oldlines: - print "updating tags" + #print "updating tags" f = self.repo.wfile(".hgtags", "w") f.write("".join(newlines)) f.close() if not oldlines: self.repo.add([".hgtags"]) - date = "%s 0" % time.mktime(time.gmtime()) + date = "%s 0" % int(time.mktime(time.gmtime())) self.repo.rawcommit([".hgtags"], "update tags", "convert-repo", date, self.repo.changelog.tip(), hg.nullid) @@ -262,7 +253,7 @@ num -= 1 if c in self.map: continue desc = self.commitcache[c][3].splitlines()[0] - print num, desc + #print num, desc self.copy(c) tags = self.source.gettags() @@ -275,6 +266,8 @@ self.dest.puttags(ctags) gitpath, hgpath, mapfile = sys.argv[1:] +if os.path.isdir(gitpath + "/.git"): + gitpath += "/.git" c = convert(convert_git(gitpath), convert_mercurial(hgpath), mapfile) c.convert() _______________________________________________ Mercurial mailing list Mercurial@selenic.com http://selenic.com/mailman/listinfo/mercurial
author Florian La Roche <laroche@redhat.com>
date Fri, 23 Sep 2005 17:15:36 -0700
parents 9c918287d10b
children 696851b1bba9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
544
3d4d5f2aba9a Remove bashisms and use /bin/sh instead of /bin/bash.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 306
diff changeset
1 #!/bin/sh
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
2 #
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
3 # hgmerge - default merge helper for Mercurial
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
4 #
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
5 # This tries to find a way to do three-way merge on the current system.
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
6 # The result ought to end up in $1.
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
7
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
8 set -e # bail out quickly on failure
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
9
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
10 LOCAL="$1"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
11 BASE="$2"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
12 OTHER="$3"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
13
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
14 if [ -z "$EDITOR" ]; then
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
15 EDITOR="vi"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
16 fi
304
38fb7d23b78d Use vi if $EDITOR is unset.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 303
diff changeset
17
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
18 # Back up our file
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
19 cp "$LOCAL" "$LOCAL.orig"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
20
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
21 # Attempt to do a non-interactive merge
828
7a6acd56cd5a Hide error message of type command.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 814
diff changeset
22 if type merge > /dev/null 2>&1; then
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
23 merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
24 cp "$LOCAL.orig" "$LOCAL"
828
7a6acd56cd5a Hide error message of type command.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 814
diff changeset
25 elif type diff3 > /dev/null 2>&1; then
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
26 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
27 cp "$LOCAL.orig" "$LOCAL"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
28 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
29
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
30 if [ -n "$DISPLAY" ]; then
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
31 # try using kdiff3, which is fairly nice
828
7a6acd56cd5a Hide error message of type command.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 814
diff changeset
32 if type kdiff3 > /dev/null 2>&1; then
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
33 kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || exit 1
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
34 exit 0
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
35 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
36
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
37 # try using tkdiff, which is a bit less sophisticated
828
7a6acd56cd5a Hide error message of type command.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 814
diff changeset
38 if type tkdiff > /dev/null 2>&1; then
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
39 tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || exit 1
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
40 exit 0
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
41 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
42 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
43
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
44 # Attempt to do a merge with $EDITOR
828
7a6acd56cd5a Hide error message of type command.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 814
diff changeset
45 if type merge > /dev/null 2>&1; then
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
46 echo "conflicts detected in $LOCAL"
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
47 merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL"
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
48 exit 0
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
49 fi
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
50
828
7a6acd56cd5a Hide error message of type command.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 814
diff changeset
51 if type diff3 > /dev/null 2>&1; then
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
52 echo "conflicts detected in $LOCAL"
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
53 diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL"
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
54 exit 0
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
55 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
56
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
57 HGTMP=""
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
58 cleanup_exit() {
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
59 rm -rf "$HGTMP"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
60 }
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
61
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
62 # attempt to manually merge with diff and patch
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
63 if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
64 # Remove temporary files even if we get interrupted
831
232d0616a80a Cleaned up trap handling:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 830
diff changeset
65 trap "cleanup_exit" 0 # normal exit
232d0616a80a Cleaned up trap handling:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 830
diff changeset
66 trap "exit 1" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
67
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
68 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
69 (umask 077 && mkdir "$HGTMP") || {
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
70 echo "Could not create temporary directory! Exiting." 1>&2
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
71 exit 1
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
72 }
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
73
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
74 diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
75 if patch "$LOCAL" < "$HGTMP/diff"; then
831
232d0616a80a Cleaned up trap handling:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 830
diff changeset
76 exit 0
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
77 else
830
ca080d28d0af If rejects are empty after using the editor, merge with diff+patch was ok.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 829
diff changeset
78 # If rejects are empty after using the editor, merge was ok
831
232d0616a80a Cleaned up trap handling:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 830
diff changeset
79 $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
80 fi
831
232d0616a80a Cleaned up trap handling:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 830
diff changeset
81 exit 1
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
82 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
83
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
84 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
85 exit 1