Commit 94aa50fc authored by maruel@chromium.org's avatar maruel@chromium.org

Make svn update not prompt during a sync.

Otherwise it may hangs in various ways.

R=dpranke@chromium.org
BUG=
TEST=


Review URL: http://codereview.chromium.org/8199016

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@104938 0039d316-1c4b-4281-b951-d872f2087c98
parent 470b543f
......@@ -49,7 +49,7 @@ Hooks
]
"""
__version__ = "0.6.2"
__version__ = "0.6.3"
import copy
import logging
......
......@@ -994,8 +994,24 @@ class SVNWrapper(SCMWrapper):
new_command = command[:]
if revision:
new_command.extend(['--revision', str(revision).strip()])
# We don't want interaction when jobs are used.
if options.jobs > 1:
new_command.append('--non-interactive')
# --force was added to 'svn update' in svn 1.5.
if ((options.force or options.manually_grab_svn_rev) and
scm.SVN.AssertVersion("1.5")[0]):
# --accept was added to 'svn update' in svn 1.6.
if not scm.SVN.AssertVersion('1.5')[0]:
return new_command
# It's annoying to have it block in the middle of a sync, just sensible
# defaults.
if options.force:
new_command.append('--force')
if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]:
new_command.extend(('--accept', 'theirs-conflict'))
elif options.manually_grab_svn_rev:
new_command.append('--force')
if command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]:
new_command.extend(('--accept', 'postpone'))
elif command[0] != 'checkout' and scm.SVN.AssertVersion('1.6')[0]:
new_command.extend(('--accept', 'postpone'))
return new_command
......@@ -86,7 +86,16 @@ def determine_scm(root):
return None
def only_int(val):
if val.isdigit():
return int(val)
else:
return 0
class GIT(object):
current_version = None
@staticmethod
def Capture(args, **kwargs):
return subprocess2.check_output(
......@@ -370,23 +379,19 @@ class GIT(object):
root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd).strip()
return os.path.abspath(os.path.join(cwd, root))
@staticmethod
def AssertVersion(min_version):
@classmethod
def AssertVersion(cls, min_version):
"""Asserts git's version is at least min_version."""
def only_int(val):
if val.isdigit():
return int(val)
else:
return 0
current_version = GIT.Capture(['--version']).split()[-1]
current_version_list = map(only_int, current_version.split('.'))
if cls.current_version is None:
cls.current_version = cls.Capture(['--version']).split()[-1]
current_version_list = map(only_int, cls.current_version.split('.'))
for min_ver in map(int, min_version.split('.')):
ver = current_version_list.pop(0)
if ver < min_ver:
return (False, current_version)
return (False, cls.current_version)
elif ver > min_ver:
return (True, current_version)
return (True, current_version)
return (True, cls.current_version)
return (True, cls.current_version)
class SVN(object):
......@@ -923,24 +928,19 @@ class SVN(object):
directory = parent
return GetCasedPath(directory)
@staticmethod
def AssertVersion(min_version):
@classmethod
def AssertVersion(cls, min_version):
"""Asserts svn's version is at least min_version."""
def only_int(val):
if val.isdigit():
return int(val)
else:
return 0
if not SVN.current_version:
SVN.current_version = SVN.Capture(['--version']).split()[2]
current_version_list = map(only_int, SVN.current_version.split('.'))
if cls.current_version is None:
cls.current_version = cls.Capture(['--version']).split()[2]
current_version_list = map(only_int, cls.current_version.split('.'))
for min_ver in map(int, min_version.split('.')):
ver = current_version_list.pop(0)
if ver < min_ver:
return (False, SVN.current_version)
return (False, cls.current_version)
elif ver > min_ver:
return (True, SVN.current_version)
return (True, SVN.current_version)
return (True, cls.current_version)
return (True, cls.current_version)
@staticmethod
def Revert(repo_root, callback=None, ignore_externals=False):
......
......@@ -73,6 +73,8 @@ class SVNWrapperTestCase(BaseTestCase):
self.force = False
self.reset = False
self.nohooks = False
# TODO(maruel): Test --jobs > 1.
self.jobs = 1
def Options(self, *args, **kwargs):
return self.OptionsObject(*args, **kwargs)
......
......@@ -45,8 +45,8 @@ class RootTestCase(BaseSCMTestCase):
members = [
'ElementTree', 'GetCasedPath', 'GenFakeDiff', 'GIT', 'SVN',
'ValidateEmail',
'cStringIO', 'determine_scm', 'gclient_utils', 'glob', 'logging', 'os',
're', 'subprocess2', 'sys', 'tempfile', 'time',
'cStringIO', 'determine_scm', 'gclient_utils', 'glob', 'logging',
'only_int', 'os', 're', 'subprocess2', 'sys', 'tempfile', 'time',
]
# If this test fails, you should add the relevant test.
self.compareMembers(scm, members)
......@@ -60,6 +60,7 @@ class GitWrapperTestCase(BaseSCMTestCase):
'GenerateDiff', 'GetBranch', 'GetBranchRef', 'GetCheckoutRoot',
'GetDifferentFiles', 'GetEmail', 'GetPatchName', 'GetSVNBranch',
'GetUpstreamBranch', 'IsGitSvn', 'MatchSvnGlob', 'ShortBranchName',
'current_version',
]
# If this test fails, you should add the relevant test.
self.compareMembers(scm.GIT, members)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment