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

Unified Diff: gclient_scm.py

Issue 3185006: Improve -m to be more efficient, only lookup the current rev if it is pinned. (Closed)
Patch Set: Use 'not revision' instead of 'forced_revision' and cleanup string consistency Created 10 years, 4 months 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 | « no previous file | no next file » | 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 3e554a7ba3c6c2a3f736e0e0ce1b99a8fba39d9f..c4484a216f10abf78be99f8fa38e6a9b66eabc53 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -725,22 +725,27 @@ class SVNWrapper(SCMWrapper):
if args:
raise gclient_utils.Error("Unsupported argument(s): %s" % ",".join(args))
+ # revision is the revision to match. It is None if no revision is specified,
+ # i.e. the 'deps ain't pinned'.
url, revision = gclient_utils.SplitUrlRevision(self.url)
+ # Keep the original unpinned url for reference in case the repo is switched.
base_url = url
- forced_revision = False
- rev_str = ""
if options.revision:
# Override the revision number.
revision = str(options.revision)
if revision:
forced_revision = True
+ # Reconstruct the url.
url = '%s@%s' % (url, revision)
rev_str = ' at %s' % revision
+ else:
+ forced_revision = False
+ rev_str = ''
if not os.path.exists(checkout_path):
# We need to checkout.
command = ['checkout', url, checkout_path]
- command = self.AddAdditionalFlags(command, options, revision)
+ command = self._AddAdditionalUpdateFlags(command, options, revision)
scm.SVN.RunAndGetFileList(options.verbose, command, self._root_dir,
file_list)
return
@@ -748,9 +753,9 @@ class SVNWrapper(SCMWrapper):
# Get the existing scm url and the revision number of the current checkout.
from_info = scm.SVN.CaptureInfo(os.path.join(checkout_path, '.'), '.')
if not from_info:
- raise gclient_utils.Error("Can't update/checkout %r if an unversioned "
- "directory is present. Delete the directory "
- "and try again." %
+ raise gclient_utils.Error(('Can\'t update/checkout %r if an unversioned '
+ 'directory is present. Delete the directory '
+ 'and try again.') %
checkout_path)
# Look for locked directories.
@@ -759,14 +764,14 @@ class SVNWrapper(SCMWrapper):
# The current directory is locked, clean it up.
scm.SVN.Run(['cleanup'], checkout_path)
- if options.manually_grab_svn_rev:
- # Retrieve the current HEAD version because svn is slow at null updates.
- if not revision:
- from_info_live = scm.SVN.CaptureInfo(from_info['URL'], '.')
- revision = str(from_info_live['Revision'])
- rev_str = ' at %s' % revision
+ # Retrieve the current HEAD version because svn is slow at null updates.
+ if options.manually_grab_svn_rev and not revision:
+ from_info_live = scm.SVN.CaptureInfo(from_info['URL'], '.')
+ revision = str(from_info_live['Revision'])
+ rev_str = ' at %s' % revision
if from_info['URL'] != base_url:
+ # The repository url changed, need to switch.
to_info = scm.SVN.CaptureInfo(url, '.')
if not to_info.get('Repository Root') or not to_info.get('UUID'):
# The url is invalid or the server is not accessible, it's safer to bail
@@ -775,7 +780,7 @@ class SVNWrapper(SCMWrapper):
can_switch = ((from_info['Repository Root'] != to_info['Repository Root'])
and (from_info['UUID'] == to_info['UUID']))
if can_switch:
- print("\n_____ relocating %s to a new checkout" % self.relpath)
+ print('\n_____ relocating %s to a new checkout' % self.relpath)
# We have different roots, so check if we can switch --relocate.
# Subversion only permits this if the repository UUIDs match.
# Perform the switch --relocate, then rewrite the from_url
@@ -785,7 +790,7 @@ class SVNWrapper(SCMWrapper):
# can update to a revision or have to switch to a different
# branch work as expected.
# TODO(maruel): TEST ME !
- command = ["switch", "--relocate",
+ command = ['switch', '--relocate',
from_info['Repository Root'],
to_info['Repository Root'],
self.relpath]
@@ -803,25 +808,24 @@ class SVNWrapper(SCMWrapper):
'there is local changes in %s. Delete the directory and '
'try again.') % (url, checkout_path))
# Ok delete it.
- print("\n_____ switching %s to a new checkout" % self.relpath)
+ print('\n_____ switching %s to a new checkout' % self.relpath)
gclient_utils.RemoveDirectory(checkout_path)
# We need to checkout.
command = ['checkout', url, checkout_path]
- command = self.AddAdditionalFlags(command, options, revision)
+ command = self._AddAdditionalUpdateFlags(command, options, revision)
scm.SVN.RunAndGetFileList(options.verbose, command, self._root_dir,
file_list)
return
-
# If the provided url has a revision number that matches the revision
# number of the existing directory, then we don't need to bother updating.
if not options.force and str(from_info['Revision']) == revision:
if options.verbose or not forced_revision:
- print("\n_____ %s%s" % (self.relpath, rev_str))
+ print('\n_____ %s%s' % (self.relpath, rev_str))
return
- command = ["update", checkout_path]
- command = self.AddAdditionalFlags(command, options, revision)
+ command = ['update', checkout_path]
+ command = self._AddAdditionalUpdateFlags(command, options, revision)
scm.SVN.RunAndGetFileList(options.verbose, command, self._root_dir,
file_list)
@@ -851,7 +855,8 @@ class SVNWrapper(SCMWrapper):
os.makedirs(checkout_path)
command = ["export", os.path.join(self.url, filename),
os.path.join(checkout_path, filename)]
- command = self.AddAdditionalFlags(command, options, options.revision)
+ command = self._AddAdditionalUpdateFlags(command, options,
+ options.revision)
scm.SVN.Run(command, self._root_dir)
def revert(self, options, args, file_list):
@@ -937,7 +942,7 @@ class SVNWrapper(SCMWrapper):
return '/'.join(self.url.split('/')[:4]) + url
@staticmethod
- def AddAdditionalFlags(command, options, revision):
+ def _AddAdditionalUpdateFlags(command, options, revision):
"""Add additional flags to command depending on what options are set.
command should be a list of strings that represents an svn command.
@@ -946,6 +951,7 @@ class SVNWrapper(SCMWrapper):
if revision:
new_command.extend(['--revision', str(revision).strip()])
# --force was added to 'svn update' in svn 1.5.
- if options.force and scm.SVN.AssertVersion("1.5")[0]:
+ if ((options.force or options.manually_grab_svn_rev) and
+ scm.SVN.AssertVersion("1.5")[0]):
new_command.append('--force')
return new_command
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698