2018-01-03 22:51:20 +03:00
|
|
|
# no-check-code -- see T24862348
|
|
|
|
|
2019-05-21 19:06:46 +03:00
|
|
|
from __future__ import absolute_import
|
|
|
|
|
2018-07-06 03:45:27 +03:00
|
|
|
import os
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2018-07-06 03:45:27 +03:00
|
|
|
import test_hgsubversion_util
|
2019-01-30 03:25:33 +03:00
|
|
|
from edenscm.hgext.hgsubversion import svnexternals
|
2019-03-11 20:37:29 +03:00
|
|
|
from edenscm.mercurial import commands
|
2018-07-06 03:45:27 +03:00
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2018-01-17 14:23:44 +03:00
|
|
|
class TestFetchExternals(test_hgsubversion_util.TestBase):
|
2013-08-10 01:45:53 +04:00
|
|
|
stupid_mode_tests = True
|
|
|
|
|
2009-01-03 00:54:05 +03:00
|
|
|
def test_externalsfile(self):
|
|
|
|
f = svnexternals.externalsfile()
|
2018-07-06 03:45:27 +03:00
|
|
|
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
|
|
|
|
2019-05-22 12:32:09 +03:00
|
|
|
refext = (
|
|
|
|
"""[t 2]\n"""
|
|
|
|
""" dir2 -r10 svn://foobar\n"""
|
|
|
|
"""[t1]\n"""
|
|
|
|
""" dir1 -r10 svn://foobar\n"""
|
|
|
|
"""[t3]\n"""
|
|
|
|
""" dir31 -r10 svn://foobar\n"""
|
|
|
|
""" dir32 -r10 svn://foobar\n"""
|
|
|
|
)
|
2009-01-03 00:54:05 +03:00
|
|
|
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 = [
|
2018-07-06 03:45:27 +03:00
|
|
|
(
|
|
|
|
"third-party/sounds http://svn.example.com/repos/sounds",
|
|
|
|
(
|
|
|
|
"third-party/sounds",
|
|
|
|
None,
|
|
|
|
"http://svn.example.com/repos/sounds",
|
|
|
|
None,
|
|
|
|
"third-party/sounds http://svn.example.com/repos/sounds",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"third-party/skins -r148 http://svn.example.com/skinproj",
|
|
|
|
(
|
|
|
|
"third-party/skins",
|
|
|
|
"148",
|
|
|
|
"http://svn.example.com/skinproj",
|
|
|
|
None,
|
|
|
|
"third-party/skins -r{REV} http://svn.example.com/skinproj",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"third-party/skins -r 148 http://svn.example.com/skinproj",
|
|
|
|
(
|
|
|
|
"third-party/skins",
|
|
|
|
"148",
|
|
|
|
"http://svn.example.com/skinproj",
|
|
|
|
None,
|
|
|
|
"third-party/skins -r {REV} http://svn.example.com/skinproj",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"http://svn.example.com/repos/sounds third-party/sounds",
|
|
|
|
(
|
|
|
|
"third-party/sounds",
|
|
|
|
None,
|
|
|
|
"http://svn.example.com/repos/sounds",
|
|
|
|
None,
|
|
|
|
"http://svn.example.com/repos/sounds third-party/sounds",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"-r148 http://svn.example.com/skinproj third-party/skins",
|
|
|
|
(
|
|
|
|
"third-party/skins",
|
|
|
|
"148",
|
|
|
|
"http://svn.example.com/skinproj",
|
|
|
|
None,
|
|
|
|
"-r{REV} http://svn.example.com/skinproj third-party/skins",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"-r 148 http://svn.example.com/skinproj third-party/skins",
|
|
|
|
(
|
|
|
|
"third-party/skins",
|
|
|
|
"148",
|
|
|
|
"http://svn.example.com/skinproj",
|
|
|
|
None,
|
|
|
|
"-r {REV} http://svn.example.com/skinproj third-party/skins",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"http://svn.example.com/skin-maker@21 third-party/skins/toolkit",
|
|
|
|
(
|
|
|
|
"third-party/skins/toolkit",
|
|
|
|
None,
|
|
|
|
"http://svn.example.com/skin-maker",
|
|
|
|
"21",
|
|
|
|
"http://svn.example.com/skin-maker@21 third-party/skins/toolkit",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
]
|
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))
|
|
|
|
|
2013-08-10 01:45:53 +04:00
|
|
|
def test_externals(self):
|
2018-07-06 03:45:27 +03:00
|
|
|
repo = self._load_fixture_and_fetch("externals.svndump")
|
2009-01-03 00:54:05 +03:00
|
|
|
|
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
|
|
|
"""
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertMultiLineEqual(ref0, repo[0][".hgsvnexternals"].data())
|
2019-05-22 12:32:09 +03:00
|
|
|
ref1 = (
|
|
|
|
"""[.]\n"""
|
|
|
|
""" # A comment, then an empty line, then a blank line\n"""
|
|
|
|
""" \n"""
|
|
|
|
""" ^/externals/project1 deps/project1\n"""
|
|
|
|
""" \n"""
|
|
|
|
""" -r2 ^/externals/project2@2 deps/project2\n"""
|
|
|
|
)
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertMultiLineEqual(ref1, repo[1][".hgsvnexternals"].data())
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2019-05-22 12:32:09 +03:00
|
|
|
ref2 = (
|
|
|
|
"""[.]\n"""
|
|
|
|
""" -r2 ^/externals/project2@2 deps/project2\n"""
|
|
|
|
"""[subdir]\n"""
|
|
|
|
""" ^/externals/project1 deps/project1\n"""
|
|
|
|
"""[subdir2]\n"""
|
|
|
|
""" ^/externals/project1 deps/project1\n"""
|
|
|
|
)
|
2018-07-06 03:45:27 +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
|
|
|
|
2019-05-22 12:32:09 +03:00
|
|
|
ref3 = (
|
|
|
|
"""[.]\n"""
|
|
|
|
""" -r2 ^/externals/project2@2 deps/project2\n"""
|
|
|
|
"""[subdir]\n"""
|
|
|
|
""" ^/externals/project1 deps/project1\n"""
|
|
|
|
)
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertEqual(ref3, repo[3][".hgsvnexternals"].data())
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2019-05-22 12:32:09 +03:00
|
|
|
ref4 = """[subdir]\n""" """ ^/externals/project1 deps/project1\n"""
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertEqual(ref4, repo[4][".hgsvnexternals"].data())
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2019-05-22 12:32:09 +03:00
|
|
|
ref5 = (
|
|
|
|
"""[.]\n"""
|
|
|
|
""" -r2 ^/externals/project2@2 deps/project2\n"""
|
|
|
|
"""[subdir2]\n"""
|
|
|
|
""" ^/externals/project1 deps/project1\n"""
|
|
|
|
)
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertEqual(ref5, repo[5][".hgsvnexternals"].data())
|
2009-01-15 08:17:12 +03:00
|
|
|
|
2019-05-22 12:32:09 +03:00
|
|
|
ref6 = """[.]\n""" """ -r2 ^/externals/project2@2 deps/project2\n"""
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertEqual(ref6, repo[6][".hgsvnexternals"].data())
|
2009-01-15 08:17:13 +03:00
|
|
|
|
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)
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertTrue(os.path.isdir(p), "missing: %s@%r" % (d, rev))
|
2009-04-23 01:24:58 +04:00
|
|
|
for d in nodeps:
|
|
|
|
p = os.path.join(repo.root, d)
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertTrue(not os.path.isdir(p), "unexpected: %s@%r" % (d, rev))
|
2009-04-23 01:24:58 +04:00
|
|
|
|
2010-02-26 16:50:22 +03:00
|
|
|
ui = self.ui()
|
2018-07-06 03:45:27 +03:00
|
|
|
repo = self._load_fixture_and_fetch("externals.svndump")
|
2009-04-23 01:24:58 +04:00
|
|
|
commands.update(ui, repo)
|
2018-07-06 03:45:27 +03:00
|
|
|
checkdeps(["deps/project1"], [], repo, 0)
|
|
|
|
checkdeps(["deps/project1", "deps/project2"], [], repo, 1)
|
|
|
|
checkdeps(
|
|
|
|
["subdir/deps/project1", "subdir2/deps/project1", "deps/project2"],
|
|
|
|
["deps/project1"],
|
|
|
|
repo,
|
|
|
|
2,
|
|
|
|
)
|
|
|
|
checkdeps(
|
|
|
|
["subdir/deps/project1", "deps/project2"],
|
|
|
|
["subdir2/deps/project1"],
|
|
|
|
repo,
|
|
|
|
3,
|
|
|
|
)
|
|
|
|
checkdeps(["subdir/deps/project1"], ["deps/project2"], repo, 4)
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2010-12-12 17:32:25 +03:00
|
|
|
def test_ignore(self):
|
2018-07-06 03:45:27 +03:00
|
|
|
repo = self._load_fixture_and_fetch("externals.svndump", externals="ignore")
|
2010-12-12 17:32:25 +03:00
|
|
|
for rev in repo:
|
|
|
|
ctx = repo[rev]
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertTrue(".hgsvnexternals" not in ctx)
|
|
|
|
self.assertTrue(".hgsub" not in ctx)
|
|
|
|
self.assertTrue(".hgsubstate" not in ctx)
|
2010-12-12 17:32:25 +03:00
|
|
|
|
2011-03-10 00:07:26 +03:00
|
|
|
|
2018-01-17 14:23:44 +03:00
|
|
|
class TestPushExternals(test_hgsubversion_util.TestBase):
|
2013-08-10 01:45:53 +04:00
|
|
|
stupid_mode_tests = True
|
2013-08-09 21:30:25 +04:00
|
|
|
obsolete_mode_tests = True
|
|
|
|
|
2013-08-10 01:45:53 +04:00
|
|
|
def test_push_externals(self):
|
2018-07-06 03:45:27 +03:00
|
|
|
self._load_fixture_and_fetch("pushexternals.svndump")
|
2009-01-03 00:54:05 +03:00
|
|
|
# Add a new reference on an existing and non-existing directory
|
|
|
|
changes = [
|
2018-07-06 03:45:27 +03:00
|
|
|
(
|
|
|
|
".hgsvnexternals",
|
|
|
|
".hgsvnexternals",
|
2019-05-22 12:32:09 +03:00
|
|
|
"""[dir]\n"""
|
|
|
|
""" ../externals/project2 deps/project2\n"""
|
|
|
|
"""[subdir1]\n"""
|
|
|
|
""" ../externals/project1 deps/project1\n"""
|
|
|
|
"""[subdir2]\n"""
|
|
|
|
""" ../externals/project2 deps/project2\n""",
|
2018-07-06 03:45:27 +03:00
|
|
|
),
|
|
|
|
("subdir1/a", "subdir1/a", "a"),
|
|
|
|
("subdir2/a", "subdir2/a", "a"),
|
|
|
|
]
|
2009-01-03 00:54:05 +03:00
|
|
|
self.commitchanges(changes)
|
2013-08-10 01:45:53 +04:00
|
|
|
self.pushrevisions()
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertchanges(changes, self.repo["tip"])
|
2009-01-03 00:54:05 +03:00
|
|
|
|
|
|
|
# Remove all references from one directory, add a new one
|
|
|
|
# to the other (test multiline entries)
|
|
|
|
changes = [
|
2018-07-06 03:45:27 +03:00
|
|
|
(
|
|
|
|
".hgsvnexternals",
|
|
|
|
".hgsvnexternals",
|
2019-05-22 12:32:09 +03:00
|
|
|
"""[subdir1]\n"""
|
|
|
|
""" ../externals/project1 deps/project1\n"""
|
|
|
|
""" ../externals/project2 deps/project2\n""",
|
2018-07-06 03:45:27 +03:00
|
|
|
),
|
2009-01-03 00:54:05 +03:00
|
|
|
# This removal used to trigger the parent directory removal
|
2018-07-06 03:45:27 +03:00
|
|
|
("subdir1/a", None, None),
|
|
|
|
]
|
2009-01-03 00:54:05 +03:00
|
|
|
self.commitchanges(changes)
|
2013-08-10 01:45:53 +04:00
|
|
|
self.pushrevisions()
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertchanges(changes, self.repo["tip"])
|
2009-01-03 00:54:05 +03:00
|
|
|
# Check subdir2/a is still there even if the externals were removed
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertTrue("subdir2/a" in self.repo["tip"])
|
|
|
|
self.assertTrue("subdir1/a" not in self.repo["tip"])
|
2009-01-03 00:54:05 +03:00
|
|
|
|
2009-01-03 00:54:06 +03:00
|
|
|
# Test externals removal
|
2018-07-06 03:45:27 +03:00
|
|
|
changes = [(".hgsvnexternals", None, None)]
|
2009-01-03 00:54:06 +03:00
|
|
|
self.commitchanges(changes)
|
2013-08-10 01:45:53 +04:00
|
|
|
self.pushrevisions()
|
2018-07-06 03:45:27 +03:00
|
|
|
self.assertchanges(changes, self.repo["tip"])
|
2009-01-03 00:54:06 +03:00
|
|
|
|
2018-01-17 14:23:44 +03:00
|
|
|
|
2018-07-06 03:45:27 +03:00
|
|
|
if __name__ == "__main__":
|
2018-01-17 14:23:44 +03:00
|
|
|
import silenttestrunner
|
|
|
|
|
2018-07-06 03:45:27 +03:00
|
|
|
silenttestrunner.main(__name__)
|