Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: gclient_scm.py

Issue 8382030: depot_tools: Add git svn find-rev for safesync_url parsing (commonly LKGR link). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: changing more occurrences of SVN to Svn Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gclient.py ('k') | scm.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient_scm.py
diff --git a/gclient_scm.py b/gclient_scm.py
index 55aa1cca190287dd679c8ff85200c0a80e28004e..0b21dce99a5717e3ebdd3ce2474a220a9215564f 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -483,6 +483,34 @@ class GitWrapper(SCMWrapper):
files = self._Capture(['diff', '--name-only', merge_base]).split()
file_list.extend([os.path.join(self.checkout_path, f) for f in files])
+ def GetUsableRev(self, rev, options):
+ """Finds a useful revision for this repository.
+
+ If SCM is git-svn and the head revision is less than |rev|, git svn fetch
+ will be called on the source."""
+ sha1 = None
+ # 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) and
+ rev.isdigit() and len(rev) < 7):
+ local_head = scm.GIT.GetGitSvnHeadRev(cwd=self.checkout_path)
+ if not local_head or local_head < int(rev):
+ if options.verbose:
+ print('Running git svn fetch. This might take a while.\n')
+ scm.GIT.Capture(['svn', 'fetch'], cwd=self.checkout_path)
+ sha1 = scm.GIT.GetSha1ForSvnRev(cwd=self.checkout_path, rev=rev)
+ elif scm.GIT.IsValidRevision(cwd=self.checkout_path, rev=rev):
+ sha1 = rev
+ if not sha1:
+ raise gclient_utils.Error(
+ ( '%s is not a value hash. Safesync URLs with a git checkout\n'
+ 'currently require a git-svn remote or a safesync_url that\n'
+ 'provides git sha1s. Please add a git-svn remote or change\n'
+ 'your safesync_url. For more info, see:\n'
+ 'http://code.google.com/p/chromium/wiki/UsingNewGit'
+ '#Initial_checkout') % rev)
+ return sha1
+
def FullUrlForRelativeUrl(self, url):
# Strip from last '/'
# Equivalent to unix basename
@@ -1002,6 +1030,14 @@ class SVNWrapper(SCMWrapper):
else:
self._RunAndGetFileList(command, options, file_list)
+ def GetUsableRev(self, rev, options):
+ """Verifies the validity of the revision for this repository."""
+ if not scm.SVN.IsValidRevision(url='%s@%s' % (self.url, rev)):
+ raise gclient_utils.Error(
+ ( '%s isn\'t a valid revision. Please check that your safesync_url is\n'
+ 'correct.') % rev)
+ return rev
+
def FullUrlForRelativeUrl(self, url):
# Find the forth '/' and strip from there. A bit hackish.
return '/'.join(self.url.split('/')[:4]) + url
« no previous file with comments | « gclient.py ('k') | scm.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698