Patchwork [4,of,4] splicemap: improve error handling when source is subversion (issue2084)

login
register
mail settings
Submitter Ben Goswami
Date May 1, 2013, 1:01 a.m.
Message ID <fa7cb2b0998829edcbf8.1367370060@devrs155.prn1.facebook.com>
Download mbox | patch
Permalink /patch/1521/
State Accepted
Commit 83973dc1bfe96c2718f31c3f09a7cd614593dcdf
Headers show

Comments

Ben Goswami - May 1, 2013, 1:01 a.m.
# HG changeset patch
# User Ben Goswami <bengoswami@fb.com>
# Date 1366938060 25200
#      Thu Apr 25 18:01:00 2013 -0700
# Node ID fa7cb2b0998829edcbf8707de5e483a07bdf9f09
# Parent  860167f5e393dc587baed8c1dee8104c851ed2e7
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.
Matt Mackall - May 2, 2013, 5:22 p.m.
On Tue, 2013-04-30 at 18:01 -0700, Ben Goswami wrote:
> # HG changeset patch
> # User Ben Goswami <bengoswami@fb.com>
> # Date 1366938060 25200
> #      Thu Apr 25 18:01:00 2013 -0700
> # Node ID fa7cb2b0998829edcbf8707de5e483a07bdf9f09
> # Parent  860167f5e393dc587baed8c1dee8104c851ed2e7
> splicemap: improve error handling when source is subversion (issue2084)

These are queued for default, thanks.

Patch

diff --git a/hgext/convert/common.py b/hgext/convert/common.py
--- a/hgext/convert/common.py
+++ b/hgext/convert/common.py
@@ -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)
 
diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py
--- a/hgext/convert/subversion.py
+++ b/hgext/convert/subversion.py
@@ -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:
diff --git a/tests/test-convert-svn-source.t b/tests/test-convert-svn-source.t
--- a/tests/test-convert-svn-source.t
+++ b/tests/test-convert-svn-source.t
@@ -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