convert: on svn failure, note libsvn version (issue4043)
authorAugie Fackler <raf@durin42.com>
Fri, 12 Dec 2014 15:53:17 -0500
changeset 23583 a8edcb9c1199
parent 23582 7559dc8c4238
child 23584 db03ed8cbfa3
convert: on svn failure, note libsvn version (issue4043) We have our own fast-path logic to see if something passes a sniff test for being a Subversion repository, but it's possible for a user to svnsync a repo using svn 1.8 and then use svn 1.7 bindings (as in the bug) to try and convert the repo. If we at least tell the user the version of libsvn that we used, they might get enough of a hint to check on their own for format incompatibilities between their svn{admin,sync} and the libsvn used by hg.
hgext/convert/subversion.py
tests/test-convert-svn-source.t
--- a/hgext/convert/subversion.py	Mon Dec 15 13:32:34 2014 -0800
+++ b/hgext/convert/subversion.py	Fri Dec 12 15:53:17 2014 -0500
@@ -318,8 +318,12 @@
             self.uuid = svn.ra.get_uuid(self.ra)
         except SubversionException:
             ui.traceback()
-            raise NoRepo(_("%s does not look like a Subversion repository")
-                         % self.url)
+            svnversion = '%d.%d.%d' % (svn.core.SVN_VER_MAJOR,
+                                       svn.core.SVN_VER_MINOR,
+                                       svn.core.SVN_VER_MICRO)
+            raise NoRepo(_("%s does not look like a Subversion repository "
+                           "to libsvn version %s")
+                         % (self.url, svnversion))
 
         if rev:
             try:
--- a/tests/test-convert-svn-source.t	Mon Dec 15 13:32:34 2014 -0800
+++ b/tests/test-convert-svn-source.t	Fri Dec 12 15:53:17 2014 -0500
@@ -239,3 +239,16 @@
   converting...
   1 init projA
   0 adddir
+
+Test that a too-new repository format is properly rejected:
+  $ mv svn-empty/format format
+  $ echo 999 > svn-empty/format
+It's important that this command explicitly specify svn, otherwise it
+can have surprising side effects (like falling back to a perforce
+depot that can be seen from the test environment and slurping from that.)
+  $ hg convert --source-type svn svn-empty this-will-fail
+  initializing destination this-will-fail repository
+  file:/*/$TESTTMP/svn-empty does not look like a Subversion repository to libsvn version 1.*.* (glob)
+  abort: svn-empty: missing or unsupported repository
+  [255]
+  $ mv format svn-empty/format