Mercurial > hg
view 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 |
line wrap: on
line source
#!/bin/sh # # 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" if [ -z "$EDITOR" ]; then EDITOR="vi" fi # Back up our file cp "$LOCAL" "$LOCAL.orig" # Attempt to do a non-interactive merge 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 cp "$LOCAL.orig" "$LOCAL" fi if [ -n "$DISPLAY" ]; then # try using kdiff3, which is fairly nice if type kdiff3 > /dev/null 2>&1; then kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || exit 1 exit 0 fi # try using tkdiff, which is a bit less sophisticated if type tkdiff > /dev/null 2>&1; then tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || exit 1 exit 0 fi fi # Attempt to do a merge with $EDITOR if type merge > /dev/null 2>&1; then echo "conflicts detected in $LOCAL" merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL" exit 0 fi if type diff3 > /dev/null 2>&1; then echo "conflicts detected in $LOCAL" diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL" exit 0 fi HGTMP="" cleanup_exit() { rm -rf "$HGTMP" } # attempt to manually merge with diff and patch if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; 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 HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$" (umask 077 && mkdir "$HGTMP") || { echo "Could not create temporary directory! Exiting." 1>&2 exit 1 } 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 $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0 fi exit 1 fi echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!" exit 1