git -> hg conversion script
authorFlorian La Roche <laroche@redhat.com>
Fri, 23 Sep 2005 17:15:36 -0700
changeset 1335 bea6356b8bca
parent 1334 0843e1bf2b97
child 1336 8c094fb47b59
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
contrib/convert-repo
--- a/contrib/convert-repo	Fri Sep 23 17:15:10 2005 -0700
+++ b/contrib/convert-repo	Fri Sep 23 17:15:36 2005 -0700
@@ -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()