Index: gclient_scm.py |
=================================================================== |
--- gclient_scm.py (revision 132543) |
+++ gclient_scm.py (working copy) |
@@ -85,7 +85,10 @@ |
scm_name = GetScmName(url) |
if not scm_name in SCM_MAP: |
raise gclient_utils.Error('No SCM found for url %s' % url) |
- return SCM_MAP[scm_name](url, root_dir, relpath) |
+ found_scm = SCM_MAP[scm_name](url, root_dir, relpath) |
+ if not found_scm.BinaryExists(): |
+ raise gclient_utils.Error('%s command not found' % scm_name) |
+ return found_scm |
# SCMWrapper base class |
@@ -105,7 +108,19 @@ |
self.relpath = self.relpath.replace('/', os.sep) |
if self.relpath and self._root_dir: |
self.checkout_path = os.path.join(self._root_dir, self.relpath) |
+ self._checker_command = 'help' |
+ self._binary_name = None |
+ def BinaryExists(self): |
M-A Ruel
2012/04/17 12:15:55
This function may be called over 100 times for a g
Jun Mukai
2012/04/18 02:46:36
Oh, got it. Modified to use AssertVersion.
|
+ """Returns true if the command exists.""" |
+ # Do not call _Run() because this we don't want to leave any messages for |
+ # this check. |
+ try: |
+ return gclient_utils.CheckCallAndFilter( |
+ [self._binary_name, self._checker_command], print_stdout=False) == 0 |
+ except OSError: |
+ return False |
+ |
def RunCommand(self, command, options, args, file_list=None): |
# file_list will have all files that are modified appended to it. |
if file_list is None: |
@@ -132,6 +147,7 @@ |
if url.startswith('git+http://') or url.startswith('git+https://'): |
url = url[4:] |
SCMWrapper.__init__(self, url, root_dir, relpath) |
+ self._binary_name = 'git' |
def GetRevisionDate(self, revision): |
"""Returns the given revision's date in ISO-8601 format (which contains the |
@@ -759,7 +775,7 @@ |
def _Capture(self, args): |
return subprocess2.check_output( |
- ['git'] + args, |
+ [self._binary_name] + args, |
stderr=subprocess2.PIPE, |
cwd=self.checkout_path).strip() |
@@ -769,12 +785,16 @@ |
stdout = kwargs.get('stdout', sys.stdout) |
stdout.write('\n________ running \'git %s\' in \'%s\'\n' % ( |
' '.join(args), kwargs['cwd'])) |
- gclient_utils.CheckCallAndFilter(['git'] + args, **kwargs) |
+ gclient_utils.CheckCallAndFilter([self._binary_name] + args, **kwargs) |
class SVNWrapper(SCMWrapper): |
""" Wrapper for SVN """ |
+ def __init__(self, url=None, root_dir=None, relpath=None): |
+ SCMWrapper.__init__(self, url, root_dir, relpath) |
+ self._binary_name = 'svn' |
+ |
def GetRevisionDate(self, revision): |
"""Returns the given revision's date in ISO-8601 format (which contains the |
time zone).""" |
@@ -1094,7 +1114,7 @@ |
def _Run(self, args, options, **kwargs): |
"""Runs a commands that goes to stdout.""" |
kwargs.setdefault('cwd', self.checkout_path) |
- gclient_utils.CheckCallAndFilterAndHeader(['svn'] + args, |
+ gclient_utils.CheckCallAndFilterAndHeader([self._binary_name] + args, |
always=options.verbose, **kwargs) |
def _RunAndGetFileList(self, args, options, file_list, cwd=None): |