mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 01:39:21 +03:00
97755349f5
Summary: This is probably not the proper fix but we're getting rid of svn too. Remove tests coupled with named branches. Modified some critical tests (ex. "push") so they can still pass. Reviewed By: DurhamG Differential Revision: D14210968 fbshipit-source-id: 62e02179b0e4745db8f90f718613afad42d7376a
272 lines
9.0 KiB
Python
272 lines
9.0 KiB
Python
# no-check-code -- see T24862348
|
|
import os
|
|
import re
|
|
|
|
import test_hgsubversion_util
|
|
from edenscm.hgext import rebase
|
|
from edenscm.hgext.hgsubversion import compathacks, svncommands, util, verify, wrappers
|
|
from edenscm.mercurial import commands, context, hg, node, revlog, util as hgutil
|
|
|
|
|
|
expected_info_output = """URL: %(repourl)s/%(branch)s
|
|
Repository Root: %(repourl)s
|
|
Repository UUID: df2126f7-00ab-4d49-b42c-7e981dde0bcf
|
|
Revision: %(rev)s
|
|
Node Kind: directory
|
|
Last Changed Author: durin
|
|
Last Changed Rev: %(rev)s
|
|
Last Changed Date: %(date)s
|
|
"""
|
|
|
|
|
|
def repourl(repo_path):
|
|
return util.normalize_url(test_hgsubversion_util.fileurl(repo_path))
|
|
|
|
|
|
class UtilityTests(test_hgsubversion_util.TestBase):
|
|
stupid_mode_tests = True
|
|
|
|
def test_info_single(self, custom=False):
|
|
if custom:
|
|
subdir = None
|
|
config = {"hgsubversionbranch.default": "trunk/"}
|
|
else:
|
|
subdir = "trunk"
|
|
config = {}
|
|
repo, repo_path = self.load_and_fetch(
|
|
"two_heads.svndump", subdir=subdir, config=config
|
|
)
|
|
hg.update(self.repo, "tip")
|
|
u = self.ui()
|
|
u.pushbuffer()
|
|
svncommands.info(u, self.repo)
|
|
actual = u.popbuffer()
|
|
expected = expected_info_output % {
|
|
"date": "2008-10-08 01:39:29 +0000 (Wed, 08 Oct 2008)",
|
|
"repourl": repourl(repo_path),
|
|
"branch": "trunk",
|
|
"rev": 6,
|
|
}
|
|
self.assertMultiLineEqual(expected, actual)
|
|
|
|
def test_info_custom_single(self):
|
|
self.test_info_single(custom=True)
|
|
|
|
def test_missing_metadata(self):
|
|
self._load_fixture_and_fetch("two_heads.svndump")
|
|
os.remove(self.repo.sharedvfs.join("svn/branch_info"))
|
|
svncommands.updatemeta(self.ui(), self.repo, [])
|
|
|
|
test_hgsubversion_util.rmtree(self.repo.sharedvfs.join("svn"))
|
|
self.assertRaises(hgutil.Abort, self.repo.svnmeta)
|
|
self.assertRaises(
|
|
hgutil.Abort, svncommands.info, self.ui(), repo=self.repo, args=[]
|
|
)
|
|
self.assertRaises(
|
|
hgutil.Abort, svncommands.genignore, self.ui(), repo=self.repo, args=[]
|
|
)
|
|
|
|
os.remove(self.repo.localvfs.join("hgrc"))
|
|
self.assertRaises(hgutil.Abort, self.repo.svnmeta)
|
|
self.assertRaises(
|
|
hgutil.Abort, svncommands.info, self.ui(), repo=self.repo, args=[]
|
|
)
|
|
self.assertRaises(
|
|
hgutil.Abort, svncommands.genignore, self.ui(), repo=self.repo, args=[]
|
|
)
|
|
|
|
self.assertRaises(
|
|
hgutil.Abort, svncommands.rebuildmeta, self.ui(), repo=self.repo, args=[]
|
|
)
|
|
|
|
def test_rebase(self):
|
|
self._load_fixture_and_fetch("two_revs.svndump")
|
|
parents = (self.repo[0].node(), revlog.nullid)
|
|
|
|
def filectxfn(repo, memctx, path):
|
|
return compathacks.makememfilectx(
|
|
repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data="added",
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False,
|
|
)
|
|
|
|
lr = self.repo
|
|
ctx = context.memctx(
|
|
lr,
|
|
parents,
|
|
"automated test",
|
|
["added_bogus_file", "other_added_file"],
|
|
filectxfn,
|
|
"testy",
|
|
"2008-12-21 16:32:00 -0500",
|
|
{"branch": "localbranch"},
|
|
)
|
|
lr.commitctx(ctx)
|
|
self.assertEqual(self.repo["tip"].branch(), "localbranch")
|
|
beforerebasehash = self.repo["tip"].node()
|
|
hg.update(self.repo, "tip")
|
|
wrappers.rebase(rebase.rebase, self.ui(), self.repo, svn=True)
|
|
self.assertEqual(self.repo["tip"].branch(), "localbranch")
|
|
self.assertEqual(self.repo["tip"].parents()[0].parents()[0], self.repo[0])
|
|
self.assertNotEqual(beforerebasehash, self.repo["tip"].node())
|
|
|
|
def test_genignore(self, layout="auto"):
|
|
""" Test generation of .hgignore file. """
|
|
if layout == "custom":
|
|
config = {"hgsubversionbranch.default": "trunk"}
|
|
else:
|
|
config = {}
|
|
repo = self._load_fixture_and_fetch(
|
|
"ignores.svndump", layout=layout, noupdate=False, config=config
|
|
)
|
|
u = self.ui()
|
|
u.pushbuffer()
|
|
svncommands.genignore(u, repo, self.wc_path)
|
|
self.assertMultiLineEqual(
|
|
open(os.path.join(self.wc_path, ".hgignore")).read(),
|
|
".hgignore\nsyntax:glob\nblah\notherblah\nbaz/magic\n",
|
|
)
|
|
|
|
def test_genignore_single(self):
|
|
self.test_genignore(layout="single")
|
|
|
|
def test_genignore_custom(self):
|
|
self.test_genignore(layout="custom")
|
|
|
|
def test_list_authors(self):
|
|
repo_path = self.load_svndump("replace_trunk_with_branch.svndump")
|
|
u = self.ui()
|
|
u.pushbuffer()
|
|
svncommands.listauthors(
|
|
u, args=[test_hgsubversion_util.fileurl(repo_path)], authors=None
|
|
)
|
|
actual = u.popbuffer()
|
|
self.assertMultiLineEqual(actual, "Augie\nevil\n")
|
|
|
|
def test_list_authors_map(self):
|
|
repo_path = self.load_svndump("replace_trunk_with_branch.svndump")
|
|
author_path = os.path.join(repo_path, "authors")
|
|
svncommands.listauthors(
|
|
self.ui(),
|
|
args=[test_hgsubversion_util.fileurl(repo_path)],
|
|
authors=author_path,
|
|
)
|
|
self.assertMultiLineEqual(open(author_path).read(), "Augie=\nevil=\n")
|
|
|
|
def test_svnverify(self):
|
|
repo, repo_path = self.load_and_fetch("binaryfiles.svndump", noupdate=False)
|
|
ret = verify.verify(self.ui(), repo, [], rev=1)
|
|
self.assertEqual(0, ret)
|
|
repo_path = self.load_svndump("binaryfiles-broken.svndump")
|
|
u = self.ui()
|
|
u.pushbuffer()
|
|
ret = verify.verify(u, repo, [test_hgsubversion_util.fileurl(repo_path)], rev=1)
|
|
output = u.popbuffer()
|
|
self.assertEqual(1, ret)
|
|
output = re.sub(r"file://\S+", "file://", output)
|
|
self.assertMultiLineEqual(
|
|
"""\
|
|
verifying d51f46a715a1 against file://
|
|
difference in: binary2
|
|
unexpected file: binary1
|
|
missing file: binary3
|
|
""",
|
|
output,
|
|
)
|
|
|
|
def test_corruption(self):
|
|
SUCCESS = 0
|
|
FAILURE = 1
|
|
|
|
repo, repo_path = self.load_and_fetch(
|
|
"correct.svndump", layout="single", subdir=""
|
|
)
|
|
|
|
ui = self.ui()
|
|
|
|
self.assertEqual(SUCCESS, verify.verify(ui, self.repo, rev="tip"))
|
|
|
|
corrupt_source = test_hgsubversion_util.fileurl(
|
|
self.load_svndump("corrupt.svndump")
|
|
)
|
|
|
|
repo.ui.setconfig("paths", "default", corrupt_source)
|
|
|
|
ui.pushbuffer()
|
|
code = verify.verify(ui, repo, rev="tip")
|
|
actual = ui.popbuffer()
|
|
|
|
actual = actual.replace(corrupt_source, "$REPO")
|
|
actual = set(actual.splitlines())
|
|
|
|
expected = set(
|
|
[
|
|
"verifying 78e965230a13 against $REPO@1",
|
|
"missing file: missing-file",
|
|
"wrong flags for: executable-file",
|
|
"wrong flags for: symlink",
|
|
"wrong flags for: regular-file",
|
|
"difference in: another-regular-file",
|
|
"difference in: regular-file",
|
|
"unexpected file: empty-file",
|
|
]
|
|
)
|
|
|
|
self.assertEqual((FAILURE, expected), (code, actual))
|
|
|
|
def test_svnrebuildmeta(self):
|
|
otherpath = self.load_svndump("binaryfiles-broken.svndump")
|
|
otherurl = test_hgsubversion_util.fileurl(otherpath)
|
|
self.load_and_fetch("replace_trunk_with_branch.svndump")
|
|
# rebuildmeta with original repo
|
|
svncommands.rebuildmeta(self.ui(), repo=self.repo, args=[])
|
|
# rebuildmeta with unrelated repo
|
|
self.assertRaises(
|
|
hgutil.Abort,
|
|
svncommands.rebuildmeta,
|
|
self.ui(),
|
|
repo=self.repo,
|
|
args=[otherurl],
|
|
)
|
|
# rebuildmeta --unsafe-skip-uuid-check with unrelated repo
|
|
svncommands.rebuildmeta(
|
|
self.ui(), repo=self.repo, args=[otherurl], unsafe_skip_uuid_check=True
|
|
)
|
|
|
|
def test_svntruncatemeta(self):
|
|
repo, repo_path = self.load_and_fetch("two_heads.svndump", config={})
|
|
orig_tip_rev = len(repo) - 1
|
|
orig_tip_svn_rev = util.getsvnrevnum(repo["tip"])
|
|
|
|
orig_tip = repo["tip"]
|
|
|
|
# Create a new commit that has the same svnrev as the old one
|
|
new_ctx = context.metadataonlyctx(
|
|
repo, orig_tip, text="foo", extra=orig_tip.extra()
|
|
)
|
|
new_tip = repo[repo.commitctx(new_ctx)]
|
|
|
|
# Before the truncate, the svnrev points at the old commit
|
|
self.assertEqual(
|
|
list(repo.revs("svnrev(%s)" % orig_tip_svn_rev)), [orig_tip_rev]
|
|
)
|
|
|
|
svncommands.truncatemeta(self.ui(), repo=self.repo, args=[])
|
|
repo.invalidate()
|
|
|
|
# After the truncate, the svnrev points at the new commit
|
|
new_tip_rev = new_tip.rev()
|
|
self.assertEqual(
|
|
list(repo.revs("svnrev(%s)" % orig_tip_svn_rev)), [new_tip_rev]
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import silenttestrunner
|
|
|
|
silenttestrunner.main(__name__)
|