Commit 6c2b49d3 authored by szager@chromium.org's avatar szager@chromium.org

Revert "Re-re-land gclient deletion of mismatching checkouts again"

This reverts commit 6ff54485.

'fetch --nohooks chromium' is broken with this change.

BUG=

Review URL: https://codereview.chromium.org/177003023

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@253640 0039d316-1c4b-4281-b951-d872f2087c98
parent 6ff54485
This diff is collapsed.
......@@ -10,7 +10,6 @@ import os
import pipes
import Queue
import re
import socket
import stat
import subprocess
import sys
......@@ -26,20 +25,6 @@ RETRY_MAX = 3
RETRY_INITIAL_SLEEP = 0.5
def enable_deletion_of_conflicting_checkouts():
"""Determines whether to enable new checkout deletion behavior.
Initially, enables the experimental functionality on a small set of
bots.
"""
# TODO(borenet): Remove this hack as soon as we've verified that it
# doesn't cause the bots to break.
if not os.environ.get('CHROME_HEADLESS'):
return False
return socket.gethostname() in ('vm859-m1', 'BUILD1-M1',
'vm630-m1.golo.chromium.org')
class Error(Exception):
"""gclient exception class."""
def __init__(self, msg, *args, **kwargs):
......
......@@ -166,15 +166,12 @@ class GIT(object):
return GIT.ShortBranchName(GIT.GetBranchRef(cwd))
@staticmethod
def IsGitSvn(checkout_root):
def IsGitSvn(cwd):
"""Returns true if this repo looks like it's using git-svn."""
# A git-svn checkout has a .git directory.
if not os.path.exists(os.path.join(checkout_root, '.git')):
return False
# If you have any "svn-remote.*" config keys, we think you're using svn.
try:
GIT.Capture(['config', '--local', '--get-regexp', r'^svn-remote\.'],
cwd=checkout_root)
cwd=cwd)
return True
except subprocess2.CalledProcessError:
return False
......@@ -411,7 +408,7 @@ class GIT(object):
@staticmethod
def GetSha1ForSvnRev(cwd, rev):
"""Returns a corresponding git sha1 for a SVN revision."""
if not GIT.IsGitSvn(cwd):
if not GIT.IsGitSvn(cwd=cwd):
return None
try:
output = GIT.Capture(['svn', 'find-rev', 'r' + str(rev)], cwd=cwd)
......
......@@ -161,6 +161,8 @@ class SVNWrapperTestCase(BaseTestCase):
def testRunCommandException(self):
options = self.Options(verbose=False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
self.mox.ReplayAll()
scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
......@@ -180,6 +182,8 @@ class SVNWrapperTestCase(BaseTestCase):
gclient_scm.scm.SVN.Capture(['--version', '--quiet'], None
).AndReturn('1.5.1')
# It'll to a checkout instead.
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
# Checkout.
gclient_scm.os.path.exists(self.base_path).AndReturn(False)
parent = gclient_scm.os.path.dirname(self.base_path)
......@@ -208,7 +212,10 @@ class SVNWrapperTestCase(BaseTestCase):
gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(False)
gclient_scm.os.path.isdir(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.isdir(join(self.base_path, '.hg')).AndReturn(False)
# Checkout.
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(False)
parent = gclient_scm.os.path.dirname(self.base_path)
gclient_scm.os.path.exists(parent).AndReturn(False)
......@@ -333,6 +340,8 @@ class SVNWrapperTestCase(BaseTestCase):
file_info.url = self.url
file_info.uuid = 'ABC'
file_info.revision = 42
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
# Checkout.
gclient_scm.os.path.exists(self.base_path).AndReturn(False)
parent = gclient_scm.os.path.dirname(self.base_path)
......@@ -364,8 +373,8 @@ class SVNWrapperTestCase(BaseTestCase):
'UUID': 'ABC',
'Revision': 42,
}
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
# Checkout or update.
......@@ -410,8 +419,8 @@ class SVNWrapperTestCase(BaseTestCase):
'UUID': 'ABC',
'Revision': 42,
}
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
# Checkout or update.
......@@ -446,8 +455,8 @@ class SVNWrapperTestCase(BaseTestCase):
'UUID': 'ABC',
'Revision': 42,
}
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
# Checkout or update.
......@@ -512,8 +521,8 @@ class SVNWrapperTestCase(BaseTestCase):
file_list=files_list)
# Now we fall back on scm.update().
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info)
gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None
......@@ -582,8 +591,8 @@ class SVNWrapperTestCase(BaseTestCase):
file_list=files_list)
# Now we fall back on scm.update().
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
gclient_scm.scm.SVN._CaptureInfo(
[], join(self.base_path, ".")).AndReturn(file_info)
......@@ -618,8 +627,8 @@ class SVNWrapperTestCase(BaseTestCase):
# Now we fall back on scm.update().
files_list = self.mox.CreateMockAnything()
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
gclient_scm.scm.SVN._CaptureInfo(
[], join(self.base_path, '.')).AndReturn(file_info)
......@@ -635,23 +644,31 @@ class SVNWrapperTestCase(BaseTestCase):
scm.updatesingle(options, ['DEPS'], files_list)
self.checkstdout('\n_____ %s at 42\n' % self.relpath)
def testUpdateGitSvn(self):
def testUpdateGit(self):
options = self.Options(verbose=True)
gclient_scm.os.path.exists(self.base_path).AndReturn(True)
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(True)
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'Capture', True)
gclient_scm.scm.GIT.Capture(['config', '--local', '--get',
'svn-remote.svn.url'],
cwd=self.base_path).AndReturn(self.url)
file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git')
gclient_scm.os.path.exists(file_path).AndReturn(True)
self.mox.ReplayAll()
scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
relpath=self.relpath)
file_list = []
scm.update(options, self.args, file_list)
self.checkstdout(
('________ found .git directory; skipping %s\n' % self.relpath))
def testUpdateHg(self):
options = self.Options(verbose=True)
gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(True)
self.mox.ReplayAll()
scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
relpath=self.relpath)
file_list = []
scm.update(options, [], file_list)
scm.update(options, self.args, file_list)
self.checkstdout(
('\n_____ %s looks like a git-svn checkout. Skipping.\n' % self.relpath)
)
('________ found .hg directory; skipping %s\n' % self.relpath))
def testGetUsableRevSVN(self):
# pylint: disable=E1101
......@@ -1145,7 +1162,7 @@ class ManagedGitWrapperTestCaseMox(BaseTestCase):
).AndReturn(True)
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).MultipleTimes(
gclient_scm.scm.GIT.IsGitSvn(cwd=self.base_path).MultipleTimes(
).AndReturn(False)
gclient_scm.scm.os.path.isdir(self.base_path).AndReturn(True)
......@@ -1194,7 +1211,7 @@ class ManagedGitWrapperTestCaseMox(BaseTestCase):
gclient_scm.scm.GIT.Capture(['fetch', 'origin'], cwd=self.base_path)
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
gclient_scm.scm.GIT.IsGitSvn(self.base_path).MultipleTimes(
gclient_scm.scm.GIT.IsGitSvn(cwd=self.base_path).MultipleTimes(
).AndReturn(True)
self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsValidRevision', True)
......
......@@ -109,11 +109,9 @@ class GClientSmokeBase(FakeReposTestBase):
not re.match(
r'_____ [^ ]+ : Attempting rebase onto [0-9a-f]+...',
line) and
not re.match(r'_____ [^ ]+ at [^ ]+', line) and not
re.match(
r'_____ (.*) looks like a git-svn checkout. Skipping.',
line)):
# The regexp above are a bit too broad.
not re.match(r'_____ [^ ]+ at [^ ]+', line)):
# The two regexp above are a bit too broad, they are necessary only
# for git checkouts.
self.fail(line)
else:
results.append([[match.group(1), match.group(2), match.group(3)]])
......@@ -778,59 +776,7 @@ class GClientSmokeSVN(GClientSmokeBase):
# Cripple src/third_party/foo and make sure gclient still succeeds.
gclient_utils.rmtree(join(third_party, 'foo', '.svn'))
self.assertEquals(0, self.gclient(cmd + ['--force'])[-1])
def testSkipGitSvn(self):
# Check that gclient skips git-svn checkouts.
if not self.enabled:
return
# Create the .gclient file.
svn_url = self.svn_base + 'trunk/src'
self.gclient(['config', svn_url], cwd=self.root_dir)
# Create a git-svn checkout.
# Use check_output to hide the output from the subprocess.
subprocess2.check_output(['git', 'svn', 'clone', svn_url],
cwd=self.root_dir)
# Ensure that gclient skips the git-svn checkout.
stdout, stderr, rc = self.gclient(['sync', '--jobs', '1'])
self.assertEquals(rc, 0)
self.assertFalse(stderr)
self.assertTrue('_____ src looks like a git-svn checkout. Skipping.'
in stdout)
self.checkBlock(stdout, [
['running', self.root_dir],
['running', os.path.join(self.root_dir, 'src', 'file', 'other')],
['running', self.root_dir],
['running', self.root_dir],
['running', self.root_dir],
['running', self.root_dir],
['running', self.root_dir],
])
# But, we still need the DEPS to be checked out...
foo_dir = os.path.join(self.root_dir, 'src', 'third_party', 'foo')
foo_rev = subprocess2.check_output(['svnversion', foo_dir]).strip()
self.assertEquals(foo_rev, '1')
other_dir = os.path.join(self.root_dir, 'src', 'other')
other_rev = subprocess2.check_output(['svnversion', other_dir]).strip()
self.assertEquals(other_rev, '2')
# Verify that the DEPS are NOT skipped on a second update.
stdout, stderr, rc = self.gclient(['sync', '--jobs', '1'])
self.assertFalse(stderr)
self.assertTrue('_____ src looks like a git-svn checkout. Skipping.'
in stdout)
self.assertFalse(
'_____ src/other looks like a git-svn checkout. Skipping.' in stdout,
'Non git-svn checkout is incorrectly skipped.')
self.assertFalse(
'_____ src/third_party/foo looks like a git-svn checkout. Skipping.'
in stdout,
'Non git-svn checkout is incorrectly skipped.')
self.assertEquals(0, self.gclient(cmd)[-1])
class GClientSmokeSVNTransitive(GClientSmokeBase):
......@@ -1116,7 +1062,7 @@ class GClientSmokeGIT(GClientSmokeBase):
self.assertTree(tree)
# Pre-DEPS hooks run when syncing with --nohooks.
self.gclient(['sync', '--deps', 'mac', '--nohooks', '--force',
self.gclient(['sync', '--deps', 'mac', '--nohooks',
'--revision', 'src@' + self.githash('repo_5', 2)])
tree = self.mangle_git_tree(('repo_5@2', 'src'),
('repo_1@2', 'src/repo1'),
......@@ -1128,7 +1074,7 @@ class GClientSmokeGIT(GClientSmokeBase):
os.remove(join(self.root_dir, 'src', 'git_pre_deps_hooked'))
# Pre-DEPS hooks don't run with --noprehooks
self.gclient(['sync', '--deps', 'mac', '--noprehooks', '--force',
self.gclient(['sync', '--deps', 'mac', '--noprehooks',
'--revision', 'src@' + self.githash('repo_5', 2)])
tree = self.mangle_git_tree(('repo_5@2', 'src'),
('repo_1@2', 'src/repo1'),
......@@ -1450,78 +1396,6 @@ class GClientSmokeBoth(GClientSmokeBase):
self.assertEquals(sorted(entries), sorted(expected))
if gclient_utils.enable_deletion_of_conflicting_checkouts():
def testDeleteConflictingCheckout(self):
if not self.enabled:
return
# Create an initial svn checkout.
self.gclient(['config', '--spec',
'solutions=['
'{"name": "src",'
' "url": "' + self.svn_base + 'trunk/src"},'
']'
])
results = self.gclient(['sync', '--deps', 'mac'])
self.assertEqual(results[2], 0, 'Sync failed!')
# Verify that we have the expected svn checkout.
results = self.gclient(['revinfo', '--deps', 'mac'])
actual = results[0].splitlines()
expected = [
'src: %strunk/src' % self.svn_base,
'src/file/other: File("%strunk/other/DEPS")' % self.svn_base,
'src/other: %strunk/other' % self.svn_base,
'src/third_party/foo: %strunk/third_party/foo@1' % self.svn_base,
]
self.assertEquals(actual, expected)
# Change the desired checkout to git.
self.gclient(['config', '--spec',
'solutions=['
'{"name": "src",'
' "url": "' + self.git_base + 'repo_1"},'
']'
])
# Verify that the sync succeeds with --force.
results = self.gclient(['sync', '--deps', 'mac', '--force'])
self.assertEqual(results[2], 0, 'Sync failed!')
# Verify that we got the desired git checkout.
results = self.gclient(['revinfo', '--deps', 'mac'])
actual = results[0].splitlines()
expected = [
'src: %srepo_1' % self.git_base,
'src/repo2: %srepo_2@%s' % (self.git_base,
self.githash('repo_2', 1)[:7]),
'src/repo2/repo_renamed: %srepo_3' % self.git_base,
]
self.assertEquals(actual, expected)
# Change the desired checkout back to svn.
self.gclient(['config', '--spec',
'solutions=['
'{"name": "src",'
' "url": "' + self.svn_base + 'trunk/src"},'
']'
])
# Verify that the sync succeeds.
results = self.gclient(['sync', '--deps', 'mac', '--force'])
self.assertEqual(results[2], 0, 'Sync failed!')
# Verify that we have the expected svn checkout.
results = self.gclient(['revinfo', '--deps', 'mac'])
actual = results[0].splitlines()
expected = [
'src: %strunk/src' % self.svn_base,
'src/file/other: File("%strunk/other/DEPS")' % self.svn_base,
'src/other: %strunk/other' % self.svn_base,
'src/third_party/foo: %strunk/third_party/foo@1' % self.svn_base,
]
self.assertEquals(actual, expected)
class GClientSmokeFromCheckout(GClientSmokeBase):
# WebKit abuses this. It has a .gclient and a DEPS from a checkout.
......
......@@ -29,9 +29,7 @@ class GclientUtilsUnittest(GclientUtilBase):
def testMembersChanged(self):
members = [
'Annotated', 'AutoFlush', 'CheckCallAndFilter', 'CommandToStr',
'CheckCallAndFilterAndHeader',
'enable_deletion_of_conflicting_checkouts', # TODO(borenet): Remove!
'Error', 'ExecutionQueue', 'FileRead',
'CheckCallAndFilterAndHeader', 'Error', 'ExecutionQueue', 'FileRead',
'FileWrite', 'FindFileUpwards', 'FindGclientRoot',
'GetGClientRootAndEntries', 'GetEditor', 'GetExeSuffix',
'GetMacWinOrLinux', 'GitFilter', 'IsDateRevision', 'MakeDateRevision',
......@@ -41,9 +39,7 @@ class GclientUtilsUnittest(GclientUtilBase):
'GCLIENT_CHILDREN_LOCK', 'GClientChildren', 'SplitUrlRevision',
'SyntaxErrorToError', 'UpgradeToHttps', 'Wrapper', 'WorkItem',
'codecs', 'lockedmethod', 'logging', 'os', 'pipes', 'Queue', 're',
'rmtree', 'safe_makedirs', 'safe_rename',
'socket', # TODO(borenet): Remove!
'stat', 'subprocess',
'rmtree', 'safe_makedirs', 'safe_rename', 'stat', 'subprocess',
'subprocess2', 'sys', 'tempfile', 'threading', 'time', 'urlparse',
]
......
......@@ -169,18 +169,6 @@ class RealGitSvnTest(fake_repos.FakeReposTestBase):
self._capture(['reset', '--hard', 'HEAD^'])
self.assertEquals(scm.GIT.GetGitSvnHeadRev(cwd=self.clone_dir), 1)
def testIsGitSvn(self):
if not self.enabled:
return
# Git-svn
self.assertTrue(scm.GIT.IsGitSvn(self.clone_dir))
# Pure git
git_dir = scm.os.path.join(self.FAKE_REPOS.git_root, 'repo_1')
self.assertFalse(scm.GIT.IsGitSvn(git_dir))
# Pure svn
svn_dir = scm.os.path.join(self.FAKE_REPOS.svn_checkout, 'trunk')
self.assertFalse(scm.GIT.IsGitSvn(svn_dir))
def testParseGitSvnSha1(self):
test_sha1 = 'a5c63ce8671922e5c59c0dea49ef4f9d4a3020c9'
expected_output = test_sha1 + '\n'
......
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