Chromium Code Reviews| Index: gclient_scm.py |
| diff --git a/gclient_scm.py b/gclient_scm.py |
| index dfbcb172b99e19094b979929f287042f0d59aa80..c64a3b646f66db2122f52ff2ab60e2defeeaab9b 100644 |
| --- a/gclient_scm.py |
| +++ b/gclient_scm.py |
| @@ -33,8 +33,8 @@ class DiffFiltererWrapper(object): |
| def SetCurrentFile(self, current_file): |
| self._current_file = current_file |
| - @property |
| - def _replacement_file(self): |
| + @property |
| + def _replacement_file(self): |
| return posixpath.join(self._relpath, self._current_file) |
| def _Replace(self, line): |
| @@ -567,15 +567,18 @@ class GitWrapper(SCMWrapper): |
| If SCM is git-svn and the head revision is less than |rev|, git svn fetch |
| will be called on the source.""" |
| sha1 = None |
| - # Handles an SVN rev. As an optimization, only verify an SVN revision as |
| - # [0-9]{1,6} for now to avoid making a network request. |
| - if rev.isdigit() and len(rev) < 7: |
| - # If the content of the safesync_url appears to be an SVN rev and the |
| - # URL of the source appears to be git, we can only attempt to find out |
| - # if a revision is useful after we've cloned the original URL, so just |
| - # ignore for now. |
| - if (os.path.isdir(self.checkout_path) and |
| - scm.GIT.IsGitSvn(cwd=self.checkout_path)): |
| + if not os.path.isdir(self.checkout_path): |
|
M-A Ruel
2013/02/19 19:07:44
Why are you breaking svn users? It's not necessary
iannucci
2013/02/19 19:18:33
I'm not, this was in the second if statement in th
M-A Ruel
2013/02/19 19:21:42
Oh right, this is only for git checkouts, ok fine.
|
| + raise gclient_utils.Error( |
| + ( 'We could not find a valid hash for safesync_url response "%s".\n' |
| + 'Safesync URLs with a git checkout currently require the repo to\n' |
| + 'be cloned without a safesync_url before adding the safesync_url.\n' |
| + 'For more info, see: ' |
| + 'http://code.google.com/p/chromium/wiki/UsingNewGit' |
| + '#Initial_checkout' ) % rev) |
| + elif rev.isdigit() and len(rev) < 7: |
| + # Handles an SVN rev. As an optimization, only verify an SVN revision as |
| + # [0-9]{1,6} for now to avoid making a network request. |
| + if scm.GIT.IsGitSvn(cwd=self.checkout_path): |
| local_head = scm.GIT.GetGitSvnHeadRev(cwd=self.checkout_path) |
| if not local_head or local_head < int(rev): |
| try: |
| @@ -604,8 +607,15 @@ class GitWrapper(SCMWrapper): |
| 'configured or the revision in your safesync_url is\n' |
| 'higher than git-svn remote\'s HEAD as we couldn\'t find a\n' |
| 'corresponding git hash for SVN rev %s.' ) % rev) |
| - elif scm.GIT.IsValidRevision(cwd=self.checkout_path, rev=rev): |
| - sha1 = rev |
| + else: |
| + if scm.GIT.IsValidRevision(cwd=self.checkout_path, rev=rev): |
| + sha1 = rev |
| + else: |
| + # May exist in origin, but we don't have it yet, so fetch and look |
| + # again. |
| + scm.GIT.Capture(['fetch', 'origin'], cwd=self.checkout_path) |
| + if scm.GIT.IsValidRevision(cwd=self.checkout_path, rev=rev): |
| + sha1 = rev |
| if not sha1: |
| raise gclient_utils.Error( |