def __call__(self, oldrevid, newrevid, new_parents): """Replay a commit by simply commiting the same snapshot with different parents. :param oldrevid: Revision id of the revision to copy. :param newrevid: Revision id of the revision to create. :param new_parents: Revision ids of the new parent revisions. """ assert isinstance(new_parents, tuple), "CommitBuilderRevisionRewriter: Expected tuple for %r" % new_parents mutter('creating copy %r of %r with new parents %r' % (newrevid, oldrevid, new_parents)) oldrev = self.repository.get_revision(oldrevid) revprops = dict(oldrev.properties) revprops[REVPROP_REBASE_OF] = oldrevid builder = self.repository.get_commit_builder(branch=None, parents=new_parents, config=Config(), committer=oldrev.committer, timestamp=oldrev.timestamp, timezone=oldrev.timezone, revprops=revprops, revision_id=newrevid) try: # Check what new_ie.file_id should be # use old and new parent inventories to generate new_id map nonghost_oldparents = self._get_present_revisions(oldrev.parent_ids) nonghost_newparents = self._get_present_revisions(new_parents) oldtree = self.repository.revision_tree(oldrevid) if self.map_ids: fileid_map = map_file_ids(self.repository, nonghost_oldparents, nonghost_newparents) mappedtree = MapTree(oldtree, fileid_map) else: mappedtree = oldtree old_parent_invs = list(self.repository.iter_inventories(nonghost_oldparents)) new_parent_invs = list(self.repository.iter_inventories(nonghost_newparents)) pb = ui.ui_factory.nested_progress_bar() try: for i, (path, old_ie) in enumerate(mappedtree.inventory.iter_entries()): pb.update('upgrading file', i, len(mappedtree.inventory)) ie = self._process_file(old_ie, oldtree, oldrevid, newrevid, old_parent_invs, new_parent_invs, path) builder.record_entry_contents(ie, new_parent_invs, path, mappedtree, mappedtree.path_content_summary(path)) finally: pb.finished() builder.finish_inventory() return builder.commit(oldrev.message) except: builder.abort() raise
class EmptyMapTreeTests(TestCaseWithTransport): def setUp(self): super(EmptyMapTreeTests, self).setUp() tree = self.make_branch_and_tree('branch') self.oldtree = tree def test_has_filename(self): self.oldtree.lock_write() builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.oldtree.unlock() self.assertTrue(self.maptree.has_filename('foo')) self.assertTrue(self.oldtree.has_filename('foo')) self.assertFalse(self.maptree.has_filename('bar')) def test_path2id(self): self.oldtree.lock_write() self.addCleanup(self.oldtree.unlock) builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.build(['bar']) builder.build(['bla']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.assertEquals(self.oldtree.path2id("foo"), self.maptree.path2id("foo")) def test_id2path(self): self.oldtree.lock_write() self.addCleanup(self.oldtree.unlock) builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.build(['bar']) builder.build(['bla']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.assertEquals("foo", self.maptree.id2path(self.maptree.path2id("foo"))) def test_has_id(self): self.oldtree.lock_write() self.addCleanup(self.oldtree.unlock) builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.build(['bar']) builder.build(['bla']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.assertTrue(self.maptree.has_id( self.maptree.path2id("foo"))) self.assertFalse(self.maptree.has_id("bar"))
def test_has_filename(self): self.oldtree.lock_write() builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.oldtree.unlock() self.assertTrue(self.maptree.has_filename('foo')) self.assertTrue(self.oldtree.has_filename('foo')) self.assertFalse(self.maptree.has_filename('bar'))
def test_id2path(self): self.oldtree.lock_write() self.addCleanup(self.oldtree.unlock) builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.build(['bar']) builder.build(['bla']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.assertEquals("foo", self.maptree.id2path(self.maptree.path2id("foo")))
def test_has_id(self): self.oldtree.lock_write() self.addCleanup(self.oldtree.unlock) builder = TreeBuilder() builder.start_tree(self.oldtree) builder.build(['foo']) builder.build(['bar']) builder.build(['bla']) builder.finish_tree() self.maptree = MapTree(self.oldtree, {}) self.assertTrue(self.maptree.has_id( self.maptree.path2id("foo"))) self.assertFalse(self.maptree.has_id("bar"))