def test_shared_import_continue_branch(self): oldrepos = Repository.open(self.repos_url) convert_repository(oldrepos, "e", TrunkLayout(0), create_shared_repo=True) mapping = oldrepos.get_mapping() dc = self.get_commit_editor() trunk = dc.open_dir("trunk") trunk.open_file("trunk/file").modify() dc.close() self.assertEqual( Repository.open(self.repos_url).generate_revision_id( 2, u"trunk", mapping), Branch.open("e/trunk").last_revision()) convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True) self.assertEqual( Repository.open(self.repos_url).generate_revision_id( 3, u"trunk", mapping), Branch.open("e/trunk").last_revision())
def test_find_branches_between_moved_nobranch(self): repos_url = self.make_client("a", "dc") self.build_tree({ 'dc/tmp/nested/foobar': None, 'dc/tmp/nested/branches/brancha': None, 'dc/tmp/nested/branches/branchab': None, 'dc/tmp/nested/branches/brancha/data': "data", "dc/tmp/nested/branches/branchab/data": "data" }) self.client_add("dc/tmp") self.client_commit("dc", "My Message") self.client_copy("dc/tmp/nested", "dc/t2") self.client_commit("dc", "My Message 2") repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(1)) self.assertEqual([("t2/branches/brancha", 2, True), ("t2/branches/branchab", 2, True)], list( find_branches_between(repos._log, repos.transport, TrunkLayout(1), to_revnum=2, from_revnum=2)))
def test_find_branches_between_removed(self): repos_url = self.make_svn_repository("a") repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(0)) dc = self.get_commit_editor(repos_url) trunk = dc.add_dir("trunk") trunk.add_file("trunk/foo").modify(b"data") dc.close() dc = self.get_commit_editor(repos_url) dc.delete("trunk") dc.close() self.assertEqual([("trunk", 1, True)], list( find_branches_between(repos._log, repos.transport, TrunkLayout(0), from_revnum=2, to_revnum=0))) self.assertEqual([("trunk", 1, True)], list( find_branches_between(repos._log, repos.transport, TrunkLayout(0), from_revnum=1, to_revnum=0)))
class TrunkVariableLayoutTests(TestCase): def setUp(self): TestCase.setUp(self) self.layout = TrunkLayout(None) def test_is_trunk_branch(self): self.assertEquals(True, self.layout.is_branch(u"foo/bar/trunk")) self.assertEquals(True, self.layout.is_branch(u"trunk")) def test_is_foo_branch(self): self.assertEquals(False, self.layout.is_branch(u"foo")) def test_is_branch_parent_trunk(self): self.assertEquals(True, self.layout.is_branch_parent(u"foo/bar/trunk")) def test_is_branch_parent_lev2(self): self.assertEquals(True, self.layout.is_branch_parent(u"foo/bar")) def test_is_branch_parent_lev1(self): self.assertEquals(True, self.layout.is_branch_parent(u"foo")) def test_is_branch_parent_lev3(self): self.assertEquals(True, self.layout.is_branch_parent(u"foo/bar/blie")) def test_is_branch_parent_branches(self): self.assertEquals(True, self.layout.is_branch_parent(u"foo/bar/branches")) def test_is_branch_parent_tags(self): self.assertEquals(True, self.layout.is_branch_parent(u"bar/tags")) self.assertEquals(True, self.layout.is_branch_parent(u"foo/bar/tags"))
def test_shared_import_continue_with_wt(self): convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), working_trees=True) convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), working_trees=True)
def test_find_branches_between_trunk_empty(self): repos_url = self.make_svn_repository("a") repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(0)) self.assertEqual([], list( find_branches_between(repos._log, repos.transport, TrunkLayout(0), to_revnum=0, from_revnum=0)))
def test_history_all(self): repos_url = self.make_svn_repository("a") dc = self.get_commit_editor(repos_url) trunk = dc.add_dir("trunk") trunk.add_file("trunk/file").modify(b"data") foo = dc.add_dir("foo") foo.add_file("foo/file").modify(b"data") dc.close() repos = Repository.open(repos_url) repos.set_layout(TrunkLayout()) self.assertEqual(1, len(set(repos.all_revision_ids(TrunkLayout()))))
def test_fetch_filebranch(self): dc = self.get_commit_editor() bs = dc.open_dir("branches") bs.add_file("branches/somebranch").modify('data') dc.close() oldrepos = Repository.open(self.repos_url) convert_repository(oldrepos, "e", TrunkLayout(0)) newrepos = Repository.open("e") oldrepos.set_layout(TrunkLayout(0)) self.assertFalse( newrepos.has_revision( oldrepos.generate_revision_id(2, u"branches/somebranch", oldrepos.get_mapping())))
def test_branch_log_specific_ignore(self): repos_url = self.make_client("a", "dc") self.build_tree({'dc/branches': None}) self.client_add("dc/branches") self.build_tree({ 'dc/branches/brancha': None, 'dc/branches/branchab': None, 'dc/branches/brancha/data': "data", "dc/branches/branchab/data": "data" }) self.client_add("dc/branches/brancha") self.client_commit("dc", "My Message") self.client_add("dc/branches/branchab") self.client_commit("dc", "My Message2") repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(0)) self.assertEqual( 1, len( list( repos._revmeta_provider.iter_reverse_branch_changes( "branches/brancha", 2, 0))))
def test_all_revs(self): repos_url = self.make_svn_repository("a") dc = self.get_commit_editor(repos_url) trunk = dc.add_dir("trunk") trunk.add_file("trunk/file").modify(b"data") foo = dc.add_dir("foo") foo.add_file("foo/file").modify(b"data") dc.close() dc = self.get_commit_editor(repos_url) branches = dc.add_dir("branches") somebranch = branches.add_dir("branches/somebranch") somebranch.add_file("branches/somebranch/somefile").modify(b"data") dc.close() dc = self.get_commit_editor(repos_url) branches = dc.open_dir("branches") branches.delete("branches/somebranch") dc.close() repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(0)) mapping = repos.get_mapping() self.assertEqual( set([ repos.generate_revision_id(1, "trunk", mapping), repos.generate_revision_id(2, "branches/somebranch", mapping) ]), set(repos.all_revision_ids()))
def test_fetch_file_from_non_branch(self): repos_url = self.make_svn_repository('d') dc = self.get_commit_editor(repos_url) old_trunk = dc.add_dir("old-trunk") lib = old_trunk.add_dir("old-trunk/lib") lib.add_file("old-trunk/lib/file").modify(b"data") dc.close() dc = self.get_commit_editor(repos_url) trunk = dc.add_dir("trunk") lib = trunk.add_dir("trunk/lib") lib.add_file("trunk/lib/file", "old-trunk/lib/file") dc.close() oldrepos = Repository.open(repos_url) oldrepos.set_layout(TrunkLayout(0)) dir = ControlDir.create("f") newrepos = dir.create_repository() oldrepos.copy_content_into(newrepos) mapping = oldrepos.get_mapping() branch = Branch.open("%s/trunk" % repos_url) self.assertEquals(branch.mapping, mapping) self.assertEqual( (1, oldrepos.generate_revision_id(2, "trunk", mapping)), branch.last_revision_info())
def test_mainline_revision_nested_deleted(self): repos_url = self.make_svn_repository('d') dc = self.get_commit_editor(repos_url) py = dc.add_dir("py") trunk = py.add_dir("py/trunk") adir = trunk.add_dir("py/trunk/adir") afile = adir.add_file("py/trunk/adir/file").modify(b"data") adir.add_dir("py/trunk/adir/stationary") dc.close() dc = self.get_commit_editor(repos_url) dc.add_dir("de", "py") dc.close() dc = self.get_commit_editor(repos_url) de = dc.open_dir("de") trunk = de.open_dir("de/trunk") trunk.delete("de/trunk/adir") dc.close() repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(1)) mapping = repos.get_mapping() revmeta3 = repos._revmeta_provider.get_revision("de/trunk", 3) self.assertEquals( repos.generate_revision_id(1, "py/trunk", mapping), revmeta3.get_lhs_parent_revid( mapping, revmeta3.get_lhs_parent_revmeta(mapping)))
def test_copy(self): self.repos.set_layout(TrunkLayout(0)) self.mapping = self.repos.get_mapping() dc = self.get_commit_editor(self.repos_url) dc.add_dir("trunk") dc.close() dc = self.get_commit_editor(self.repos_url) trunk = dc.open_dir("trunk") trunk.add_file("trunk/file").modify(b"data") dc.close() dc = self.get_commit_editor(self.repos_url) trunk = dc.open_dir("trunk") trunk.add_file("trunk/bar", "trunk/file", 2) dc.close() self.assertEqual( { u"": (self.mapping.generate_file_id( (self.repos.uuid, u"trunk", 1), u""), self.repos.generate_revision_id(1, u"trunk", self.mapping), None), u"bar": (self.mapping.generate_file_id( (self.repos.uuid, u"trunk", 3), u"bar"), self.repos.generate_revision_id(3, u"trunk", self.mapping), (self.repos.uuid, u"trunk", 3)), u"file": (self.mapping.generate_file_id( (self.repos.uuid, u"trunk", 2), u"file"), self.repos.generate_revision_id( 2, u"trunk", self.mapping), None) }, self.get_map(u"trunk", 3, self.mapping))
def test_change_updates(self): self.repos.set_layout(TrunkLayout(0)) self.mapping = self.repos.get_mapping() dc = self.get_commit_editor(self.repos_url) dc.add_dir("trunk") dc.close() dc = self.get_commit_editor(self.repos_url) dc.open_dir("trunk").add_file("trunk/file").modify("data") dc.close() dc = self.get_commit_editor(self.repos_url) dc.open_dir("trunk").open_file("trunk/file").modify("otherdata") dc.close() self.assertEqual( { u"": (self.mapping.generate_file_id( (self.repos.uuid, u"trunk", 1), u""), self.repos.generate_revision_id(1, u"trunk", self.mapping), None), u"file": (self.mapping.generate_file_id( (self.repos.uuid, u"trunk", 2), u"file"), self.repos.generate_revision_id( 3, u"trunk", self.mapping), None) }, self.get_map(u"trunk", 3, self.mapping))
def test_shared_import(self): convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True) self.assertTrue(Repository.open("e").is_shared())
def test_notshared_import(self): convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=False) self.assertRaises(NotBranchError, Repository.open, "e")
def test_simple(self): convert_repository(Repository.open(self.repos_url), os.path.join(self.test_dir, "e"), TrunkLayout(0)) self.assertTrue( os.path.isdir(os.path.join(self.test_dir, "e", "trunk"))) self.assertTrue( os.path.isdir( os.path.join(self.test_dir, "e", "branches", "abranch")))
def test_list_branches_trunk(self): repos_url = self.make_svn_repository("d") x = ControlDir.open(repos_url) x.open_repository().store_layout(TrunkLayout()) b1 = x.create_branch("foo") b2 = x.create_branch("bar") self.assertEquals(set([b1.base, b2.base]), set([b.base for b in x.list_branches()]))
def test_shared_import_remove_nokeep(self): convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True) dc = self.get_commit_editor() dc.delete("trunk") dc.close() self.assertTrue(os.path.exists("e/trunk")) convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True) self.assertFalse(os.path.exists("e/trunk"))
def test_convert_simple(self): oldrepos = Repository.open(self.repos_url) convert_repository(oldrepos, "e", TrunkLayout(1), prefix=u"base", create_shared_repo=True) self.assertTrue(os.path.exists("e/trunk")) self.assertTrue(os.path.exists("e/branches/abranch")) self.assertFalse(os.path.exists("e/base"))
def test_shared_import_continue_remove(self): convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True) dc = self.get_commit_editor() dc.delete("trunk") dc.close() dc = self.get_commit_editor() trunk = dc.add_dir("trunk") trunk.add_file("trunk/file").modify() dc.close() convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True)
def test_shared_import_continue(self): dir = ControlDir.create("e") dir.create_repository(shared=True) convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True) self.assertTrue(Repository.open("e").is_shared())
def test_sets_parent_urls(self): convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), all=False, create_shared_repo=True) self.assertEquals(self.repos_url + "/trunk", Branch.open("e/trunk").get_parent()) self.assertEquals(self.repos_url + "/branches/abranch", Branch.open("e/branches/abranch").get_parent())
def test_trunk_layout_movefrom_non_branch(self): browser = self.get_browser(None, 2, 0, TrunkLayout(), { 1: { u"old-trunk": ('A', None, -1, NODE_DIR)}, 2: { u"trunk": ('A', u"old-trunk", 1, NODE_DIR)}}) rev1 = next(browser) self.assertEquals(('revision', FakeRevision(u'trunk',2)), rev1) rev2 = next(browser) self.assertEquals(('revision', FakeRevision(u'old-trunk',1)), rev2) self.assertTrue(rev1[1]._lhs_parent_known) self.assertTrue(rev2[1]._lhs_parent_known) self.assertRaises(StopIteration, next, browser)
def test_trunk_layout_simple(self): browser = self.get_browser(None, 2, 0, TrunkLayout(), { 1: { u"trunk": ('A', None, -1, NODE_DIR)}, 2: { u"trunk": ('M', None, -1, NODE_DIR)}}) rev1 = browser.next() self.assertEquals(('revision', FakeRevision(u'trunk',2)), rev1) rev2 = browser.next() self.assertEquals(('revision', FakeRevision(u'trunk',1)), rev2) self.assertTrue(rev1[1]._lhs_parent_known) self.assertTrue(rev2[1]._lhs_parent_known) self.assertRaises(StopIteration, browser.next)
def test_shared_import_old_repos_fails(self): dir = ControlDir.create("e", format=format_registry.make_controldir('knit')) dir.create_repository(shared=True) self.assertRaises( IncompatibleRepositories, lambda: convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True, working_trees=False))
def test_shared_import_without_wt(self): dir = ControlDir.create("e") dir.create_repository(shared=True) convert_repository(Repository.open(self.repos_url), "e", TrunkLayout(0), create_shared_repo=True, working_trees=False) self.assertFalse( os.path.isfile(os.path.join(self.test_dir, "e", "trunk", "file")))
def test_trunk_layout_copiedbranch(self): browser = self.get_browser(None, 2, 0, TrunkLayout(), {1: {u"trunk": ('A', None, -1, NODE_DIR)}, 2: {u"branches": ('A', None, -1, NODE_DIR), u"branches/foo": ('A', u"trunk", 1, NODE_DIR)}}) rev1 = next(browser) self.assertEquals(('revision', FakeRevision(u'branches/foo', 2)), rev1) rev2 = next(browser) self.assertEquals(('revision', FakeRevision(u'trunk', 1)), rev2) self.assertTrue(rev1[1]._lhs_parent_known) self.assertTrue(rev2[1]._lhs_parent_known) self.assertRaises(StopIteration, browser.next)
def test_trunk_layout_movefrom_oldbranch(self): browser = self.get_browser(None, 3, 0, TrunkLayout(), { 1: { u"old-trunk": ('A', None, -1, NODE_DIR)}, 2: { u"old-trunk": ('D', None, -1, NODE_DIR)}, 3: { u"trunk": ('A', u"old-trunk", 1, NODE_DIR)}}) rev1 = browser.next() self.assertEquals(('revision', FakeRevision(u'trunk',3)), rev1) self.assertEquals(('delete', (u"old-trunk", 2)), browser.next()) rev2 = browser.next() self.assertEquals(('revision', FakeRevision(u'old-trunk',1)), rev2) self.assertTrue(rev1[1]._lhs_parent_known) self.assertTrue(rev2[1]._lhs_parent_known) self.assertRaises(StopIteration, browser.next)
def test_follow_branch_switched_parents(self): repos_url = self.make_svn_repository('a') cb = self.get_commit_editor(repos_url) pykleur = cb.add_dir("pykleur") trunk = pykleur.add_dir("pykleur/trunk") nested = trunk.add_dir("pykleur/trunk/pykleur") cb.close() #1 cb = self.get_commit_editor(repos_url) pykleur = cb.open_dir("pykleur") trunk = pykleur.open_dir("pykleur/trunk") nested = trunk.open_dir("pykleur/trunk/pykleur") afile = nested.add_file("pykleur/trunk/pykleur/afile") afile.modify(b"contents") afile.close() cb.close() #2 cb = self.get_commit_editor(repos_url) cb.add_dir("pygments", "pykleur", 1) cb.delete("pykleur") cb.close() #3 repos = Repository.open(repos_url) repos.set_layout(TrunkLayout(1)) results = repos._revmeta_provider.iter_reverse_branch_changes( "pygments/trunk", 3, 0) # Results differ per Subversion version, yay # For <= 1.4: if ra.version()[1] <= 4: self.assertRevmetaLogEquals( [('pygments/trunk', { 'pygments': (u'A', 'pykleur', 1, NODE_DIR), 'pygments/trunk': (u'R', 'pykleur/trunk', 2, NODE_DIR), 'pykleur': (u'D', None, -1, NODE_DIR) }, 3), ('pykleur/trunk', { 'pykleur/trunk/pykleur/afile': (u'A', None, -1, NODE_DIR) }, 2), ('pykleur/trunk', { 'pykleur': (u'A', None, -1, NODE_DIR), 'pykleur/trunk': (u'A', None, -1, NODE_DIR), 'pykleur/trunk/pykleur': (u'A', None, -1, NODE_DIR) }, 1)], results) else: self.assertRevmetaLogEquals([('pykleur/trunk', { 'pykleur': (u'A', None, -1, NODE_DIR), 'pykleur/trunk': (u'A', None, -1, NODE_DIR), 'pykleur/trunk/pykleur': (u'A', None, -1, NODE_DIR) }, 1)], results)