| Index: tests/gclient_smoketest.py
|
| diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py
|
| index 00b80f9bef426fe0735f29a17f9b1c3b56a68f00..edc4a972afcd7b202b28598cd294545292e0755f 100755
|
| --- a/tests/gclient_smoketest.py
|
| +++ b/tests/gclient_smoketest.py
|
| @@ -17,8 +17,7 @@ import subprocess
|
| import sys
|
| import unittest
|
|
|
| -from fake_repos import join, mangle_svn_tree, mangle_git_tree, write
|
| -from fake_repos import FakeReposTestBase
|
| +from fake_repos import join, write, FakeReposTestBase
|
|
|
| GCLIENT_PATH = join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
|
| 'gclient')
|
| @@ -40,13 +39,81 @@ class GClientSmokeBase(FakeReposTestBase):
|
| cmd_base = ['coverage', 'run', '-a', GCLIENT_PATH + '.py']
|
| else:
|
| cmd_base = [GCLIENT_PATH]
|
| - process = subprocess.Popen(cmd_base + cmd, cwd=cwd, env=self.env,
|
| + cmd = cmd_base + cmd
|
| + process = subprocess.Popen(cmd, cwd=cwd, env=self.env,
|
| stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
| shell=sys.platform.startswith('win'))
|
| (stdout, stderr) = process.communicate()
|
| + logging.debug("XXX: %s\n%s\nXXX" % (' '.join(cmd), stdout))
|
| return (stdout.replace('\r\n', '\n'), stderr.replace('\r\n', '\n'),
|
| process.returncode)
|
|
|
| + def parseGclient(self, cmd, items):
|
| + """Parse gclient's output to make it easier to test."""
|
| + (stdout, stderr, returncode) = self.gclient(cmd)
|
| + self.checkString('', stderr)
|
| + self.assertEquals(0, returncode)
|
| + return self.checkBlock(stdout, items)
|
| +
|
| + def splitBlock(self, stdout):
|
| + """Split gclient's output into logical execution blocks.
|
| + ___ running 'foo' at '/bar'
|
| + (...)
|
| + ___ running 'baz' at '/bar'
|
| + (...)
|
| +
|
| + will result in 2 items of len((...).splitlines()) each.
|
| + """
|
| + results = []
|
| + for line in stdout.splitlines(False):
|
| + # Intentionally skips empty lines.
|
| + if not line:
|
| + continue
|
| + if line.startswith('__'):
|
| + match = re.match(r'^________ ([a-z]+) \'(.*)\' in \'(.*)\'$', line)
|
| + if not match:
|
| + match = re.match(r'^_____ (.*) is missing, synching instead$', line)
|
| + if match:
|
| + # Blah, it's when a dependency is deleted, we should probably not
|
| + # output this message.
|
| + results.append([line])
|
| + else:
|
| + print line
|
| + raise Exception('fail', line)
|
| + else:
|
| + results.append([[match.group(1), match.group(2), match.group(3)]])
|
| + else:
|
| + if not results:
|
| + # TODO(maruel): gclient's git stdout is inconsistent.
|
| + # This should fail the test instead!!
|
| + pass
|
| + else:
|
| + results[-1].append(line)
|
| + return results
|
| +
|
| + def checkBlock(self, stdout, items):
|
| + results = self.splitBlock(stdout)
|
| + for i in xrange(min(len(results), len(items))):
|
| + if isinstance(items[i], (list, tuple)):
|
| + verb = items[i][0]
|
| + path = items[i][1]
|
| + else:
|
| + verb = items[i]
|
| + path = self.root_dir
|
| + self.checkString(results[i][0][0], verb)
|
| + self.checkString(results[i][0][2], path)
|
| + self.assertEquals(len(results), len(items))
|
| + return results
|
| +
|
| + def svnBlockCleanup(self, out):
|
| + """Work around svn status difference between svn 1.5 and svn 1.6
|
| + I don't know why but on Windows they are reversed. So sorts the items."""
|
| + for i in xrange(len(out)):
|
| + if len(out[i]) < 2:
|
| + continue
|
| + out[i] = [out[i][0]] + sorted([x[1:].strip() for x in out[i][1:]])
|
| + return out
|
| +
|
|
|
| class GClientSmoke(GClientSmokeBase):
|
| def testHelp(self):
|
| @@ -131,20 +198,12 @@ class GClientSmokeSVN(GClientSmokeBase):
|
| # TODO(maruel): safesync.
|
| self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| # Test unversioned checkout.
|
| - results = self.gclient(['sync', '--deps', 'mac'])
|
| - logging.debug(results[0])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(17 <= len(out), out)
|
| - self.assertTrue(20 >= len(out), out)
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[-1]),
|
| - ('trunk/third_party/foo', 'src/third_party/foo',
|
| - self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + self.parseGclient(['sync', '--deps', 'mac'],
|
| + ['running', 'running', 'running', 'running'])
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@2', 'src'),
|
| + ('trunk/third_party/foo@1', 'src/third_party/foo'),
|
| + ('trunk/other@2', 'src/other'))
|
| tree['src/svn_hooked1'] = 'svn_hooked1'
|
| self.assertTree(tree)
|
|
|
| @@ -153,43 +212,24 @@ class GClientSmokeSVN(GClientSmokeBase):
|
| os.remove(join(self.root_dir, 'src', 'svn_hooked1'))
|
|
|
| # Test incremental versioned sync: sync backward.
|
| - results = self.gclient(['sync', '--revision', 'src@1', '--deps', 'mac',
|
| - '--delete_unversioned_trees'])
|
| - logging.debug(results[0])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(19 <= len(out), out)
|
| - self.assertTrue(23 >= len(out), out)
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/third_party/foo', 'src/third_party/fpp',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/prout',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + self.parseGclient(['sync', '--revision', 'src@1', '--deps', 'mac',
|
| + '--delete_unversioned_trees'],
|
| + ['running', 'running', 'running', 'running', 'deleting'])
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@1', 'src'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| + ('trunk/other@2', 'src/other'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/prout'))
|
| self.assertTree(tree)
|
| # Test incremental sync: delete-unversioned_trees isn't there.
|
| - results = self.gclient(['sync', '--deps', 'mac'])
|
| - logging.debug(results[0])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(21 <= len(out), out)
|
| - self.assertTrue(24 >= len(out), out)
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/fpp',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/foo',
|
| - self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/prout',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + self.parseGclient(['sync', '--deps', 'mac'],
|
| + ['running', 'running', 'running', 'running'])
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@2', 'src'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| + ('trunk/third_party/foo@1', 'src/third_party/foo'),
|
| + ('trunk/other@2', 'src/other'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/prout'))
|
| tree['src/svn_hooked1'] = 'svn_hooked1'
|
| self.assertTree(tree)
|
|
|
| @@ -197,40 +237,27 @@ class GClientSmokeSVN(GClientSmokeBase):
|
| """TODO(maruel): This will become an error soon."""
|
| self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| results = self.gclient(['sync', '--deps', 'mac', '-r', 'invalid@1'])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(17 <= len(out), out)
|
| - self.assertTrue(20 >= len(out), out)
|
| + self.checkBlock(results[0], ['running', 'running', 'running', 'running'])
|
| self.checkString('Please fix your script, having invalid --revision flags '
|
| 'will soon considered an error.\n', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/foo',
|
| - self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@2', 'src'),
|
| + ('trunk/third_party/foo@1', 'src/third_party/foo'),
|
| + ('trunk/other@2', 'src/other'))
|
| tree['src/svn_hooked1'] = 'svn_hooked1'
|
| self.assertTree(tree)
|
|
|
| def testSyncNoSolutionName(self):
|
| # When no solution name is provided, gclient uses the first solution listed.
|
| self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - results = self.gclient(['sync', '--deps', 'mac', '-r', '1'])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(19 <= len(out), out)
|
| - self.assertTrue(23 >= len(out), out)
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/third_party/foo', 'src/third_party/fpp',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/prout',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + self.parseGclient(['sync', '--deps', 'mac', '-r', '1'],
|
| + ['running', 'running', 'running', 'running'])
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@1', 'src'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| + ('trunk/other@2', 'src/other'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/prout'))
|
| self.assertTree(tree)
|
|
|
| def testRevertAndStatus(self):
|
| @@ -239,53 +266,40 @@ class GClientSmokeSVN(GClientSmokeBase):
|
| self.gclient(['sync', '--deps', 'mac'])
|
| write(join(self.root_dir, 'src', 'other', 'hi'), 'Hey!')
|
|
|
| - results = self.gclient(['status', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(out[0], '')
|
| - self.assertTrue(out[1].startswith('________ running \'svn status\' in \''))
|
| - self.assertTrue(out[2].endswith(' svn_hooked1'))
|
| - self.assertTrue(out[3].endswith(' other'))
|
| - self.assertTrue(out[4].endswith(' ' + join('third_party', 'foo')))
|
| - self.assertEquals(out[5], '')
|
| - self.assertTrue(out[6].startswith('________ running \'svn status\' in \''))
|
| - self.assertTrue(out[7].endswith(' hi'))
|
| - self.assertEquals(8, len(out))
|
| - self.assertEquals('', results[1])
|
| - self.assertEquals(0, results[2])
|
| + out = self.parseGclient(['status', '--deps', 'mac'],
|
| + [['running', join(self.root_dir, 'src')],
|
| + ['running', join(self.root_dir, 'src', 'other')]])
|
| + out = self.svnBlockCleanup(out)
|
| + self.checkString('other', out[0][1])
|
| + self.checkString('svn_hooked1', out[0][2])
|
| + self.checkString(join('third_party', 'foo'), out[0][3])
|
| + self.checkString('hi', out[1][1])
|
| + self.assertEquals(4, len(out[0]))
|
| + self.assertEquals(2, len(out[1]))
|
|
|
| # Revert implies --force implies running hooks without looking at pattern
|
| # matching.
|
| results = self.gclient(['revert', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(22, len(out))
|
| + out = self.splitBlock(results[0])
|
| + self.assertEquals(7, len(out))
|
| self.checkString('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[-1]),
|
| - ('trunk/third_party/foo', 'src/third_party/foo',
|
| - self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@2', 'src'),
|
| + ('trunk/third_party/foo@1', 'src/third_party/foo'),
|
| + ('trunk/other@2', 'src/other'))
|
| tree['src/svn_hooked1'] = 'svn_hooked1'
|
| tree['src/svn_hooked2'] = 'svn_hooked2'
|
| self.assertTree(tree)
|
|
|
| - results = self.gclient(['status', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(out[0], '')
|
| - self.assertTrue(out[1].startswith('________ running \'svn status\' in \''))
|
| - self.assertTrue(out[2].endswith(' svn_hooked1'))
|
| - # I don't know why but on Windows they are reversed.
|
| - if (not (out[3].endswith(' other') and
|
| - out[4].endswith(' svn_hooked2')) and
|
| - not (out[3].endswith(' svn_hooked2') and
|
| - out[4].endswith(' other'))):
|
| - self.assertEquals(out[3].endswith(' svn_hooked2'))
|
| - self.assertEquals(out[4].endswith(' other'))
|
| - self.assertTrue(out[5].endswith(' ' + join('third_party', 'foo')))
|
| - self.assertEquals(6, len(out))
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| + out = self.parseGclient(['status', '--deps', 'mac'],
|
| + [['running', join(self.root_dir, 'src')]])
|
| + out = self.svnBlockCleanup(out)
|
| + self.checkString('other', out[0][1])
|
| + self.checkString('svn_hooked1', out[0][2])
|
| + self.checkString('svn_hooked2', out[0][3])
|
| + self.checkString(join('third_party', 'foo'), out[0][4])
|
| + self.assertEquals(5, len(out[0]))
|
|
|
| def testRevertAndStatusDepsOs(self):
|
| self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| @@ -293,71 +307,70 @@ class GClientSmokeSVN(GClientSmokeBase):
|
| self.gclient(['sync', '--deps', 'mac', '--revision', 'src@1'])
|
| write(join(self.root_dir, 'src', 'other', 'hi'), 'Hey!')
|
|
|
| - results = self.gclient(['status', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(out[0], '')
|
| - self.assertTrue(out[1].startswith('________ running \'svn status\' in \''))
|
| - self.assertTrue(out[2].endswith(' other'))
|
| - self.assertTrue(out[3].endswith(' ' + join('third_party', 'fpp')))
|
| - self.assertTrue(out[4].endswith(' ' + join('third_party', 'prout')))
|
| - self.assertEquals(out[5], '')
|
| - self.assertTrue(out[6].startswith('________ running \'svn status\' in \''))
|
| - self.assertTrue(out[7].endswith(' hi'))
|
| - self.assertEquals(8, len(out))
|
| - self.assertEquals('', results[1])
|
| - self.assertEquals(0, results[2])
|
| + # Without --verbose, gclient won't output the directories without
|
| + # modification.
|
| + out = self.parseGclient(['status', '--deps', 'mac'],
|
| + [['running', join(self.root_dir, 'src')],
|
| + ['running', join(self.root_dir, 'src', 'other')]])
|
| + out = self.svnBlockCleanup(out)
|
| + self.checkString('other', out[0][1])
|
| + self.checkString(join('third_party', 'fpp'), out[0][2])
|
| + self.checkString(join('third_party', 'prout'), out[0][3])
|
| + self.checkString('hi', out[1][1])
|
| + self.assertEquals(4, len(out[0]))
|
| + self.assertEquals(2, len(out[1]))
|
| +
|
| + # So verify it works with --verbose.
|
| + out = self.parseGclient(['status', '--deps', 'mac', '--verbose'],
|
| + [['running', join(self.root_dir, 'src')],
|
| + ['running', join(self.root_dir, 'src', 'other')],
|
| + ['running', join(self.root_dir, 'src', 'third_party', 'fpp')],
|
| + ['running', join(self.root_dir, 'src', 'third_party', 'prout')]])
|
| + out = self.svnBlockCleanup(out)
|
| + self.checkString('other', out[0][1])
|
| + self.checkString(join('third_party', 'fpp'), out[0][2])
|
| + self.checkString(join('third_party', 'prout'), out[0][3])
|
| + self.checkString('hi', out[1][1])
|
| + self.assertEquals(4, len(out[0]))
|
| + self.assertEquals(2, len(out[1]))
|
|
|
| # Revert implies --force implies running hooks without looking at pattern
|
| # matching.
|
| + # TODO(maruel): In general, gclient revert output is wrong. It should output
|
| + # the file list after some ___ running 'svn status'
|
| results = self.gclient(['revert', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(24, len(out))
|
| + out = self.splitBlock(results[0])
|
| + self.assertEquals(7, len(out))
|
| self.checkString('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/third_party/foo', 'src/third_party/fpp',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/prout', 'src/third_party/prout',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - )
|
| + tree = self.mangle_svn_tree(
|
| + ('trunk/src@1', 'src'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| + ('trunk/other@2', 'src/other'),
|
| + ('trunk/third_party/prout@2', 'src/third_party/prout'))
|
| self.assertTree(tree)
|
|
|
| - results = self.gclient(['status', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(out[0], '')
|
| - self.assertTrue(out[1].startswith('________ running \'svn status\' in \''))
|
| - self.assertTrue(out[2].endswith(' other'))
|
| - self.assertTrue(out[3].endswith(' ' + join('third_party', 'fpp')))
|
| - self.assertTrue(out[4].endswith(' ' + join('third_party', 'prout')))
|
| - self.assertEquals(5, len(out))
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| + out = self.parseGclient(['status', '--deps', 'mac'],
|
| + [['running', join(self.root_dir, 'src')]])
|
| + out = self.svnBlockCleanup(out)
|
| + self.checkString('other', out[0][1])
|
| + self.checkString(join('third_party', 'fpp'), out[0][2])
|
| + self.checkString(join('third_party', 'prout'), out[0][3])
|
| + self.assertEquals(4, len(out[0]))
|
|
|
| def testRunHooks(self):
|
| self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| self.gclient(['sync', '--deps', 'mac'])
|
| - results = self.gclient(['runhooks', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(4, len(out))
|
| - self.assertEquals(out[0], '')
|
| - self.assertTrue(re.match(r'^________ running \'.*?python(.exe)? -c '
|
| - r'open\(\'src/svn_hooked1\', \'w\'\)\.write\(\'svn_hooked1\'\)\' in \'.*',
|
| - out[1]))
|
| - self.assertEquals(out[2], '')
|
| - # runhooks runs all hooks even if not matching by design.
|
| - self.assertTrue(re.match(r'^________ running \'.*?python(.exe)? -c '
|
| - r'open\(\'src/svn_hooked2\', \'w\'\)\.write\(\'svn_hooked2\'\)\' in \'.*',
|
| - out[3]))
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| + out = self.parseGclient(['runhooks', '--deps', 'mac'],
|
| + ['running', 'running'])
|
| + self.checkString(1, len(out[0]))
|
| + self.checkString(1, len(out[1]))
|
|
|
| def testRunHooksDepsOs(self):
|
| self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| self.gclient(['sync', '--deps', 'mac', '--revision', 'src@1'])
|
| - results = self.gclient(['runhooks', '--deps', 'mac'])
|
| - self.check(('', '', 0), results)
|
| + out = self.parseGclient(['runhooks', '--deps', 'mac'], [])
|
| + self.assertEquals([], out)
|
|
|
| def testRevInfo(self):
|
| # TODO(maruel): Test multiple solutions.
|
| @@ -383,17 +396,14 @@ class GClientSmokeGIT(GClientSmokeBase):
|
| self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
|
| # Test unversioned checkout.
|
| results = self.gclient(['sync', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| + self.checkBlock(results[0], ['running', 'running'])
|
| # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must
|
| # add sync parsing to get the list of updated files.
|
| - self.assertEquals(13, len(out))
|
| - self.assertTrue(results[1].startswith('Switched to a new branch \''))
|
| + #self.assertTrue(results[1].startswith('Switched to a new branch \''))
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][0][1]),
|
| - ('src/repo2/repo_renamed', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - )
|
| + tree = self.mangle_git_tree(('repo_1@2', 'src'),
|
| + ('repo_2@1', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo_renamed'))
|
| tree['src/git_hooked1'] = 'git_hooked1'
|
| tree['src/git_hooked2'] = 'git_hooked2'
|
| self.assertTree(tree)
|
| @@ -404,37 +414,30 @@ class GClientSmokeGIT(GClientSmokeBase):
|
|
|
| # Test incremental versioned sync: sync backward.
|
| results = self.gclient(['sync', '--revision',
|
| - 'src@' + self.FAKE_REPOS.git_hashes['repo_1'][0][0],
|
| + 'src@' + self.githash('repo_1', 1),
|
| '--deps', 'mac', '--delete_unversioned_trees'])
|
| - logging.debug(results[0])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(20 <= len(out), out)
|
| - self.assertTrue(23 >= len(out), out)
|
| - self.checkString('', results[1])
|
| + # gclient's git output is unparsable and all messed up. Don't look at it, it
|
| + # hurts the smoke test's eyes. Add "print out" here if you want to dare to
|
| + # parse it. So just assert it's not empty and look at the result on the file
|
| + # system instead.
|
| + self.assertEquals('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src', self.FAKE_REPOS.git_hashes['repo_1'][0][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][1][1]),
|
| - ('src/repo2/repo3', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - ('src/repo4', self.FAKE_REPOS.git_hashes['repo_4'][1][1]),
|
| - )
|
| + tree = self.mangle_git_tree(('repo_1@1', 'src'),
|
| + ('repo_2@2', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo3'),
|
| + ('repo_4@2', 'src/repo4'))
|
| tree['src/git_hooked2'] = 'git_hooked2'
|
| self.assertTree(tree)
|
| # Test incremental sync: delete-unversioned_trees isn't there.
|
| results = self.gclient(['sync', '--deps', 'mac'])
|
| - logging.debug(results[0])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(25, len(out))
|
| - self.checkString('', results[1])
|
| + # See comment above about parsing gclient's git output.
|
| + self.assertEquals('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][1][1]),
|
| - ('src/repo2/repo3', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - ('src/repo2/repo_renamed', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - ('src/repo4', self.FAKE_REPOS.git_hashes['repo_4'][1][1]),
|
| - )
|
| + tree = self.mangle_git_tree(('repo_1@2', 'src'),
|
| + ('repo_2@1', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo3'),
|
| + ('repo_3@2', 'src/repo2/repo_renamed'),
|
| + ('repo_4@2', 'src/repo4'))
|
| tree['src/git_hooked1'] = 'git_hooked1'
|
| tree['src/git_hooked2'] = 'git_hooked2'
|
| self.assertTree(tree)
|
| @@ -444,25 +447,21 @@ class GClientSmokeGIT(GClientSmokeBase):
|
| if not self.enabled:
|
| return
|
| self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
|
| - results = self.gclient([
|
| - 'sync', '--deps', 'mac', '--revision',
|
| - 'invalid@' + self.FAKE_REPOS.git_hashes['repo_1'][0][0],
|
| - ])
|
| - out = results[0].splitlines(False)
|
| -
|
| - self.assertEquals(13, len(out))
|
| + results = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'invalid@' + self.githash('repo_1', 1)])
|
| + self.checkBlock(results[0], ['running', 'running'])
|
| # TODO(maruel): git shouldn't output to stderr...
|
| self.checkString('Please fix your script, having invalid --revision flags '
|
| - 'will soon considered an error.\nSwitched to a new branch \'%s\'\n' %
|
| - self.FAKE_REPOS.git_hashes['repo_2'][0][0][:7],
|
| + 'will soon considered an error.\n',
|
| results[1])
|
| + #self.checkString('Please fix your script, having invalid --revision flags '
|
| + # 'will soon considered an error.\nSwitched to a new branch \'%s\'\n' %
|
| + # self.githash('repo_2', 1)[:7],
|
| + # results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][0][1]),
|
| - ('src/repo2/repo_renamed',
|
| - self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - )
|
| + tree = self.mangle_git_tree(('repo_1@2', 'src'),
|
| + ('repo_2@1', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo_renamed'))
|
| tree['src/git_hooked1'] = 'git_hooked1'
|
| tree['src/git_hooked2'] = 'git_hooked2'
|
| self.assertTree(tree)
|
| @@ -472,24 +471,18 @@ class GClientSmokeGIT(GClientSmokeBase):
|
| return
|
| # When no solution name is provided, gclient uses the first solution listed.
|
| self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
|
| - results = self.gclient([
|
| - 'sync', '--deps', 'mac', '--revision',
|
| - self.FAKE_REPOS.git_hashes['repo_1'][0][0],
|
| - ])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(12 <= len(out), out)
|
| - self.assertTrue(15 >= len(out), out)
|
| + results = self.gclient(['sync', '--deps', 'mac',
|
| + '--revision', self.githash('repo_1', 1)])
|
| + self.checkBlock(results[0], [])
|
| # TODO(maruel): git shouldn't output to stderr...
|
| - self.checkString('Switched to a new branch \'%s\'\n'
|
| - % self.FAKE_REPOS.git_hashes['repo_1'][0][0], results[1])
|
| + #self.checkString('Switched to a new branch \'%s\'\n'
|
| + # % self.githash('repo_1', 1), results[1])
|
| + self.checkString('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src', self.FAKE_REPOS.git_hashes['repo_1'][0][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][1][1]),
|
| - ('src/repo2/repo3', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - ('src/repo4', self.FAKE_REPOS.git_hashes['repo_4'][1][1]),
|
| - )
|
| + tree = self.mangle_git_tree(('repo_1@1', 'src'),
|
| + ('repo_2@2', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo3'),
|
| + ('repo_4@2', 'src/repo4'))
|
| self.assertTree(tree)
|
|
|
| def testRevertAndStatus(self):
|
| @@ -515,11 +508,9 @@ class GClientSmokeGIT(GClientSmokeBase):
|
| self.assertEquals(7, len(out))
|
| self.checkString('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][0][1]),
|
| - ('src/repo2/repo_renamed', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - )
|
| + tree = self.mangle_git_tree(('repo_1@2', 'src'),
|
| + ('repo_2@1', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo_renamed'))
|
| # TODO(maruel): http://crosbug.com/3583 This file should have been removed.
|
| tree[join('src', 'repo2', 'hi')] = 'Hey!'
|
| tree['src/git_hooked1'] = 'git_hooked1'
|
| @@ -537,21 +528,26 @@ class GClientSmokeGIT(GClientSmokeBase):
|
| return
|
| self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
|
| self.gclient(['sync', '--deps', 'mac'])
|
| - results = self.gclient(['runhooks', '--deps', 'mac'])
|
| - logging.debug(results[0])
|
| - out = results[0].splitlines(False)
|
| - self.assertEquals(4, len(out))
|
| - self.assertEquals(out[0], '')
|
| - self.assertTrue(re.match(r'^________ running \'.*?python -c '
|
| - r'open\(\'src/git_hooked1\', \'w\'\)\.write\(\'git_hooked1\'\)\' in \'.*',
|
| - out[1]))
|
| - self.assertEquals(out[2], '')
|
| + tree = self.mangle_git_tree(('repo_1@2', 'src'),
|
| + ('repo_2@1', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo_renamed'))
|
| + tree['src/git_hooked1'] = 'git_hooked1'
|
| + tree['src/git_hooked2'] = 'git_hooked2'
|
| + self.assertTree(tree)
|
| +
|
| + os.remove(join(self.root_dir, 'src', 'git_hooked1'))
|
| + os.remove(join(self.root_dir, 'src', 'git_hooked2'))
|
| # runhooks runs all hooks even if not matching by design.
|
| - self.assertTrue(re.match(r'^________ running \'.*?python -c '
|
| - r'open\(\'src/git_hooked2\', \'w\'\)\.write\(\'git_hooked2\'\)\' in \'.*',
|
| - out[3]))
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| + out = self.parseGclient(['runhooks', '--deps', 'mac'],
|
| + ['running', 'running'])
|
| + self.assertEquals(1, len(out[0]))
|
| + self.assertEquals(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'))
|
| + tree['src/git_hooked1'] = 'git_hooked1'
|
| + tree['src/git_hooked2'] = 'git_hooked2'
|
| + self.assertTree(tree)
|
|
|
| def testRevInfo(self):
|
| if not self.enabled:
|
| @@ -565,9 +561,9 @@ class GClientSmokeGIT(GClientSmokeBase):
|
| 'src/repo2/repo_renamed: %(base)srepo_3@%(hash3)s\n' %
|
| {
|
| 'base': self.git_base,
|
| - 'hash1': self.FAKE_REPOS.git_hashes['repo_1'][1][0],
|
| - 'hash2': self.FAKE_REPOS.git_hashes['repo_2'][0][0],
|
| - 'hash3': self.FAKE_REPOS.git_hashes['repo_3'][1][0],
|
| + 'hash1': self.githash('repo_1', 2),
|
| + 'hash2': self.githash('repo_2', 1),
|
| + 'hash3': self.githash('repo_3', 2),
|
| })
|
| self.check((out, '', 0), results)
|
|
|
| @@ -582,31 +578,26 @@ class GClientSmokeBoth(GClientSmokeBase):
|
| if not self.enabled:
|
| return
|
| self.gclient(['config', '--spec',
|
| - 'solutions=['
|
| - '{"name": "src",'
|
| - ' "url": "' + self.svn_base + 'trunk/src/"},'
|
| - '{"name": "src-git",'
|
| - '"url": "' + self.git_base + 'repo_1"}]'])
|
| + 'solutions=['
|
| + '{"name": "src",'
|
| + ' "url": "' + self.svn_base + 'trunk/src/"},'
|
| + '{"name": "src-git",'
|
| + '"url": "' + self.git_base + 'repo_1"}]'])
|
| results = self.gclient(['sync', '--deps', 'mac'])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(32 <= len(out), out)
|
| - self.assertTrue(37 >= len(out), out)
|
| + self.checkBlock(results[0],
|
| + ['running', 'running', 'running', 'running', 'running',
|
| + 'running', 'running'])
|
| # TODO(maruel): Something's wrong here. git outputs to stderr 'Switched to
|
| # new branch \'hash\''.
|
| #self.checkString('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src-git', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][0][1]),
|
| - ('src/repo2/repo_renamed', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - )
|
| - tree.update(mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/foo',
|
| - self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - ))
|
| + tree = self.mangle_git_tree(('repo_1@2', 'src-git'),
|
| + ('repo_2@1', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo_renamed'))
|
| + tree.update(self.mangle_svn_tree(
|
| + ('trunk/src@2', 'src'),
|
| + ('trunk/third_party/foo@1', 'src/third_party/foo'),
|
| + ('trunk/other@2', 'src/other')))
|
| tree['src/git_hooked1'] = 'git_hooked1'
|
| tree['src/git_hooked2'] = 'git_hooked2'
|
| tree['src/svn_hooked1'] = 'svn_hooked1'
|
| @@ -617,36 +608,27 @@ class GClientSmokeBoth(GClientSmokeBase):
|
| if not self.enabled:
|
| return
|
| self.gclient(['config', '--spec',
|
| - 'solutions=['
|
| - '{"name": "src",'
|
| - ' "url": "' + self.svn_base + 'trunk/src/"},'
|
| - '{"name": "src-git",'
|
| - '"url": "' + self.git_base + 'repo_1"}]'])
|
| - results = self.gclient([
|
| - 'sync', '--deps', 'mac', '--revision', '1', '-r',
|
| - 'src-git@' + self.FAKE_REPOS.git_hashes['repo_1'][0][0]])
|
| - out = results[0].splitlines(False)
|
| - # TODO(maruel): Have real verification here, I wonder why it differs.
|
| - self.assertTrue(35 <= len(out), out)
|
| - self.assertTrue(38 >= len(out), out)
|
| + 'solutions=['
|
| + '{"name": "src",'
|
| + ' "url": "' + self.svn_base + 'trunk/src/"},'
|
| + '{"name": "src-git",'
|
| + '"url": "' + self.git_base + 'repo_1"}]'])
|
| + results = self.gclient(['sync', '--deps', 'mac', '--revision', '1',
|
| + '-r', 'src-git@' + self.githash('repo_1', 1)])
|
| + self.checkBlock(results[0], ['running', 'running', 'running', 'running'])
|
| # TODO(maruel): Something's wrong here. git outputs to stderr 'Switched to
|
| # new branch \'hash\''.
|
| #self.checkString('', results[1])
|
| self.assertEquals(0, results[2])
|
| - tree = mangle_git_tree(
|
| - ('src-git', self.FAKE_REPOS.git_hashes['repo_1'][0][1]),
|
| - ('src/repo2', self.FAKE_REPOS.git_hashes['repo_2'][1][1]),
|
| - ('src/repo2/repo3', self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
|
| - ('src/repo4', self.FAKE_REPOS.git_hashes['repo_4'][1][1]),
|
| - )
|
| - tree.update(mangle_svn_tree(
|
| - ('trunk/src', 'src', self.FAKE_REPOS.svn_revs[1]),
|
| - ('trunk/third_party/foo', 'src/third_party/fpp',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/other', 'src/other', self.FAKE_REPOS.svn_revs[2]),
|
| - ('trunk/third_party/foo', 'src/third_party/prout',
|
| - self.FAKE_REPOS.svn_revs[2]),
|
| - ))
|
| + tree = self.mangle_git_tree(('repo_1@1', 'src-git'),
|
| + ('repo_2@2', 'src/repo2'),
|
| + ('repo_3@2', 'src/repo2/repo3'),
|
| + ('repo_4@2', 'src/repo4'))
|
| + tree.update(self.mangle_svn_tree(
|
| + ('trunk/src@1', 'src'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| + ('trunk/other@2', 'src/other'),
|
| + ('trunk/third_party/foo@2', 'src/third_party/prout')))
|
| self.assertTree(tree)
|
|
|
|
|
|
|