convert: fail if an external required tool is not found
authorPatrick Mezard <pmezard@gmail.com>
Tue, 30 Oct 2007 22:14:15 +0100
changeset 5497 f0a3918abd42
parent 5496 5bff70ff0431
child 5498 4d38e6970b8c
convert: fail if an external required tool is not found
hgext/convert/common.py
hgext/convert/cvs.py
hgext/convert/darcs.py
hgext/convert/git.py
--- a/hgext/convert/common.py	Sun Oct 28 09:47:54 2007 +0100
+++ b/hgext/convert/common.py	Tue Oct 30 22:14:15 2007 +0100
@@ -1,6 +1,7 @@
 # common code for the convert extension
 import base64
 import cPickle as pickle
+from mercurial import util
 
 def encodeargs(args):
     def encodearg(s):
@@ -15,6 +16,11 @@
     s = base64.decodestring(s)
     return pickle.loads(s)
 
+def checktool(exe, name=None):
+    name = name or exe
+    if not util.find_exe(exe):
+        raise util.Abort('cannot find required "%s" tool' % name)
+
 class NoRepo(Exception): pass
 
 SKIPREV = 'SKIP'
--- a/hgext/convert/cvs.py	Sun Oct 28 09:47:54 2007 +0100
+++ b/hgext/convert/cvs.py	Tue Oct 30 22:14:15 2007 +0100
@@ -3,7 +3,7 @@
 import os, locale, re, socket
 from mercurial import util
 
-from common import NoRepo, commit, converter_source
+from common import NoRepo, commit, converter_source, checktool
 
 class convert_cvs(converter_source):
     def __init__(self, ui, path, rev=None):
@@ -13,6 +13,9 @@
         if not os.path.exists(cvs):
             raise NoRepo("couldn't open CVS repo %s" % path)
 
+        for tool in ('cvsps', 'cvs'):
+            checktool(tool)
+
         self.changeset = {}
         self.files = {}
         self.tags = {}
--- a/hgext/convert/darcs.py	Sun Oct 28 09:47:54 2007 +0100
+++ b/hgext/convert/darcs.py	Tue Oct 30 22:14:15 2007 +0100
@@ -1,6 +1,6 @@
 # darcs support for the convert extension
 
-from common import NoRepo, commit, converter_source
+from common import NoRepo, commit, converter_source, checktool
 from mercurial.i18n import _
 from mercurial import util
 import os, shutil, tempfile
@@ -24,6 +24,8 @@
         if not os.path.exists(os.path.join(path, '_darcs', 'inventory')):
             raise NoRepo("couldn't open darcs repo %s" % path)
 
+        checktool('darcs')
+
         if ElementTree is None:
             raise util.Abort(_("Python ElementTree module is not available"))
 
--- a/hgext/convert/git.py	Sun Oct 28 09:47:54 2007 +0100
+++ b/hgext/convert/git.py	Tue Oct 30 22:14:15 2007 +0100
@@ -3,7 +3,7 @@
 import os
 from mercurial import util
 
-from common import NoRepo, commit, converter_source
+from common import NoRepo, commit, converter_source, checktool
 
 class convert_git(converter_source):
     # Windows does not support GIT_DIR= construct while other systems
@@ -31,6 +31,9 @@
             path += "/.git"
         if not os.path.exists(path + "/objects"):
             raise NoRepo("couldn't open GIT repo %s" % path)
+
+        checktool('git-rev-parse', 'git')
+
         self.path = path
 
     def getheads(self):