|
|
|
@ -50,7 +50,8 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
|
|
|
|
|
cmd = cmd_base + cmd
|
|
|
|
|
process = subprocess.Popen(cmd, cwd=cwd, env=self.env,
|
|
|
|
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
|
|
|
|
shell=sys.platform.startswith('win'))
|
|
|
|
|
shell=sys.platform.startswith('win'),
|
|
|
|
|
universal_newlines=True)
|
|
|
|
|
(stdout, stderr) = process.communicate()
|
|
|
|
|
logging.debug("XXX: %s\n%s\nXXX" % (' '.join(cmd), stdout))
|
|
|
|
|
logging.debug("YYY: %s\n%s\nYYY" % (' '.join(cmd), stderr))
|
|
|
|
@ -72,11 +73,11 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
|
|
|
|
|
else:
|
|
|
|
|
remaining.append(line)
|
|
|
|
|
else:
|
|
|
|
|
self.assertEquals([], remaining)
|
|
|
|
|
self.assertEqual([], remaining)
|
|
|
|
|
task_id = int(m.group(1))
|
|
|
|
|
tasks.setdefault(task_id, []).append(m.group(2))
|
|
|
|
|
out = []
|
|
|
|
|
for key in sorted(tasks.iterkeys()):
|
|
|
|
|
for key in sorted(tasks.keys()):
|
|
|
|
|
out.extend(tasks[key])
|
|
|
|
|
out.extend(remaining)
|
|
|
|
|
return '\n'.join(out)
|
|
|
|
@ -88,7 +89,7 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
|
|
|
|
|
if untangle:
|
|
|
|
|
stdout = self.untangle(stdout)
|
|
|
|
|
self.checkString(expected_stderr, stderr)
|
|
|
|
|
self.assertEquals(0, returncode)
|
|
|
|
|
self.assertEqual(0, returncode)
|
|
|
|
|
return self.checkBlock(stdout, items)
|
|
|
|
|
|
|
|
|
|
def splitBlock(self, stdout):
|
|
|
|
@ -138,7 +139,7 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
|
|
|
|
|
|
|
|
|
|
def checkBlock(self, stdout, items):
|
|
|
|
|
results = self.splitBlock(stdout)
|
|
|
|
|
for i in xrange(min(len(results), len(items))):
|
|
|
|
|
for i in range(min(len(results), len(items))):
|
|
|
|
|
if isinstance(items[i], (list, tuple)):
|
|
|
|
|
verb = items[i][0]
|
|
|
|
|
path = items[i][1]
|
|
|
|
@ -154,7 +155,7 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
|
|
|
|
|
(i, results[i][0][2].lower(), path.lower()))
|
|
|
|
|
else:
|
|
|
|
|
self.checkString(results[i][0][2], path, (i, results[i][0][2], path))
|
|
|
|
|
self.assertEquals(len(results), len(items), (stdout, items, len(results)))
|
|
|
|
|
self.assertEqual(len(results), len(items), (stdout, items, len(results)))
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -178,7 +179,7 @@ class GClientSmoke(GClientSmokeBase):
|
|
|
|
|
def testConfig(self):
|
|
|
|
|
# Get any bootstrapping out of the way.
|
|
|
|
|
results = self.gclient(['version'])
|
|
|
|
|
self.assertEquals(results[2], 0)
|
|
|
|
|
self.assertEqual(results[2], 0)
|
|
|
|
|
|
|
|
|
|
p = join(self.root_dir, '.gclient')
|
|
|
|
|
def test(cmd, expected):
|
|
|
|
@ -186,7 +187,9 @@ class GClientSmoke(GClientSmokeBase):
|
|
|
|
|
os.remove(p)
|
|
|
|
|
results = self.gclient(cmd)
|
|
|
|
|
self.check(('', '', 0), results)
|
|
|
|
|
self.checkString(expected, open(p, 'rU').read())
|
|
|
|
|
mode = 'r' if sys.version_info.major == 3 else 'rU'
|
|
|
|
|
with open(p, mode) as f:
|
|
|
|
|
self.checkString(expected, f.read())
|
|
|
|
|
|
|
|
|
|
test(['config', self.git_base + 'src/'],
|
|
|
|
|
('solutions = [\n'
|
|
|
|
@ -524,7 +527,7 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
|
|
self.gclient(['config', self.git_base + 'repo_13', '--name', 'src'])
|
|
|
|
|
_out, _err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 2)])
|
|
|
|
|
self.assertEquals(0, rc)
|
|
|
|
|
self.assertEqual(0, rc)
|
|
|
|
|
|
|
|
|
|
def testSyncFetchUpdate(self):
|
|
|
|
|
if not self.enabled:
|
|
|
|
@ -535,12 +538,12 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
|
|
# non-standard refs.
|
|
|
|
|
_out, _err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 1)])
|
|
|
|
|
self.assertEquals(0, rc)
|
|
|
|
|
self.assertEqual(0, rc)
|
|
|
|
|
|
|
|
|
|
# Make sure update that pulls a non-standard ref works.
|
|
|
|
|
_out, _err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 2)])
|
|
|
|
|
self.assertEquals(0, rc)
|
|
|
|
|
self.assertEqual(0, rc)
|
|
|
|
|
|
|
|
|
|
def testSyncDirect(self):
|
|
|
|
|
if not self.enabled:
|
|
|
|
@ -548,7 +551,7 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
|
|
self.gclient(['config', self.git_base + 'repo_12', '--name', 'src'])
|
|
|
|
|
_out, _err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', 'refs/changes/1212'])
|
|
|
|
|
self.assertEquals(0, rc)
|
|
|
|
|
self.assertEqual(0, rc)
|
|
|
|
|
|
|
|
|
|
def testSyncUnmanaged(self):
|
|
|
|
|
if not self.enabled:
|
|
|
|
@ -652,8 +655,8 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
|
|
# runhooks runs all hooks even if not matching by design.
|
|
|
|
|
out = self.parseGclient(['runhooks', '--deps', 'mac'],
|
|
|
|
|
['running', 'running'])
|
|
|
|
|
self.assertEquals(1, len(out[0]))
|
|
|
|
|
self.assertEquals(1, len(out[1]))
|
|
|
|
|
self.assertEqual(1, len(out[0]))
|
|
|
|
|
self.assertEqual(1, len(out[1]))
|
|
|
|
|
tree = self.mangle_git_tree(('repo_1@2', 'src'),
|
|
|
|
|
('repo_2@1', 'src/repo2'),
|
|
|
|
|
('repo_3@2', 'src/repo2/repo_renamed'))
|
|
|
|
@ -681,9 +684,9 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
|
|
out = self.parseGclient(['sync', '--deps', 'mac', '--jobs=1',
|
|
|
|
|
'--revision', 'src@' + self.githash('repo_5', 2)],
|
|
|
|
|
expectation)
|
|
|
|
|
self.assertEquals('Cloning into ', out[0][1][:13])
|
|
|
|
|
self.assertEquals(2, len(out[1]), out[1])
|
|
|
|
|
self.assertEquals('pre-deps hook', out[1][1])
|
|
|
|
|
self.assertEqual('Cloning into ', out[0][1][:13])
|
|
|
|
|
self.assertEqual(2, len(out[1]), out[1])
|
|
|
|
|
self.assertEqual('pre-deps hook', out[1][1])
|
|
|
|
|
tree = self.mangle_git_tree(('repo_5@2', 'src'),
|
|
|
|
|
('repo_1@2', 'src/repo1'),
|
|
|
|
|
('repo_2@1', 'src/repo2')
|
|
|
|
@ -731,14 +734,21 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
|
|
('running', self.root_dir), # pre-deps hook
|
|
|
|
|
('running', self.root_dir), # pre-deps hook (fails)
|
|
|
|
|
]
|
|
|
|
|
executable = sys.executable
|
|
|
|
|
# On Python 3 we always execute hooks with 'python', so we cannot use
|
|
|
|
|
# sys.executable.
|
|
|
|
|
if sys.version_info.major == 3:
|
|
|
|
|
executable = subprocess.check_output(
|
|
|
|
|
['python', '-c', 'import sys; print(sys.executable)'])
|
|
|
|
|
executable = executable.decode('utf-8').strip()
|
|
|
|
|
expected_stderr = ("Error: Command '%s -c import sys; "
|
|
|
|
|
"sys.exit(1)' returned non-zero exit status 1 in %s\n"
|
|
|
|
|
% (sys.executable, self.root_dir))
|
|
|
|
|
% (executable, self.root_dir))
|
|
|
|
|
stdout, stderr, retcode = self.gclient(['sync', '--deps', 'mac', '--jobs=1',
|
|
|
|
|
'--revision',
|
|
|
|
|
'src@' + self.githash('repo_5', 3)])
|
|
|
|
|
self.assertEquals(stderr, expected_stderr)
|
|
|
|
|
self.assertEquals(2, retcode)
|
|
|
|
|
self.assertEqual(stderr, expected_stderr)
|
|
|
|
|
self.assertEqual(2, retcode)
|
|
|
|
|
self.checkBlock(stdout, expectated_stdout)
|
|
|
|
|
|
|
|
|
|
def testRevInfo(self):
|
|
|
|
@ -1654,7 +1664,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
|
|
|
|
|
out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'], [])
|
|
|
|
|
# TODO(maruel): http://crosbug.com/3584 It should output the unversioned
|
|
|
|
|
# files.
|
|
|
|
|
self.assertEquals(0, len(out))
|
|
|
|
|
self.assertEqual(0, len(out))
|
|
|
|
|
|
|
|
|
|
# Revert implies --force implies running hooks without looking at pattern
|
|
|
|
|
# matching. For each expected path, 'git reset' and 'git clean' are run, so
|
|
|
|
@ -1663,7 +1673,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
|
|
|
|
|
# because it is clean and has no output for 'git clean'.
|
|
|
|
|
out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'],
|
|
|
|
|
['running', 'running'])
|
|
|
|
|
self.assertEquals(2, len(out))
|
|
|
|
|
self.assertEqual(2, len(out))
|
|
|
|
|
tree = self.mangle_git_tree(('repo_1@3', 'src'),
|
|
|
|
|
('repo_2@1', 'src/repo2'),
|
|
|
|
|
('repo_3@2', 'src/repo2/repo_renamed'))
|
|
|
|
@ -1682,7 +1692,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
|
|
|
|
|
}])
|
|
|
|
|
out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'],
|
|
|
|
|
['running', 'running'])
|
|
|
|
|
self.assertEquals(2, len(out))
|
|
|
|
|
self.assertEqual(2, len(out))
|
|
|
|
|
tree = self.mangle_git_tree(('repo_1@3', 'src'),
|
|
|
|
|
('repo_2@3', 'src/repo2'),
|
|
|
|
|
('repo_3@2', 'src/repo2/repo_renamed'))
|
|
|
|
@ -1694,7 +1704,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
|
|
|
|
|
out = results[0].splitlines(False)
|
|
|
|
|
# TODO(maruel): http://crosbug.com/3584 It should output the unversioned
|
|
|
|
|
# files.
|
|
|
|
|
self.assertEquals(0, len(out))
|
|
|
|
|
self.assertEqual(0, len(out))
|
|
|
|
|
|
|
|
|
|
def testSyncNoHistory(self):
|
|
|
|
|
if not self.enabled:
|
|
|
|
@ -1730,8 +1740,8 @@ class GClientSmokeGITMutates(GClientSmokeBase):
|
|
|
|
|
|
|
|
|
|
# Check that repo_2 is actually shallow and its log has only one entry.
|
|
|
|
|
rev_lists = subprocess2.check_output(['git', 'rev-list', 'HEAD'],
|
|
|
|
|
cwd=repo2_root)
|
|
|
|
|
self.assertEquals(repo_2_hash_new, rev_lists.strip('\r\n'))
|
|
|
|
|
cwd=repo2_root).decode('utf-8')
|
|
|
|
|
self.assertEqual(repo_2_hash_new, rev_lists.strip('\r\n'))
|
|
|
|
|
|
|
|
|
|
# Check that we have actually checked out the right commit.
|
|
|
|
|
self.assertTrue(os.path.exists(join(repo2_root, 'last_file')))
|
|
|
|
@ -1881,7 +1891,7 @@ class BlinkDEPSTransitionSmokeTest(GClientSmokeBase):
|
|
|
|
|
'}]'])
|
|
|
|
|
|
|
|
|
|
# Go back and forth two times.
|
|
|
|
|
for _ in xrange(2):
|
|
|
|
|
for _ in range(2):
|
|
|
|
|
res = self.gclient(['sync', '--jobs', '1',
|
|
|
|
|
'--revision', 'src@%s' % self.pre_merge_sha])
|
|
|
|
|
self.assertEqual(res[2], 0, 'DEPS change sync failed.')
|
|
|
|
@ -1912,7 +1922,7 @@ class BlinkDEPSTransitionSmokeTest(GClientSmokeBase):
|
|
|
|
|
self.assertEqual(res[2], 0, 'Initial gclient sync failed.')
|
|
|
|
|
|
|
|
|
|
# Go back and forth two times.
|
|
|
|
|
for _ in xrange(2):
|
|
|
|
|
for _ in range(2):
|
|
|
|
|
subprocess2.check_call(['git', 'checkout', '-q', self.pre_merge_sha],
|
|
|
|
|
cwd=self.checkout_path)
|
|
|
|
|
res = self.gclient(['sync', '--jobs', '1'])
|
|
|
|
@ -1968,7 +1978,7 @@ class GClientSmokeCipd(GClientSmokeBase):
|
|
|
|
|
def testSyncCipd(self):
|
|
|
|
|
self.gclient(['config', self.git_base + 'repo_14', '--name', 'src'])
|
|
|
|
|
out, err, rc = self.gclient(['sync'])
|
|
|
|
|
self.assertEquals(0, rc, out + err)
|
|
|
|
|
self.assertEqual(0, rc, out + err)
|
|
|
|
|
|
|
|
|
|
tree = self.mangle_git_tree(('repo_14@1', 'src'))
|
|
|
|
|
tree.update({
|
|
|
|
@ -2002,7 +2012,7 @@ class GClientSmokeCipd(GClientSmokeBase):
|
|
|
|
|
# repo_13@1 has src/repo12 as a git dependency.
|
|
|
|
|
out, err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 1)])
|
|
|
|
|
self.assertEquals(0, rc, out + err)
|
|
|
|
|
self.assertEqual(0, rc, out + err)
|
|
|
|
|
|
|
|
|
|
tree = self.mangle_git_tree(('repo_13@1', 'src'),
|
|
|
|
|
('repo_12@1', 'src/repo12'))
|
|
|
|
@ -2012,7 +2022,7 @@ class GClientSmokeCipd(GClientSmokeBase):
|
|
|
|
|
out, err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 3),
|
|
|
|
|
'--delete_unversioned_trees'])
|
|
|
|
|
self.assertEquals(0, rc, out + err)
|
|
|
|
|
self.assertEqual(0, rc, out + err)
|
|
|
|
|
|
|
|
|
|
tree = self.mangle_git_tree(('repo_13@3', 'src'))
|
|
|
|
|
tree.update({
|
|
|
|
@ -2035,7 +2045,7 @@ class GClientSmokeCipd(GClientSmokeBase):
|
|
|
|
|
out, err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 3),
|
|
|
|
|
'--delete_unversioned_trees'])
|
|
|
|
|
self.assertEquals(0, rc, out + err)
|
|
|
|
|
self.assertEqual(0, rc, out + err)
|
|
|
|
|
|
|
|
|
|
tree = self.mangle_git_tree(('repo_13@3', 'src'))
|
|
|
|
|
tree.update({
|
|
|
|
@ -2054,7 +2064,7 @@ class GClientSmokeCipd(GClientSmokeBase):
|
|
|
|
|
# repo_13@1 has src/repo12 as a git dependency.
|
|
|
|
|
out, err, rc = self.gclient(
|
|
|
|
|
['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 1)])
|
|
|
|
|
self.assertEquals(0, rc, out + err)
|
|
|
|
|
self.assertEqual(0, rc, out + err)
|
|
|
|
|
|
|
|
|
|
tree = self.mangle_git_tree(('repo_13@1', 'src'),
|
|
|
|
|
('repo_12@1', 'src/repo12'))
|
|
|
|
|