Chromium Code Reviews| Index: gclient_scm.py |
| =================================================================== |
| --- gclient_scm.py (revision 132728) |
| +++ 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) |
| + scm_class = SCM_MAP[scm_name] |
| + if not scm_class.BinaryExists(): |
| + raise gclient_utils.Error('%s command not found' % scm_name) |
| + return scm_class(url, root_dir, relpath) |
| # SCMWrapper base class |
| @@ -133,6 +136,18 @@ |
| url = url[4:] |
| SCMWrapper.__init__(self, url, root_dir, relpath) |
| + @staticmethod |
| + def BinaryExists(): |
| + """Returns true if the command exists.""" |
| + try: |
| + # We assume git is newer than 1.7. See: crbug.com/114483 |
| + result, version = scm.GIT.AssertVersion('1.7') |
| + if not result: |
| + raise gclient_utils.Error('Git version is older than 1.7: %s' % version) |
| + return result |
| + except OSError: |
| + return False |
| + |
| def GetRevisionDate(self, revision): |
| """Returns the given revision's date in ISO-8601 format (which contains the |
| time zone).""" |
| @@ -775,6 +790,14 @@ |
| class SVNWrapper(SCMWrapper): |
| """ Wrapper for SVN """ |
| + @staticmethod |
| + def BinaryExists(): |
| + """Returns true if the command exists.""" |
| + try: |
| + return scm.SVN.AssertVersion('0')[0] |
|
M-A Ruel
2012/04/18 12:37:01
We require svn 1.4.
Jun Mukai
2012/04/18 12:48:09
Done.
|
| + except OSError: |
| + return False |
| + |
| def GetRevisionDate(self, revision): |
| """Returns the given revision's date in ISO-8601 format (which contains the |
| time zone).""" |