diff hgext/convert/subversion.py @ 4759:95cbb6b74790

convert: activate subversion engine Fail gracefully if the subversion python bindings are not installed. Support --rev option to convert as well as URL@rev.
author Brendan Cully <brendan@kublai.com>
date Sun, 01 Jul 2007 20:30:04 -0700
parents b6a1f2c46c6c
children 81b170c41986
line wrap: on
line diff
--- a/hgext/convert/subversion.py
+++ b/hgext/convert/subversion.py
@@ -11,15 +11,19 @@ from mercurial import util
 # e.g. SVN 1.5 or backports. Thanks to the bzr folks for enhancing
 # these bindings.
 
-from svn.core import SubversionException, Pool
-import svn.core
-import svn.ra
-import svn.delta
-import svn
-import transport
 from cStringIO import StringIO
 
-from common import NoRepo, commit, converter_source, recode, nocommitmsg
+from common import NoRepo, commit, converter_source
+
+try:
+    from svn.core import SubversionException, Pool
+    import svn.core
+    import svn.ra
+    import svn.delta
+    import svn
+    import transport
+except ImportError:
+    pass
 
 class CompatibilityException(Exception): pass
 
@@ -74,16 +78,29 @@ class svn_paths(object):
 
 # SVN conversion code stolen from bzr-svn and tailor
 class convert_svn(converter_source):
-    def __init__(self, ui, url):
+    def __init__(self, ui, url, rev=None):
+        try:
+            SubversionException
+        except NameError:
+            msg = 'subversion python bindings could not be loaded\n'
+            ui.warn(msg)
+            raise NoRepo(msg)
+
         self.ui = ui
         self.encoding = locale.getpreferredencoding()
+        latest = None
+        if rev:
+            try:
+                latest = int(rev)
+            except ValueError:
+                raise util.Abort('svn: revision %s is not an integer' % rev)
         try:
             # Support file://path@rev syntax. Useful e.g. to convert
             # deleted branches.
             url, latest = url.rsplit("@", 1)
             latest = int(latest)
         except ValueError, e:
-            latest = None
+            pass
         self.url = url
         self.encoding = 'UTF-8' # Subversion is always nominal UTF-8
         try:
@@ -368,7 +385,7 @@ class convert_svn(converter_source):
                 # '2007-01-04T17:35:00.902377Z'
                 date = util.parsedate(date[:18] + " UTC", ["%Y-%m-%dT%H:%M:%S"])
 
-                log = message and self.recode(message) or nocommitmsg
+                log = message and self.recode(message)
                 author = author and self.recode(author) or ''
 
                 cset = commit(author=author,
@@ -506,6 +523,3 @@ class convert_svn(converter_source):
 
         self.reparent(self.module)
         return [path + "/" + c for c in children]
-
-    def recode(self, s):
-        return recode(self.encoding, s)