| 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
|
|
|