| Index: tests/gclient_smoketest.py
|
| diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py
|
| index 6a8e3aaebd26feaf902e4c7964b60ddfd9f496db..96b507959b9a947dd7d1b58f5d320abcecff6b59 100755
|
| --- a/tests/gclient_smoketest.py
|
| +++ b/tests/gclient_smoketest.py
|
| @@ -20,20 +20,17 @@ import unittest
|
| ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| sys.path.insert(0, ROOT_DIR)
|
|
|
| -from testing_support.fake_repos import join, write
|
| -from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive, \
|
| - FakeRepoSkiaDEPS, FakeRepoBlinkDEPS
|
| -
|
| import gclient_utils
|
| import scm as gclient_scm
|
| -
|
| import subprocess2
|
| +from testing_support import fake_repos
|
| +from testing_support.fake_repos import join, write
|
|
|
| GCLIENT_PATH = os.path.join(ROOT_DIR, 'gclient')
|
| COVERAGE = False
|
|
|
|
|
| -class GClientSmokeBase(FakeReposTestBase):
|
| +class GClientSmokeBase(fake_repos.FakeReposTestBase):
|
| def setUp(self):
|
| super(GClientSmokeBase, self).setUp()
|
| # Make sure it doesn't try to auto update when testing!
|
| @@ -301,544 +298,6 @@ class GClientSmoke(GClientSmokeBase):
|
| self.checkBlock(res[0], [('running', deps), ('running', src)])
|
|
|
|
|
| -class GClientSmokeSVN(GClientSmokeBase):
|
| - def setUp(self):
|
| - super(GClientSmokeSVN, self).setUp()
|
| - self.enabled = self.FAKE_REPOS.set_up_svn()
|
| -
|
| - def testSync(self):
|
| - # TODO(maruel): safesync.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - # Test unversioned checkout.
|
| - self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'],
|
| - ['running', 'running',
|
| - # This is due to the way svn update is called for a
|
| - # single file when File() is used in a DEPS file.
|
| - ('running', os.path.join(self.root_dir, 'src', 'file', 'other')),
|
| - '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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - # Manually remove svn_hooked1 before synching to make sure it's not
|
| - # recreated.
|
| - os.remove(join(self.root_dir, 'src', 'svn_hooked1'))
|
| -
|
| - # Test incremental versioned sync: sync backward.
|
| - self.parseGclient(
|
| - ['sync', '--revision', 'src@1', '--deps', 'mac',
|
| - '--delete_unversioned_trees', '--jobs', '1'],
|
| - ['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@1', 'src/other'),
|
| - ('trunk/third_party/foo@2', 'src/third_party/prout'))
|
| - tree['src/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - self.assertTree(tree)
|
| - # Test incremental sync: delete-unversioned_trees isn't there.
|
| - self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'],
|
| - ['running', '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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - def testSyncIgnoredSolutionName(self):
|
| - """TODO(maruel): This will become an error soon."""
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - results = self.gclient(
|
| - ['sync', '--deps', 'mac', '-r', 'invalid@1', '--jobs', '1'])
|
| - self.checkBlock(results[0], [
|
| - 'running', 'running',
|
| - # This is due to the way svn update is called for a single file when
|
| - # File() is used in a DEPS file.
|
| - ('running', os.path.join(self.root_dir, 'src', 'file', 'other')),
|
| - '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 = self.mangle_svn_tree(
|
| - ('trunk/src@2', 'src'),
|
| - ('trunk/third_party/foo@1', 'src/third_party/foo'),
|
| - ('trunk/other@2', 'src/other'))
|
| - tree['src/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - def testSyncNoSolutionName(self):
|
| - # When no solution name is provided, gclient uses the first solution listed.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.parseGclient(['sync', '--deps', 'mac', '-r', '1', '--jobs', '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@1', 'src/other'),
|
| - ('trunk/third_party/foo@2', 'src/third_party/prout'))
|
| - self.assertTree(tree)
|
| -
|
| - def testSyncJobs(self):
|
| - if not self.enabled:
|
| - return
|
| - # TODO(maruel): safesync.
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - # Test unversioned checkout.
|
| - # Use --jobs 1 otherwise the order is not deterministic.
|
| - self.parseGclient(
|
| - ['sync', '--deps', 'mac', '--jobs', '1'],
|
| - [
|
| - 'running',
|
| - 'running',
|
| - # This is due to the way svn update is called for a
|
| - # single file when File() is used in a DEPS file.
|
| - ('running', os.path.join(self.root_dir, 'src', 'file', 'other')),
|
| - 'running',
|
| - 'running',
|
| - 'running',
|
| - 'running',
|
| - ],
|
| - untangle=True)
|
| - 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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - # Manually remove svn_hooked1 before synching to make sure it's not
|
| - # recreated.
|
| - os.remove(join(self.root_dir, 'src', 'svn_hooked1'))
|
| -
|
| - # Test incremental versioned sync: sync backward.
|
| - self.parseGclient(
|
| - ['sync', '--revision', 'src@1', '--deps', 'mac',
|
| - '--delete_unversioned_trees', '--jobs', '8'],
|
| - ['running', 'running', 'running', 'running', 'deleting'],
|
| - untangle=True)
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/src@1', 'src'),
|
| - ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| - ('trunk/other@1', 'src/other'),
|
| - ('trunk/third_party/foo@2', 'src/third_party/prout'))
|
| - tree['src/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - self.assertTree(tree)
|
| - # Test incremental sync: delete-unversioned_trees isn't there.
|
| - self.parseGclient(['sync', '--deps', 'mac', '--jobs', '8'],
|
| - ['running', 'running', 'running', 'running', 'running'],
|
| - untangle=True)
|
| - 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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - def testSyncCustomDeps(self):
|
| - if not self.enabled:
|
| - return
|
| - out = (
|
| - 'solutions = [\n'
|
| - ' { "name" : "src",\n'
|
| - ' "url" : "%(base)s/src",\n'
|
| - ' "custom_deps" : {\n'
|
| - # Remove 2 deps, change 1, add 1.
|
| - ' "src/other": None,\n'
|
| - ' "src/third_party/foo": \'%(base)s/third_party/prout\',\n'
|
| - ' "src/file/other": None,\n'
|
| - ' "new_deps": "/trunk/src/third_party",\n'
|
| - ' },\n'
|
| - ' "safesync_url": "",\n'
|
| - ' },\n'
|
| - ']\n\n' %
|
| - { 'base': self.svn_base + 'trunk' })
|
| - fileobj = open(os.path.join(self.root_dir, '.gclient'), 'w')
|
| - fileobj.write(out)
|
| - fileobj.close()
|
| - self.parseGclient(
|
| - ['sync', '--deps', 'mac', '--jobs', '1'],
|
| - ['running', 'running', 'running', 'running'],
|
| - untangle=True)
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/src@2', 'src'),
|
| - ('trunk/third_party/prout@2', 'src/third_party/foo'),
|
| - ('trunk/src/third_party@2', 'new_deps'))
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - def testSyncCustomDepsNoDeps(self):
|
| - if not self.enabled:
|
| - return
|
| - out = (
|
| - 'solutions = [\n'
|
| - # This directory has no DEPS file.
|
| - ' { "name" : "src/third_party",\n'
|
| - ' "url" : "%(base)s/src/third_party",\n'
|
| - ' "custom_deps" : {\n'
|
| - # Add 1.
|
| - ' "src/other": \'/trunk/other\',\n'
|
| - ' },\n'
|
| - ' "safesync_url": "",\n'
|
| - ' },\n'
|
| - ']\n\n' %
|
| - { 'base': self.svn_base + 'trunk' })
|
| - fileobj = open(os.path.join(self.root_dir, '.gclient'), 'w')
|
| - fileobj.write(out)
|
| - fileobj.close()
|
| - self.parseGclient(
|
| - ['sync', '--deps', 'mac', '--jobs', '1'],
|
| - ['running', 'running'],
|
| - untangle=True)
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/src/third_party@2', 'src/third_party'),
|
| - ('trunk/other@2', 'src/other'))
|
| - self.assertTree(tree)
|
| -
|
| - def testRevertAndStatus(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - # Tested in testSync.
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - write(join(self.root_dir, 'src', 'other', 'hi'), 'Hey!')
|
| -
|
| - out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'],
|
| - [['running', join(self.root_dir, 'src')],
|
| - ['running', join(self.root_dir, 'src', 'other')]])
|
| - out = self.svnBlockCleanup(out)
|
| - self.checkString('file', out[0][1])
|
| - self.checkString('other', out[0][2])
|
| - self.checkString('svn_hooked1', out[0][3])
|
| - self.checkString(join('third_party', 'foo'), out[0][4])
|
| - self.checkString('hi', out[1][1])
|
| - self.assertEquals(5, 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', '--jobs', '1'])
|
| - out = self.splitBlock(results[0])
|
| - # src, src/other is missing, src/other, src/third_party/foo is missing,
|
| - # src/third_party/foo, 2 svn hooks, 3 related to File().
|
| - self.assertEquals( 8, len(out))
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - tree['src/svn_hooked2'] = 'svn_hooked2'
|
| - self.assertTree(tree)
|
| -
|
| - out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'],
|
| - [['running', join(self.root_dir, 'src')]])
|
| - out = self.svnBlockCleanup(out)
|
| - self.checkString('file', out[0][1])
|
| - self.checkString('other', out[0][2])
|
| - self.checkString('svn_hooked1', out[0][3])
|
| - self.checkString('svn_hooked2', out[0][4])
|
| - self.checkString(join('third_party', 'foo'), out[0][5])
|
| - self.assertEquals(6, len(out[0]))
|
| - self.assertEquals(1, len(out))
|
| -
|
| - def testRevertAndStatusDepsOs(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - # Tested in testSync.
|
| - self.gclient(['sync', '--deps', 'mac', '--revision', 'src@1'])
|
| - write(join(self.root_dir, 'src', 'other', 'hi'), 'Hey!')
|
| -
|
| - # Without --verbose, gclient won't output the directories without
|
| - # modification.
|
| - out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'],
|
| - [['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', '--jobs', '1'],
|
| - [['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][5])
|
| - self.checkString(join('third_party', 'fpp'), out[0][7])
|
| - self.checkString(join('third_party', 'prout'), out[0][8])
|
| - self.checkString('hi', out[1][5])
|
| - self.assertEquals(9, len(out[0]))
|
| - self.assertEquals(7, len(out[1]))
|
| - self.assertEquals(6, len(out[2]))
|
| - self.assertEquals(6, len(out[3]))
|
| - self.assertEquals(4, len(out))
|
| -
|
| - # 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', '--jobs', '1'])
|
| - out = self.splitBlock(results[0])
|
| - self.assertEquals(4, len(out))
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/src@1', 'src'),
|
| - ('trunk/third_party/foo@2', 'src/third_party/fpp'),
|
| - ('trunk/other@1', 'src/other'),
|
| - ('trunk/third_party/prout@2', 'src/third_party/prout'))
|
| - self.assertTree(tree)
|
| -
|
| - out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'],
|
| - [['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):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - out = self.parseGclient(['runhooks', '--deps', 'mac'],
|
| - ['running', 'running'])
|
| - self.checkString(1, len(out[0]))
|
| - self.checkString(1, len(out[1]))
|
| -
|
| - def testRunHooksDepsOs(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.gclient(['sync', '--deps', 'mac', '--revision', 'src@1'])
|
| - out = self.parseGclient(['runhooks', '--deps', 'mac'], [])
|
| - self.assertEquals([], out)
|
| -
|
| - def testRevInfo(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - results = self.gclient(['revinfo', '--deps', 'mac'])
|
| - out = ('src: %(base)s/src\n'
|
| - 'src/file/other: File("%(base)s/other/DEPS")\n'
|
| - 'src/other: %(base)s/other\n'
|
| - 'src/third_party/foo: %(base)s/third_party/foo@1\n' %
|
| - { 'base': self.svn_base + 'trunk' })
|
| - self.check((out, '', 0), results)
|
| - results = self.gclient(['revinfo', '--deps', 'mac', '--actual'])
|
| - out = ('src: %(base)s/src@2\n'
|
| - 'src/file/other: %(base)s/other/DEPS@2\n'
|
| - 'src/other: %(base)s/other@2\n'
|
| - 'src/third_party/foo: %(base)s/third_party/foo@1\n' %
|
| - { 'base': self.svn_base + 'trunk' })
|
| - self.check((out, '', 0), results)
|
| - results = self.gclient(['revinfo', '--deps', 'mac', '--snapshot'])
|
| - out = ('# Snapshot generated with gclient revinfo --snapshot\n'
|
| - 'solutions = [\n'
|
| - ' { "name" : "src",\n'
|
| - ' "url" : "%(base)s/src",\n'
|
| - ' "deps_file" : "DEPS",\n'
|
| - ' "managed" : True,\n'
|
| - ' "custom_deps" : {\n'
|
| - ' "foo/bar": None,\n'
|
| - ' "invalid": None,\n'
|
| - ' "src/file/other": \'%(base)s/other/DEPS@2\',\n'
|
| - ' "src/other": \'%(base)s/other@2\',\n'
|
| - ' "src/third_party/foo": '
|
| - '\'%(base)s/third_party/foo@1\',\n'
|
| - ' },\n'
|
| - ' "safesync_url": "",\n'
|
| - ' },\n'
|
| - ']\n\n' %
|
| - { 'base': self.svn_base + 'trunk' })
|
| - self.check((out, '', 0), results)
|
| -
|
| - def testRevInfoAltDeps(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/', '--deps-file',
|
| - 'DEPS.alt'])
|
| - self.gclient(['sync'])
|
| - results = self.gclient(['revinfo', '--snapshot'])
|
| - out = ('# Snapshot generated with gclient revinfo --snapshot\n'
|
| - 'solutions = [\n'
|
| - ' { "name" : "src",\n'
|
| - ' "url" : "%(base)s/src",\n'
|
| - ' "deps_file" : "DEPS.alt",\n'
|
| - ' "managed" : True,\n'
|
| - ' "custom_deps" : {\n'
|
| - ' "foo/bar": None,\n'
|
| - ' "invalid": None,\n'
|
| - ' "src/other2": \'%(base)s/other@2\',\n'
|
| - ' },\n'
|
| - ' "safesync_url": "",\n'
|
| - ' },\n'
|
| - ']\n\n' %
|
| - { 'base': self.svn_base + 'trunk' })
|
| - self.check((out, '', 0), results)
|
| -
|
| -
|
| - def testWrongDirectory(self):
|
| - # Check that we're not using a .gclient configuration which only talks
|
| - # about a subdirectory src when we're in a different subdirectory src-other.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.gclient(['sync'])
|
| - other_src = join(self.root_dir, 'src-other')
|
| - os.mkdir(other_src)
|
| - res = ('', 'Error: client not configured; see \'gclient config\'\n', 1)
|
| - self.check(res, self.gclient(['status'], other_src))
|
| -
|
| - def testCorrectDirectory(self):
|
| - # Check that when we're in the subdirectory src, the .gclient configuration
|
| - # is used.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.gclient(['sync'])
|
| - src = join(self.root_dir, 'src')
|
| - res = self.gclient(['status', '--jobs', '1'], src)
|
| - self.checkBlock(res[0], [('running', src)])
|
| -
|
| - def testInitialCheckoutNotYetDone(self):
|
| - # Check that gclient can be executed when the initial checkout hasn't been
|
| - # done yet.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.parseGclient(
|
| - ['sync', '--jobs', '1'],
|
| - ['running', 'running',
|
| - # This is due to the way svn update is called for a
|
| - # single file when File() is used in a DEPS file.
|
| - ('running', os.path.join(self.root_dir, 'src', 'file', 'other')),
|
| - 'running', 'running', 'running', 'running'])
|
| -
|
| - def testInitialCheckoutFailed(self):
|
| - # Check that gclient can be executed from an arbitrary sub directory if the
|
| - # initial checkout has failed.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - self.gclient(['sync'])
|
| - # Cripple the checkout.
|
| - os.remove(join(self.root_dir, '.gclient_entries'))
|
| - src = join(self.root_dir, 'src')
|
| - res = self.gclient(['sync', '--jobs', '1'], src)
|
| - self.checkBlock(res[0],
|
| - ['running', 'running', 'running'])
|
| -
|
| - def testUnversionedRepository(self):
|
| - # Check that gclient automatically deletes crippled SVN repositories.
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| - cmd = ['sync', '--jobs', '1', '--delete_unversioned_trees', '--reset']
|
| - self.assertEquals(0, self.gclient(cmd)[-1])
|
| - third_party = join(self.root_dir, 'src', 'third_party')
|
| - subprocess2.check_call(['svn', 'propset', '-q', 'svn:ignore', 'foo', '.'],
|
| - cwd=third_party)
|
| -
|
| - # 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)[-1])
|
| -
|
| -
|
| -class GClientSmokeSVNTransitive(GClientSmokeBase):
|
| - FAKE_REPOS_CLASS = FakeRepoTransitive
|
| -
|
| - def setUp(self):
|
| - super(GClientSmokeSVNTransitive, self).setUp()
|
| - self.enabled = self.FAKE_REPOS.set_up_svn()
|
| -
|
| - def testSyncTransitive(self):
|
| - if not self.enabled:
|
| - return
|
| -
|
| - self.gclient(['config', self.svn_base + 'trunk/src/'])
|
| -
|
| - def test_case(parent, timestamp, fixed, output):
|
| - # We check out revision 'parent' and expect the following:
|
| - # - src/ is checked out at r'parent'
|
| - # - src/same_repo is checked out at r'parent' (due to --transitive)
|
| - # - src/same_repo_fixed is checked out at r'fixed'
|
| - # - src/different_repo is checked out at r'timestamp'
|
| - # (due to --transitive)
|
| - # - src/different_repo_fixed is checked out at r'fixed'
|
| -
|
| - revisions = self.FAKE_REPOS.svn_revs
|
| - self.parseGclient(
|
| - ['sync', '--transitive', '--revision', 'src@%d' % parent,
|
| - '--jobs', '1'], output)
|
| - self.assertTree({
|
| - 'src/origin': revisions[parent]['trunk/src/origin'],
|
| - 'src/DEPS': revisions[parent]['trunk/src/DEPS'],
|
| - 'src/same_repo/origin': revisions[parent]['trunk/third_party/origin'],
|
| - 'src/same_repo_fixed/origin':
|
| - revisions[fixed]['trunk/third_party/origin'],
|
| - 'src/different_repo/origin':
|
| - revisions[timestamp]['trunk/third_party/origin'],
|
| - 'src/different_repo_fixed/origin':
|
| - revisions[fixed]['trunk/third_party/origin'],
|
| - })
|
| -
|
| - # Here are the test cases for checking out 'trunk/src' at r1, r2 and r3
|
| - # r1: Everything is normal
|
| - test_case(parent=1, timestamp=1, fixed=1,
|
| - output=['running', 'running', 'running', 'running', 'running'])
|
| - # r2: Svn will scan from r1 upwards until it finds a revision matching the
|
| - # given timestamp or it takes the next smallest one (which is r2 in this
|
| - # case).
|
| - test_case(parent=2, timestamp=2, fixed=1,
|
| - output=['running', 'running', 'running'])
|
| - # r3: Svn will scan from r1 upwards until it finds a revision matching the
|
| - # given timestamp or it takes the next smallest one. Since
|
| - # timestamp(r3) < timestamp(r2) svn will checkout r1.
|
| - # This happens often on http://googlecode.com but is unexpected to happen
|
| - # with svnserve (unless you manually change 'svn:date')
|
| - test_case(parent=3, timestamp=1, fixed=1,
|
| - output=['running', 'running', 'running'])
|
| -
|
| -
|
| class GClientSmokeGIT(GClientSmokeBase):
|
| def setUp(self):
|
| super(GClientSmokeGIT, self).setUp()
|
| @@ -1220,247 +679,15 @@ class GClientSmokeGITMutates(GClientSmokeBase):
|
| self.assertTrue(os.path.exists(join(repo2_root, 'last_file')))
|
|
|
|
|
| -class GClientSmokeBoth(GClientSmokeBase):
|
| - def setUp(self):
|
| - super(GClientSmokeBoth, self).setUp()
|
| - self.enabled = self.FAKE_REPOS.set_up_svn() and self.FAKE_REPOS.set_up_git()
|
| -
|
| - def testMultiSolutions(self):
|
| - 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"}]'])
|
| - self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'],
|
| - ['running', 'running',
|
| - # This is due to the way svn update is called for a single
|
| - # file when File() is used in a DEPS file.
|
| - ('running', self.root_dir + '/src/file/other'),
|
| - 'running', 'running', 'running', 'running',
|
| - 'running', 'running'])
|
| - 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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/git_hooked1'] = 'git_hooked1'
|
| - tree['src/git_hooked2'] = 'git_hooked2'
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - def testMultiSolutionsJobs(self):
|
| - 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"}]'])
|
| - # There is no guarantee that the ordering will be consistent.
|
| - (stdout, stderr, returncode) = self.gclient(
|
| - ['sync', '--deps', 'mac', '--jobs', '8'])
|
| - stdout = self.untangle(stdout)
|
| - self.checkString('', stderr)
|
| - self.assertEquals(0, returncode)
|
| - results = self.splitBlock(stdout)
|
| - self.assertEquals(9, len(results))
|
| - 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/file/other/DEPS'] = (
|
| - self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
|
| - tree['src/git_hooked1'] = 'git_hooked1'
|
| - tree['src/git_hooked2'] = 'git_hooked2'
|
| - tree['src/svn_hooked1'] = 'svn_hooked1'
|
| - self.assertTree(tree)
|
| -
|
| - def testMultiSolutionsMultiRev(self):
|
| - 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"}]'])
|
| - self.parseGclient(
|
| - ['sync', '--deps', 'mac', '--jobs', '1', '--revision', '1',
|
| - '-r', 'src-git@' + self.githash('repo_1', 1)],
|
| - ['running', 'running', 'running', 'running'],
|
| - expected_stderr=
|
| - 'You must specify the full solution name like --revision src@1\n'
|
| - 'when you have multiple solutions setup in your .gclient file.\n'
|
| - 'Other solutions present are: src-git.\n')
|
| - tree = self.mangle_git_tree(('repo_1@1', 'src-git'),
|
| - ('repo_2@2', 'src/repo2'),
|
| - ('repo_3@1', '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@1', 'src/other'),
|
| - ('trunk/third_party/foo@2', 'src/third_party/prout')))
|
| - self.assertTree(tree)
|
| -
|
| - def testRevInfo(self):
|
| - 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"}]'])
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - results = self.gclient(['revinfo', '--deps', 'mac'])
|
| - out = ('src: %(svn_base)s/src/\n'
|
| - 'src-git: %(git_base)srepo_1\n'
|
| - 'src/file/other: File("%(svn_base)s/other/DEPS")\n'
|
| - 'src/other: %(svn_base)s/other\n'
|
| - 'src/repo2: %(git_base)srepo_2@%(hash2)s\n'
|
| - 'src/repo2/repo_renamed: %(git_base)srepo_3\n'
|
| - 'src/third_party/foo: %(svn_base)s/third_party/foo@1\n') % {
|
| - 'svn_base': self.svn_base + 'trunk',
|
| - 'git_base': self.git_base,
|
| - 'hash2': self.githash('repo_2', 1)[:7],
|
| - }
|
| - self.check((out, '', 0), results)
|
| - results = self.gclient(['revinfo', '--deps', 'mac', '--actual'])
|
| - out = ('src: %(svn_base)s/src/@2\n'
|
| - 'src-git: %(git_base)srepo_1@%(hash1)s\n'
|
| - 'src/file/other: %(svn_base)s/other/DEPS@2\n'
|
| - 'src/other: %(svn_base)s/other@2\n'
|
| - 'src/repo2: %(git_base)srepo_2@%(hash2)s\n'
|
| - 'src/repo2/repo_renamed: %(git_base)srepo_3@%(hash3)s\n'
|
| - 'src/third_party/foo: %(svn_base)s/third_party/foo@1\n') % {
|
| - 'svn_base': self.svn_base + 'trunk',
|
| - 'git_base': self.git_base,
|
| - 'hash1': self.githash('repo_1', 2),
|
| - 'hash2': self.githash('repo_2', 1),
|
| - 'hash3': self.githash('repo_3', 2),
|
| - }
|
| - self.check((out, '', 0), results)
|
| -
|
| - def testRecurse(self):
|
| - 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"}]'])
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - results = self.gclient(['recurse', '-j1', 'sh', '-c',
|
| - 'echo $GCLIENT_SCM,$GCLIENT_URL,`pwd`'])
|
| -
|
| - entries = [tuple(line.split(','))
|
| - for line in results[0].strip().split('\n')]
|
| - logging.debug(entries)
|
| -
|
| - bases = {'svn': self.svn_base, 'git': self.git_base}
|
| - expected_source = [
|
| - ('svn', 'trunk/src/', 'src'),
|
| - ('git', 'repo_1', 'src-git'),
|
| - ('svn', 'trunk/other', 'src/other'),
|
| - ('git', 'repo_2@' + self.githash('repo_2', 1)[:7], 'src/repo2'),
|
| - ('git', 'repo_3', 'src/repo2/repo_renamed'),
|
| - ('svn', 'trunk/third_party/foo@1', 'src/third_party/foo'),
|
| - ]
|
| - expected = [(scm, bases[scm] + url, os.path.join(self.root_dir, path))
|
| - for (scm, url, path) in expected_source]
|
| -
|
| - self.assertEquals(sorted(entries), sorted(expected))
|
| -
|
| -
|
| class SkiaDEPSTransitionSmokeTest(GClientSmokeBase):
|
| """Simulate the behavior of bisect bots as they transition across the Skia
|
| DEPS change."""
|
|
|
| - FAKE_REPOS_CLASS = FakeRepoSkiaDEPS
|
| + FAKE_REPOS_CLASS = fake_repos.FakeRepoSkiaDEPS
|
|
|
| def setUp(self):
|
| super(SkiaDEPSTransitionSmokeTest, self).setUp()
|
| - self.enabled = self.FAKE_REPOS.set_up_git() and self.FAKE_REPOS.set_up_svn()
|
| -
|
| - def testSkiaDEPSChangeSVN(self):
|
| - if not self.enabled:
|
| - return
|
| -
|
| - # Create an initial checkout:
|
| - # - Single checkout at the root.
|
| - # - Multiple checkouts in a shared subdirectory.
|
| - self.gclient(['config', '--spec',
|
| - 'solutions=['
|
| - '{"name": "src",'
|
| - ' "url": "' + self.svn_base + 'trunk/src/",'
|
| - '}]'])
|
| -
|
| - checkout_path = os.path.join(self.root_dir, 'src')
|
| - skia = os.path.join(checkout_path, 'third_party', 'skia')
|
| - skia_gyp = os.path.join(skia, 'gyp')
|
| - skia_include = os.path.join(skia, 'include')
|
| - skia_src = os.path.join(skia, 'src')
|
| -
|
| - gyp_svn_url = self.svn_base + 'skia/gyp'
|
| - include_svn_url = self.svn_base + 'skia/include'
|
| - src_svn_url = self.svn_base + 'skia/src'
|
| - skia_git_url = self.git_base + 'repo_1'
|
| -
|
| - # Initial sync. Verify that we get the expected checkout.
|
| - res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2'])
|
| - self.assertEqual(res[2], 0, 'Initial sync failed.')
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'],
|
| - gyp_svn_url)
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_include)['URL'],
|
| - include_svn_url)
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'],
|
| - src_svn_url)
|
| -
|
| - # Verify that the sync succeeds. Verify that we have the expected merged
|
| - # checkout.
|
| - res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3'])
|
| - self.assertEqual(res[2], 0, 'DEPS change sync failed.')
|
| - self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| - skia), skia_git_url)
|
| -
|
| - # Sync again. Verify that we still have the expected merged checkout.
|
| - res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3'])
|
| - self.assertEqual(res[2], 0, 'Subsequent sync failed.')
|
| - self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| - skia), skia_git_url)
|
| -
|
| - # Sync back to the original DEPS. Verify that we get the original structure.
|
| - res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2'])
|
| - self.assertEqual(res[2], 0, 'Reverse sync failed.')
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'],
|
| - gyp_svn_url)
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_include)['URL'],
|
| - include_svn_url)
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'],
|
| - src_svn_url)
|
| -
|
| - # Sync again. Verify that we still have the original structure.
|
| - res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2'])
|
| - self.assertEqual(res[2], 0, 'Subsequent sync #2 failed.')
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'],
|
| - gyp_svn_url)
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_include)['URL'],
|
| - include_svn_url)
|
| - self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'],
|
| - src_svn_url)
|
| + self.enabled = self.FAKE_REPOS.set_up_git()
|
|
|
| def testSkiaDEPSChangeGit(self):
|
| if not self.enabled:
|
| @@ -1542,7 +769,7 @@ class BlinkDEPSTransitionSmokeTest(GClientSmokeBase):
|
| """Simulate the behavior of bisect bots as they transition across the Blink
|
| DEPS change."""
|
|
|
| - FAKE_REPOS_CLASS = FakeRepoBlinkDEPS
|
| + FAKE_REPOS_CLASS = fake_repos.FakeRepoBlinkDEPS
|
|
|
| def setUp(self):
|
| super(BlinkDEPSTransitionSmokeTest, self).setUp()
|
| @@ -1673,103 +900,6 @@ class BlinkDEPSTransitionSmokeTest(GClientSmokeBase):
|
| ['git', 'show-ref', '-q', '--verify', 'refs/heads/foo'], cwd=self.blink)
|
|
|
|
|
| -class GClientSmokeFromCheckout(GClientSmokeBase):
|
| - # WebKit abuses this. It has a .gclient and a DEPS from a checkout.
|
| - def setUp(self):
|
| - super(GClientSmokeFromCheckout, self).setUp()
|
| - self.enabled = self.FAKE_REPOS.set_up_svn()
|
| - os.rmdir(self.root_dir)
|
| - if self.enabled:
|
| - usr, pwd = self.FAKE_REPOS.USERS[0]
|
| - subprocess2.check_call(
|
| - ['svn', 'checkout', self.svn_base + '/trunk/webkit',
|
| - self.root_dir, '-q',
|
| - '--non-interactive', '--no-auth-cache',
|
| - '--username', usr, '--password', pwd])
|
| -
|
| - def testSync(self):
|
| - if not self.enabled:
|
| - return
|
| - self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'],
|
| - ['running', 'running'])
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/webkit@2', ''),
|
| - ('trunk/third_party/foo@1', 'foo/bar'))
|
| - self.assertTree(tree)
|
| -
|
| - def testRevertAndStatus(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['sync'])
|
| -
|
| - # TODO(maruel): This is incorrect.
|
| - out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'], [])
|
| -
|
| - # Revert implies --force implies running hooks without looking at pattern
|
| - # matching.
|
| - results = self.gclient(['revert', '--deps', 'mac', '--jobs', '1'])
|
| - out = self.splitBlock(results[0])
|
| - self.assertEquals(2, len(out))
|
| - # This value varies depending on the version of svn being run.
|
| - # New vesions (the one in Trust) print "Updating '.':" and "At revision 1.".
|
| - # Older versions (the one in Precise) print just "At revision 1.".
|
| - #self.assertEquals(3, len(out[0]))
|
| - self.assertEquals(2, len(out[1]))
|
| - self.checkString('foo', out[1][1])
|
| - self.checkString('', results[1])
|
| - self.assertEquals(0, results[2])
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/webkit@2', ''),
|
| - ('trunk/third_party/foo@1', 'foo/bar'))
|
| - self.assertTree(tree)
|
| -
|
| - # TODO(maruel): This is incorrect.
|
| - out = self.parseGclient(['status', '--deps', 'mac'], [])
|
| -
|
| - def testRunHooks(self):
|
| - if not self.enabled:
|
| - return
|
| - # Hooks aren't really tested for now since there is no hook defined.
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - out = self.parseGclient(['runhooks', '--deps', 'mac'], ['running'])
|
| - self.assertEquals(1, len(out))
|
| - self.assertEquals(2, len(out[0]))
|
| - self.assertEquals(3, len(out[0][0]))
|
| - self.checkString('foo', out[0][1])
|
| - tree = self.mangle_svn_tree(
|
| - ('trunk/webkit@2', ''),
|
| - ('trunk/third_party/foo@1', 'foo/bar'))
|
| - self.assertTree(tree)
|
| -
|
| - def testRevInfo(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['sync', '--deps', 'mac'])
|
| - results = self.gclient(['revinfo', '--deps', 'mac'])
|
| - expected = (
|
| - './: None\nfoo/bar: %strunk/third_party/foo@1\n' % self.svn_base,
|
| - '', 0)
|
| - self.check(expected, results)
|
| - # TODO(maruel): To be added after the refactor.
|
| - #results = self.gclient(['revinfo', '--snapshot'])
|
| - #expected = (
|
| - # './: None\nfoo/bar: %strunk/third_party/foo@1\n' % self.svn_base,
|
| - # '', 0)
|
| - #self.check(expected, results)
|
| -
|
| - def testRest(self):
|
| - if not self.enabled:
|
| - return
|
| - self.gclient(['sync'])
|
| - # TODO(maruel): This is incorrect, it should run on ./ too.
|
| - self.parseGclient(
|
| - ['cleanup', '--deps', 'mac', '--verbose', '--jobs', '1'],
|
| - [('running', join(self.root_dir, 'foo', 'bar'))])
|
| - self.parseGclient(
|
| - ['diff', '--deps', 'mac', '--verbose', '--jobs', '1'],
|
| - [('running', join(self.root_dir, 'foo', 'bar'))])
|
| -
|
| -
|
| if __name__ == '__main__':
|
| if '-v' in sys.argv:
|
| logging.basicConfig(level=logging.DEBUG)
|
|
|