diff hgext/convert/subversion.py @ 5554:2147a734dcf9

convert: tell the source repository when a rev has been converted This lets us roundtrip changes between svn and hg.
author Bryan O'Sullivan <bos@serpentine.com>
date Mon, 26 Nov 2007 17:23:20 -0800
parents e01c748cb632
children 6e1a61b14bbf
line wrap: on
line diff
--- a/hgext/convert/subversion.py	Mon Nov 26 14:01:31 2007 -0800
+++ b/hgext/convert/subversion.py	Mon Nov 26 17:23:20 2007 -0800
@@ -154,6 +154,12 @@
         self.head = self.revid(self.last_changed)
         self._changescache = None
 
+        if os.path.exists(os.path.join(url, '.svn/entries')):
+            self.wc = url
+        else:
+            self.wc = None
+        self.convertfp = None
+
     def setrevmap(self, revmap):
         lastrevs = {}
         for revid in revmap.iterkeys():
@@ -298,6 +304,15 @@
             self.ui.note('no tags found at revision %d\n' % start)
         return tags
 
+    def converted(self, rev, destrev):
+        if not self.wc:
+            return
+        if self.convertfp is None:
+            self.convertfp = open(os.path.join(self.wc, '.svn', 'hg-shamap'),
+                                  'a')
+        self.convertfp.write('%s %d\n' % (destrev, self.revnum(rev)))
+        self.convertfp.flush()
+
     # -- helper functions --
 
     def revid(self, revnum, module=None):
@@ -749,6 +764,9 @@
             fp.close()
             util.set_exec(hook, True)
 
+        xport = transport.SvnRaTransport(url=geturl(path))
+        self.uuid = svn.ra.get_uuid(xport.ra)
+
     def wjoin(self, *names):
         return os.path.join(self.wc, *names)
 
@@ -837,10 +855,13 @@
     def addchild(self, parent, child):
         self.childmap[parent] = child
 
+    def revid(self, rev):
+        return u"svn:%s@%s" % (self.uuid, rev)
+        
     def putcommit(self, files, parents, commit):
         for parent in parents:
             try:
-                return self.childmap[parent]
+                return self.revid(self.childmap[parent])
             except KeyError:
                 pass
         entries = set(self.delete)
@@ -873,7 +894,7 @@
                          revprop=True, revision=rev)
             for parent in parents:
                 self.addchild(parent, rev)
-            return rev
+            return self.revid(rev)
         finally:
             os.unlink(messagefile)