changeset 4756:8e9d3faec270

convert: split converter into convertsource and convertsink
author Brendan Cully <brendan@kublai.com>
date Sun, 01 Jul 2007 19:58:19 -0700
parents 47091c8d028e
children 6a16ef0d1c7c
files hgext/convert/__init__.py hgext/convert/hg.py
diffstat 2 files changed, 21 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/convert/__init__.py
+++ b/hgext/convert/__init__.py
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms
 # of the GNU General Public License, incorporated herein by reference.
 
-from common import NoRepo
+from common import NoRepo, converter_source, converter_sink
 from cvs import convert_cvs
 from git import convert_git
 from hg import convert_mercurial
@@ -17,18 +17,29 @@ commands.norepo += " convert"
 
 converters = [convert_cvs, convert_git, convert_mercurial]
 
-def converter(ui, path, rev=None):
+def convertsource(ui, path, rev=None):
+    for c in converters:
+        try:
+            converter = c(ui, path, rev=rev)
+            if not isinstance(converter, converter_source):
+                raise util.Abort('%s: cannot read from this repository type' % path)
+            return converter
+        except NoRepo:
+            pass
+    raise util.Abort('%s: unknown repository type' % path)
+
+def convertsink(ui, path):
     if not os.path.isdir(path):
         raise util.Abort("%s: not a directory" % path)
     for c in converters:
         try:
-            if rev:
-                return c(ui, path, rev=rev)
-            else:
-                return c(ui, path)
+            converter = c(ui, path)
+            if not isinstance(converter, converter_sink):
+                raise util.Abort('%s: cannot write to this repository type' % path)
+            return converter
         except NoRepo:
             pass
-    raise util.Abort("%s: unknown repository type" % path)
+    raise util.Abort('%s: unknown repository type' % path)
 
 class convert(object):
     def __init__(self, ui, source, dest, mapfile, opts):
@@ -302,14 +313,10 @@ def _convert(ui, src, dest=None, mapfile
         hg.repository(ui, dest, create=True)
         created = True
 
-    destc = converter(ui, dest)
-    if not hasattr(destc, "putcommit"):
-        raise util.Abort("%s: can't write to this repo type" % src)
+    destc = convertsink(ui, dest)
 
     try:
-        srcc = converter(ui, src, rev=opts.get('rev'))
-        if not hasattr(srcc, "getcommit"):
-            raise util.Abort("%s: can't read from this repo type" % src)
+        srcc = convertsource(ui, src, rev=opts.get('rev'))
     except Exception:
         if created:
             shutil.rmtree(dest, True)
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -6,7 +6,7 @@ from mercurial import hg
 from common import NoRepo, converter_sink
 
 class convert_mercurial(converter_sink):
-    def __init__(self, ui, path, rev=None):
+    def __init__(self, ui, path):
         self.path = path
         self.ui = ui
         try: