splicemap: improve error handling when source is subversion (issue2084)
authorBen Goswami <bengoswami@fb.com>
Thu, 25 Apr 2013 18:01:00 -0700
changeset 19122 83973dc1bfe9
parent 19121 478a04605ce1
child 19123 a91894c8064a
splicemap: improve error handling when source is subversion (issue2084) Implemented error handling on splicemap file when source is subversion (This checks are similar to when source is hg or git). The revision string is expected to be of svn:<uuid><path>@<number> format. the test case has been enhanced to check this format.
hgext/convert/common.py
hgext/convert/subversion.py
tests/test-convert-svn-source.t
--- a/hgext/convert/common.py	Thu Apr 25 16:02:58 2013 -0700
+++ b/hgext/convert/common.py	Thu Apr 25 18:01:00 2013 -0700
@@ -67,8 +67,7 @@
         """ fails if revstr is not a 40 byte hex. mercurial and git both uses
             such format for their revision numbering
         """
-        matchobj = re.match(r'[0-9a-fA-F]{40,40}$', revstr)
-        if matchobj is None:
+        if not re.match(r'[0-9a-fA-F]{40,40}$', revstr):
             raise util.Abort(_('splicemap entry %s is not a valid revision'
                                ' identifier') % revstr)
 
--- a/hgext/convert/subversion.py	Thu Apr 25 16:02:58 2013 -0700
+++ b/hgext/convert/subversion.py	Thu Apr 25 18:01:00 2013 -0700
@@ -452,6 +452,14 @@
         del self.commits[rev]
         return commit
 
+    def checkrevformat(self, revstr):
+        """ fails if revision format does not match the correct format"""
+        if not re.match(r'svn:[0-9a-f]{8,8}-[0-9a-f]{4,4}-'
+                              '[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]'
+                              '{12,12}(.*)\@[0-9]+$',revstr):
+            raise util.Abort(_('splicemap entry %s is not a valid revision'
+                               ' identifier') % revstr)
+
     def gettags(self):
         tags = {}
         if self.tags is None:
--- a/tests/test-convert-svn-source.t	Thu Apr 25 16:02:58 2013 -0700
+++ b/tests/test-convert-svn-source.t	Thu Apr 25 18:01:00 2013 -0700
@@ -16,6 +16,8 @@
 #else
   $ SVNREPOURL=file://`python -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$SVNREPOPATH"`
 #endif
+  $ INVALIDREVISIONID=svn:x2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk@1
+  $ VALIDREVISIONID=svn:a2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk/mytrunk@1
 
 Now test that it works with trunk/tags layout, but no branches yet.
 
@@ -168,6 +170,15 @@
   |
   o  0 second letter files: letter2.txt
   
+test invalid splicemap1
+
+  $ cat > splicemap <<EOF
+  > $INVALIDREVISIONID $VALIDREVISIONID
+  > EOF
+  $ hg convert --splicemap splicemap "$SVNREPOURL/proj%20B/mytrunk" smap
+  initializing destination smap repository
+  abort: splicemap entry svn:x2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk@1 is not a valid revision identifier
+  [255]
 
 Test stop revision
   $ hg convert --rev 1 "$SVNREPOURL/proj%20B/mytrunk" stoprev