def create_upgrade_plan(repository, generate_rebase_map, determine_new_revid, revision_id=None, allow_changes=False): """Generate a rebase plan for upgrading revisions. :param repository: Repository to do upgrade in :param foreign_repository: Subversion repository to fetch new revisions from. :param new_mapping: New mapping to use. :param revision_id: Revision to upgrade (None for all revisions in repository.) :param allow_changes: Whether an upgrade is allowed to change the contents of revisions. :return: Tuple with a rebase plan and map of renamed revisions. """ graph = repository.get_graph() upgrade_map = generate_rebase_map(revision_id) if not allow_changes: for oldrevid, newrevid in upgrade_map.iteritems(): oldrev = repository.get_revision(oldrevid) newrev = repository.get_revision(newrevid) check_revision_changed(oldrev, newrev) if revision_id is None: heads = repository.all_revision_ids() else: heads = [revision_id] plan = generate_transpose_plan(graph.iter_ancestry(heads), upgrade_map, graph, determine_new_revid) def remove_parents((oldrevid, (newrevid, parents))): return (oldrevid, newrevid)
def test_generate_transpose_plan(self): wt = self.make_branch_and_tree('.') b = wt.branch file('hello', 'w').write('hello world') wt.add('hello') wt.commit(message='add hello', rev_id="bla") file('hello', 'w').write('world') wt.commit(message='change hello', rev_id="bloe") wt.set_last_revision("bla") b.generate_revision_history("bla") file('hello', 'w').write('world') wt.commit(message='change hello', rev_id="bla2") file('hello', 'w').write('universe') wt.commit(message='change hello again', rev_id="bla3") wt.set_last_revision("bla") b.generate_revision_history("bla") file('hello', 'w').write('somebar') wt.commit(message='change hello yet again', rev_id="blie") wt.set_last_revision(NULL_REVISION) b.generate_revision_history(NULL_REVISION) wt.add('hello') wt.commit(message='add hello', rev_id="lala") b.repository.lock_read() graph = b.repository.get_graph() self.assertEquals({ 'blie': ('newblie', ('lala',))}, generate_transpose_plan(graph.iter_ancestry(["blie"]), {"bla": "lala"}, graph, lambda y, _: "new"+y)) self.assertEquals({ 'bla2': ('newbla2', ('lala',)), 'bla3': ('newbla3', ('newbla2',)), 'blie': ('newblie', ('lala',)), 'bloe': ('newbloe', ('lala',))}, generate_transpose_plan(graph.iter_ancestry(b.repository._all_revision_ids()), {"bla": "lala"}, graph, lambda y, _: "new"+y)) b.repository.unlock()
def test_generate_transpose_plan_one(self): graph = Graph(DictParentsProvider({"bla": ("bloe",), "bloe": (), "lala": ()})) self.assertEquals({"bla": ("newbla", ("lala",))}, generate_transpose_plan(graph.iter_ancestry(["bla", "bloe"]), {"bloe": "lala"}, graph, lambda y, _: "new"+y))