2010-07-14 17:39:18 +04:00
|
|
|
import test_util
|
|
|
|
|
2010-11-25 23:55:21 +03:00
|
|
|
import os, unittest, sys
|
2009-04-23 01:24:58 +04:00
|
|
|
|
|
|
|
from mercurial import commands
|
2010-11-25 23:55:21 +03:00
|
|
|
from mercurial import util as hgutil
|
|
|
|
try:
|
|
|
|
from mercurial import subrepo
|
|
|
|
# require svnsubrepo and hg >= 1.7.1
|
|
|
|
subrepo.svnsubrepo
|
|
|
|
hgutil.checknlink
|
|
|
|
except (ImportError, AttributeError), e:
|
|
|
|
print >>sys.stderr, 'test_externals: skipping .hgsub tests'
|
|
|
|
subrepo = None
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-05-14 06:39:39 +04:00
|
|
|
from hgsubversion import svnexternals
|
2009-01-03 00:54:05 +03:00
|
|
|
|
|
|
|
class TestFetchExternals(test_util.TestBase):
|
|
|
|
def test_externalsfile(self):
|
|
|
|
f = svnexternals.externalsfile()
|
|
|
|
f['t1'] = 'dir1 -r10 svn://foobar'
|
|
|
|
f['t 2'] = 'dir2 -r10 svn://foobar'
|
|
|
|
f['t3'] = ['dir31 -r10 svn://foobar', 'dir32 -r10 svn://foobar']
|
2009-03-28 00:56:07 +03:00
|
|
|
|
|
|
|
refext = """[t 2]
|
2009-01-03 00:54:05 +03:00
|
|
|
dir2 -r10 svn://foobar
|
|
|
|
[t1]
|
|
|
|
dir1 -r10 svn://foobar
|
|
|
|
[t3]
|
|
|
|
dir31 -r10 svn://foobar
|
|
|
|
dir32 -r10 svn://foobar
|
|
|
|
"""
|
|
|
|
value = f.write()
|
|
|
|
self.assertEqual(refext, value)
|
|
|
|
|
|
|
|
f2 = svnexternals.externalsfile()
|
|
|
|
f2.read(value)
|
|
|
|
self.assertEqual(sorted(f), sorted(f2))
|
|
|
|
for t in f:
|
|
|
|
self.assertEqual(f[t], f2[t])
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
def test_parsedefinitions(self):
|
|
|
|
# Taken from svn book
|
|
|
|
samples = [
|
|
|
|
('third-party/sounds http://svn.example.com/repos/sounds',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/sounds', None, 'http://svn.example.com/repos/sounds', None,
|
|
|
|
'third-party/sounds http://svn.example.com/repos/sounds')),
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
('third-party/skins -r148 http://svn.example.com/skinproj',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/skins', '148', 'http://svn.example.com/skinproj', None,
|
|
|
|
'third-party/skins -r{REV} http://svn.example.com/skinproj')),
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
('third-party/skins -r 148 http://svn.example.com/skinproj',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/skins', '148', 'http://svn.example.com/skinproj', None,
|
|
|
|
'third-party/skins -r {REV} http://svn.example.com/skinproj')),
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
('http://svn.example.com/repos/sounds third-party/sounds',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/sounds', None, 'http://svn.example.com/repos/sounds', None,
|
|
|
|
'http://svn.example.com/repos/sounds third-party/sounds')),
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
('-r148 http://svn.example.com/skinproj third-party/skins',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/skins', '148', 'http://svn.example.com/skinproj', None,
|
|
|
|
'-r{REV} http://svn.example.com/skinproj third-party/skins')),
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
('-r 148 http://svn.example.com/skinproj third-party/skins',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/skins', '148', 'http://svn.example.com/skinproj', None,
|
|
|
|
'-r {REV} http://svn.example.com/skinproj third-party/skins')),
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
('http://svn.example.com/skin-maker@21 third-party/skins/toolkit',
|
2010-11-25 23:55:21 +03:00
|
|
|
('third-party/skins/toolkit', None, 'http://svn.example.com/skin-maker', '21',
|
|
|
|
'http://svn.example.com/skin-maker@21 third-party/skins/toolkit')),
|
2009-04-23 01:24:58 +04:00
|
|
|
]
|
2009-05-14 06:39:39 +04:00
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
for line, expected in samples:
|
|
|
|
self.assertEqual(expected, svnexternals.parsedefinition(line))
|
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
def test_externals(self, stupid=False):
|
|
|
|
repo = self._load_fixture_and_fetch('externals.svndump', stupid=stupid)
|
|
|
|
|
2009-03-28 00:56:07 +03:00
|
|
|
ref0 = """[.]
|
2009-01-15 08:17:12 +03:00
|
|
|
^/externals/project1 deps/project1
|
2009-01-03 00:54:05 +03:00
|
|
|
"""
|
2011-03-24 06:21:06 +03:00
|
|
|
self.assertMultiLineEqual(ref0, repo[0]['.hgsvnexternals'].data())
|
2011-03-02 23:06:30 +03:00
|
|
|
ref1 = """\
|
|
|
|
[.]
|
|
|
|
# A comment, then an empty line, then a blank line
|
|
|
|
|
2009-01-15 08:17:12 +03:00
|
|
|
^/externals/project1 deps/project1
|
2011-03-02 23:06:30 +03:00
|
|
|
|
2009-05-04 06:42:44 +04:00
|
|
|
-r2 ^/externals/project2@2 deps/project2
|
2009-01-03 00:54:05 +03:00
|
|
|
"""
|
2011-03-24 06:21:06 +03:00
|
|
|
self.assertMultiLineEqual(ref1, repo[1]['.hgsvnexternals'].data())
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-03-28 00:56:07 +03:00
|
|
|
ref2 = """[.]
|
2009-05-04 06:42:44 +04:00
|
|
|
-r2 ^/externals/project2@2 deps/project2
|
2009-01-03 00:54:05 +03:00
|
|
|
[subdir]
|
2009-01-15 08:17:12 +03:00
|
|
|
^/externals/project1 deps/project1
|
2009-01-03 00:54:05 +03:00
|
|
|
[subdir2]
|
2009-01-15 08:17:12 +03:00
|
|
|
^/externals/project1 deps/project1
|
2009-01-03 00:54:05 +03:00
|
|
|
"""
|
2009-03-29 00:38:57 +03:00
|
|
|
actual = repo[2]['.hgsvnexternals'].data()
|
2009-03-28 00:56:07 +03:00
|
|
|
self.assertEqual(ref2, actual)
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-03-28 00:56:07 +03:00
|
|
|
ref3 = """[.]
|
2009-05-04 06:42:44 +04:00
|
|
|
-r2 ^/externals/project2@2 deps/project2
|
2009-01-15 08:17:12 +03:00
|
|
|
[subdir]
|
|
|
|
^/externals/project1 deps/project1
|
2009-01-03 00:54:05 +03:00
|
|
|
"""
|
2009-03-29 00:38:57 +03:00
|
|
|
self.assertEqual(ref3, repo[3]['.hgsvnexternals'].data())
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-03-28 00:56:07 +03:00
|
|
|
ref4 = """[subdir]
|
2009-01-15 08:17:12 +03:00
|
|
|
^/externals/project1 deps/project1
|
2009-01-03 00:54:05 +03:00
|
|
|
"""
|
2009-03-29 00:38:57 +03:00
|
|
|
self.assertEqual(ref4, repo[4]['.hgsvnexternals'].data())
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-03-28 00:56:07 +03:00
|
|
|
ref5 = """[.]
|
2009-05-04 06:42:44 +04:00
|
|
|
-r2 ^/externals/project2@2 deps/project2
|
2009-01-15 08:17:13 +03:00
|
|
|
[subdir2]
|
|
|
|
^/externals/project1 deps/project1
|
2009-01-15 08:17:12 +03:00
|
|
|
"""
|
2009-03-29 00:38:57 +03:00
|
|
|
self.assertEqual(ref5, repo[5]['.hgsvnexternals'].data())
|
2009-01-15 08:17:12 +03:00
|
|
|
|
2009-03-28 00:56:07 +03:00
|
|
|
ref6 = """[.]
|
2009-05-04 06:42:44 +04:00
|
|
|
-r2 ^/externals/project2@2 deps/project2
|
2009-01-15 08:17:13 +03:00
|
|
|
"""
|
2009-03-29 00:38:57 +03:00
|
|
|
self.assertEqual(ref6, repo[6]['.hgsvnexternals'].data())
|
2009-01-15 08:17:13 +03:00
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
def test_externals_stupid(self):
|
|
|
|
self.test_externals(True)
|
|
|
|
|
2009-04-23 01:24:58 +04:00
|
|
|
def test_updateexternals(self):
|
|
|
|
def checkdeps(deps, nodeps, repo, rev=None):
|
|
|
|
svnexternals.updateexternals(ui, [rev], repo)
|
|
|
|
for d in deps:
|
|
|
|
p = os.path.join(repo.root, d)
|
2009-05-14 06:39:39 +04:00
|
|
|
self.assertTrue(os.path.isdir(p),
|
2009-04-23 01:24:58 +04:00
|
|
|
'missing: %s@%r' % (d, rev))
|
|
|
|
for d in nodeps:
|
|
|
|
p = os.path.join(repo.root, d)
|
|
|
|
self.assertTrue(not os.path.isdir(p),
|
|
|
|
'unexpected: %s@%r' % (d, rev))
|
|
|
|
|
2010-02-26 16:50:22 +03:00
|
|
|
ui = self.ui()
|
2009-04-23 01:24:58 +04:00
|
|
|
repo = self._load_fixture_and_fetch('externals.svndump', stupid=0)
|
|
|
|
commands.update(ui, repo)
|
|
|
|
checkdeps(['deps/project1'], [], repo, 0)
|
|
|
|
checkdeps(['deps/project1', 'deps/project2'], [], repo, 1)
|
2009-05-14 06:39:39 +04:00
|
|
|
checkdeps(['subdir/deps/project1', 'subdir2/deps/project1',
|
|
|
|
'deps/project2'],
|
2009-04-23 01:24:58 +04:00
|
|
|
['deps/project1'], repo, 2)
|
2009-05-14 06:39:39 +04:00
|
|
|
checkdeps(['subdir/deps/project1', 'deps/project2'],
|
2009-04-23 01:24:58 +04:00
|
|
|
['subdir2/deps/project1'], repo, 3)
|
|
|
|
checkdeps(['subdir/deps/project1'], ['deps/project2'], repo, 4)
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2010-11-25 23:55:21 +03:00
|
|
|
def test_hgsub(self, stupid=False):
|
2011-03-24 06:21:06 +03:00
|
|
|
if subrepo is None:
|
|
|
|
return
|
2010-11-25 23:55:21 +03:00
|
|
|
repo = self._load_fixture_and_fetch('externals.svndump',
|
|
|
|
externals='subrepos',
|
|
|
|
stupid=stupid)
|
|
|
|
self.assertEqual("""\
|
|
|
|
deps/project1 = [hgsubversion] :^/externals/project1 deps/project1
|
|
|
|
""", repo[0]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
HEAD deps/project1
|
|
|
|
""", repo[0]['.hgsubstate'].data())
|
|
|
|
|
|
|
|
self.assertEqual("""\
|
|
|
|
deps/project1 = [hgsubversion] :^/externals/project1 deps/project1
|
|
|
|
deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2
|
|
|
|
""", repo[1]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
HEAD deps/project1
|
|
|
|
2 deps/project2
|
|
|
|
""", repo[1]['.hgsubstate'].data())
|
|
|
|
|
|
|
|
self.assertEqual("""\
|
|
|
|
deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2
|
|
|
|
subdir/deps/project1 = [hgsubversion] subdir:^/externals/project1 deps/project1
|
|
|
|
subdir2/deps/project1 = [hgsubversion] subdir2:^/externals/project1 deps/project1
|
|
|
|
""", repo[2]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
2 deps/project2
|
|
|
|
HEAD subdir/deps/project1
|
|
|
|
HEAD subdir2/deps/project1
|
|
|
|
""", repo[2]['.hgsubstate'].data())
|
|
|
|
|
2011-03-24 06:21:06 +03:00
|
|
|
self.assertMultiLineEqual("""\
|
2010-11-25 23:55:21 +03:00
|
|
|
deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2
|
|
|
|
subdir/deps/project1 = [hgsubversion] subdir:^/externals/project1 deps/project1
|
|
|
|
""", repo[3]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
2 deps/project2
|
|
|
|
HEAD subdir/deps/project1
|
|
|
|
""", repo[3]['.hgsubstate'].data())
|
|
|
|
|
|
|
|
self.assertEqual("""\
|
|
|
|
subdir/deps/project1 = [hgsubversion] subdir:^/externals/project1 deps/project1
|
|
|
|
""", repo[4]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
HEAD subdir/deps/project1
|
|
|
|
""", repo[4]['.hgsubstate'].data())
|
|
|
|
|
|
|
|
self.assertEqual("""\
|
|
|
|
deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2
|
|
|
|
subdir2/deps/project1 = [hgsubversion] subdir2:^/externals/project1 deps/project1
|
|
|
|
""", repo[5]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
2 deps/project2
|
|
|
|
HEAD subdir2/deps/project1
|
|
|
|
""", repo[5]['.hgsubstate'].data())
|
|
|
|
|
|
|
|
self.assertEqual("""\
|
|
|
|
deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2
|
|
|
|
""", repo[6]['.hgsub'].data())
|
|
|
|
self.assertEqual("""\
|
|
|
|
2 deps/project2
|
|
|
|
""", repo[6]['.hgsubstate'].data())
|
|
|
|
|
|
|
|
def test_hgsub_stupid(self):
|
|
|
|
self.test_hgsub(True)
|
|
|
|
|
2010-12-12 17:32:25 +03:00
|
|
|
def test_ignore(self):
|
|
|
|
repo = self._load_fixture_and_fetch('externals.svndump',
|
|
|
|
externals='ignore')
|
|
|
|
for rev in repo:
|
|
|
|
ctx = repo[rev]
|
|
|
|
self.assertTrue('.hgsvnexternals' not in ctx)
|
|
|
|
self.assertTrue('.hgsub' not in ctx)
|
|
|
|
self.assertTrue('.hgsubstate' not in ctx)
|
|
|
|
|
2010-11-25 23:55:21 +03:00
|
|
|
def test_updatehgsub(self):
|
|
|
|
def checkdeps(ui, repo, rev, deps, nodeps):
|
|
|
|
commands.update(ui, repo, node=str(rev))
|
|
|
|
for d in deps:
|
|
|
|
p = os.path.join(repo.root, d)
|
|
|
|
self.assertTrue(os.path.isdir(p),
|
|
|
|
'missing: %s@%r' % (d, repo[None].rev()))
|
|
|
|
for d in nodeps:
|
|
|
|
p = os.path.join(repo.root, d)
|
|
|
|
self.assertTrue(not os.path.isdir(p),
|
|
|
|
'unexpected: %s@%r' % (d, repo[None].rev()))
|
|
|
|
|
|
|
|
if subrepo is None:
|
|
|
|
return
|
|
|
|
|
|
|
|
ui = self.ui()
|
|
|
|
repo = self._load_fixture_and_fetch('externals.svndump',
|
|
|
|
stupid=0, externals='subrepos')
|
|
|
|
checkdeps(ui, repo, 0, ['deps/project1'], [])
|
|
|
|
checkdeps(ui, repo, 1, ['deps/project1', 'deps/project2'], [])
|
|
|
|
checkdeps(ui, repo, 2, ['subdir/deps/project1', 'subdir2/deps/project1',
|
|
|
|
'deps/project2'],
|
|
|
|
['deps/project1'])
|
|
|
|
checkdeps(ui, repo, 3, ['subdir/deps/project1', 'deps/project2'],
|
|
|
|
['subdir2/deps/project1'])
|
|
|
|
checkdeps(ui, repo, 4, ['subdir/deps/project1'], ['deps/project2'])
|
|
|
|
|
2011-02-02 16:25:58 +03:00
|
|
|
# Test update --clean, used to crash
|
|
|
|
repo.wwrite('subdir/deps/project1/a', 'foobar', '')
|
|
|
|
commands.update(ui, repo, node='4', clean=True)
|
|
|
|
|
2011-03-10 00:07:26 +03:00
|
|
|
def test_mergeexternals(self, stupid=False):
|
2011-03-24 06:21:06 +03:00
|
|
|
if subrepo is None:
|
|
|
|
return
|
2011-03-10 00:07:26 +03:00
|
|
|
repo = self._load_fixture_and_fetch('mergeexternals.svndump',
|
|
|
|
externals='subrepos',
|
|
|
|
stupid=stupid)
|
|
|
|
# Check merged directories externals are fine
|
|
|
|
self.assertEqual("""\
|
|
|
|
d1/ext = [hgsubversion] d1:^/trunk/common/ext ext
|
|
|
|
d2/ext = [hgsubversion] d2:^/trunk/common/ext ext
|
|
|
|
d3/ext3 = [hgsubversion] d3:^/trunk/common/ext ext3
|
|
|
|
""", repo['tip']['.hgsub'].data())
|
|
|
|
|
|
|
|
def test_mergeexternals_stupid(self):
|
|
|
|
self.test_mergeexternals(True)
|
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
class TestPushExternals(test_util.TestBase):
|
2010-11-25 23:55:21 +03:00
|
|
|
def test_push_externals(self, stupid=False):
|
2009-01-03 00:54:05 +03:00
|
|
|
test_util.load_fixture_and_fetch('pushexternals.svndump',
|
|
|
|
self.repo_path,
|
|
|
|
self.wc_path)
|
|
|
|
# Add a new reference on an existing and non-existing directory
|
|
|
|
changes = [
|
2009-03-28 00:56:07 +03:00
|
|
|
('.hgsvnexternals', '.hgsvnexternals',
|
|
|
|
"""[dir]
|
2009-01-03 00:54:05 +03:00
|
|
|
../externals/project2 deps/project2
|
|
|
|
[subdir1]
|
|
|
|
../externals/project1 deps/project1
|
|
|
|
[subdir2]
|
|
|
|
../externals/project2 deps/project2
|
|
|
|
"""),
|
|
|
|
('subdir1/a', 'subdir1/a', 'a'),
|
|
|
|
('subdir2/a', 'subdir2/a', 'a'),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
|
|
|
|
# Remove all references from one directory, add a new one
|
|
|
|
# to the other (test multiline entries)
|
|
|
|
changes = [
|
2009-03-28 00:56:07 +03:00
|
|
|
('.hgsvnexternals', '.hgsvnexternals',
|
|
|
|
"""[subdir1]
|
2009-01-03 00:54:05 +03:00
|
|
|
../externals/project1 deps/project1
|
|
|
|
../externals/project2 deps/project2
|
|
|
|
"""),
|
|
|
|
# This removal used to trigger the parent directory removal
|
|
|
|
('subdir1/a', None, None),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
# Check subdir2/a is still there even if the externals were removed
|
|
|
|
self.assertTrue('subdir2/a' in self.repo['tip'])
|
|
|
|
self.assertTrue('subdir1/a' not in self.repo['tip'])
|
|
|
|
|
2009-01-03 00:54:06 +03:00
|
|
|
# Test externals removal
|
|
|
|
changes = [
|
|
|
|
('.hgsvnexternals', None, None),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
def test_push_externals_stupid(self):
|
|
|
|
self.test_push_externals(True)
|
|
|
|
|
2010-11-25 23:55:21 +03:00
|
|
|
def test_push_hgsub(self, stupid=False):
|
|
|
|
if subrepo is None:
|
|
|
|
return
|
|
|
|
|
|
|
|
test_util.load_fixture_and_fetch('pushexternals.svndump',
|
|
|
|
self.repo_path,
|
|
|
|
self.wc_path,
|
|
|
|
externals='subrepos')
|
|
|
|
# Add a new reference on an existing and non-existing directory
|
|
|
|
changes = [
|
|
|
|
('.hgsub', '.hgsub', """\
|
|
|
|
dir/deps/project2 = [hgsubversion] dir:^/externals/project2 deps/project2
|
|
|
|
subdir1/deps/project1 = [hgsubversion] subdir1:^/externals/project1 deps/project1
|
|
|
|
subdir2/deps/project2 = [hgsubversion] subdir2:^/externals/project2 deps/project2
|
|
|
|
"""),
|
|
|
|
('.hgsubstate', '.hgsubstate', """\
|
|
|
|
HEAD dir/deps/project2
|
|
|
|
HEAD subdir1/deps/project1
|
|
|
|
HEAD subdir2/deps/project2
|
|
|
|
"""),
|
|
|
|
('subdir1/a', 'subdir1/a', 'a'),
|
|
|
|
('subdir2/a', 'subdir2/a', 'a'),
|
|
|
|
]
|
|
|
|
self.svnco('externals/project2', '2', 'dir/deps/project2')
|
|
|
|
self.svnco('externals/project1', '2', 'subdir1/deps/project1')
|
|
|
|
self.svnco('externals/project2', '2', 'subdir2/deps/project2')
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
|
|
|
|
# Check .hgsub and .hgsubstate were not pushed
|
|
|
|
self.assertEqual(['dir', 'subdir1', 'subdir1/a','subdir2',
|
|
|
|
'subdir2/a'], self.svnls('trunk'))
|
|
|
|
|
|
|
|
# Remove all references from one directory, add a new one
|
|
|
|
# to the other (test multiline entries)
|
|
|
|
changes = [
|
|
|
|
('.hgsub', '.hgsub', """\
|
|
|
|
subdir1/deps/project1 = [hgsubversion] subdir1:^/externals/project1 deps/project1
|
|
|
|
subdir1/deps/project2 = [hgsubversion] subdir1:^/externals/project2 deps/project2
|
|
|
|
"""),
|
|
|
|
('.hgsubstate', '.hgsubstate', """\
|
|
|
|
HEAD subdir1/deps/project1
|
|
|
|
HEAD subdir1/deps/project2
|
|
|
|
"""),
|
|
|
|
# This removal used to trigger the parent directory removal
|
|
|
|
('subdir1/a', None, None),
|
|
|
|
]
|
|
|
|
self.svnco('externals/project1', '2', 'subdir1/deps/project1')
|
|
|
|
self.svnco('externals/project2', '2', 'subdir1/deps/project2')
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
# Check subdir2/a is still there even if the externals were removed
|
|
|
|
self.assertTrue('subdir2/a' in self.repo['tip'])
|
|
|
|
self.assertTrue('subdir1/a' not in self.repo['tip'])
|
|
|
|
|
2011-02-13 22:14:01 +03:00
|
|
|
# Move the externals so they are defined on the base directory,
|
|
|
|
# this used to cause full branch removal when deleting the .hgsub
|
|
|
|
changes = [
|
|
|
|
('.hgsub', '.hgsub', """\
|
|
|
|
subdir1/deps/project1 = [hgsubversion] :^/externals/project1 subdir1/deps/project1
|
|
|
|
"""),
|
|
|
|
('.hgsubstate', '.hgsubstate', """\
|
|
|
|
HEAD subdir1/deps/project1
|
|
|
|
"""),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
|
2010-11-25 23:55:21 +03:00
|
|
|
# Test externals removal
|
|
|
|
changes = [
|
|
|
|
('.hgsub', None, None),
|
|
|
|
('.hgsubstate', None, None),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions(stupid)
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
def suite():
|
|
|
|
all = [unittest.TestLoader().loadTestsFromTestCase(TestFetchExternals),
|
2009-01-03 00:54:05 +03:00
|
|
|
unittest.TestLoader().loadTestsFromTestCase(TestPushExternals),
|
2009-01-03 00:54:05 +03:00
|
|
|
]
|
|
|
|
return unittest.TestSuite(all)
|