# no-check-code -- see T24862348 # @nolint from __future__ import absolute_import import sys import test_hgsubversion_util class TestPushRenames(test_hgsubversion_util.TestBase): obsolete_mode_tests = True stupid_mode_tests = True def setUp(self): test_hgsubversion_util.TestBase.setUp(self) self.repo_path = self.load_and_fetch("pushrenames.svndump")[1] def _debug_print_copies(self, ctx): w = sys.stderr.write for f in ctx.files(): if f not in ctx: w("R %s\n" % f) else: w("U %s %r\n" % (f, ctx[f].data())) if ctx[f].renamed(): w("%s copied from %s\n" % (f, ctx[f].renamed()[0])) def test_push_renames(self): changes = [ # Regular copy of a single file ("a", "a2", None), # Copy and update of target ("a", "a3", "aa\n"), # Regular move of a single file ("b", "b2", None), ("b", None, None), # Regular move and update of target ("c", "c2", "c\nc\n"), ("c", None, None), # Copy and update of source and targets ("d", "d2", "d\nd2\n"), ("d", "d", "d\nd\n"), # Double copy and removal (aka copy and move) ("e", "e2", "e\ne2\n"), ("e", "e3", "e\ne3\n"), ("e", None, None), ] self.commitchanges(changes) self.pushrevisions() tip = self.repo["tip"] # self._debug_print_copies(tip) self.assertchanges(changes, tip) def test_push_rename_with_space(self): changes = [ ( "random/dir with space/file with space", "random/dir with space/file with space", "file contents", ) ] self.commitchanges(changes) changes = [ ( "random/dir with space/file with space", "random2/dir with space/file with space", None, ), ("random/dir with space/file with space", None, None), ] self.commitchanges(changes) self.pushrevisions() self.assertEqual( sorted(self.repo["tip"].manifest().keys()), ["a", "b", "c", "d", "e", "random2/dir with space/file with space"], ) def test_push_rename_tree(self): changes = [ ("geek/alpha", "geek/alpha", "content"), ("geek/beta", "geek/beta", "content"), ("geek/delta", "geek/delta", "content"), ("geek/gamma", "geek/gamma", "content"), ("geek/later/pi", "geek/later/pi", "content geek/later/pi"), ("geek/later/rho", "geek/later/rho", "content geek/later/rho"), ("geek/other/blah", "geek/other/blah", "content geek/other/blah"), ( "geek/other/another/layer", "geek/other/another/layer", "content deep file", ), ] self.commitchanges(changes) self.pushrevisions() self.assertchanges(changes, self.repo["tip"]) changes = [ # rename (copy + remove) all of geek to greek ("geek/alpha", "greek/alpha", None), ("geek/beta", "greek/beta", None), ("geek/delta", "greek/delta", None), ("geek/gamma", "greek/gamma", None), ("geek/later/pi", "greek/later/pi", None), ("geek/later/rho", "greek/later/rho", None), ("geek/other/blah", "greek/other/blah", None), ("geek/other/another/layer", "greek/other/another/layer", None), ("geek/alpha", None, None), ("geek/beta", None, None), ("geek/delta", None, None), ("geek/gamma", None, None), ("geek/later/pi", None, None), ("geek/later/rho", None, None), ("geek/other/blah", None, None), ("geek/other/another/layer", None, None), ] self.commitchanges(changes) self.pushrevisions() assert reduce( lambda x, y: x and y, ( "geek" not in f for f in test_hgsubversion_util.svnls(self.repo_path, "trunk") ), ), ( "This failure means rename of an entire tree is broken." " There is a print on the preceding line commented out " "that should help you." ) if __name__ == "__main__": import silenttestrunner silenttestrunner.main(__name__)