Rev 399: handle incremental calls to svn-upgrade nicely. in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev

Jelmer Vernooij jelmer at samba.org
Mon Jan 15 03:15:43 GMT 2007


------------------------------------------------------------
revno: 399
revision-id: jelmer at samba.org-20070115031521-e4ejwccyzei1kntf
parent: jelmer at samba.org-20070115003937-mxyoa82zy1t616pi
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-15 04:15:21 +0100
message:
  handle incremental calls to svn-upgrade nicely.
modified:
  TODO                           todo-20060729211917-2kpobww0zyvvo0j2-1
  tests/test_upgrade.py          test_upgrade.py-20070106170128-64zt3eqggg4tng1c-1
  upgrade.py                     upgrade.py-20070106192108-0rakplee2lzah4gs-1
=== modified file 'TODO'
--- a/TODO	2007-01-14 04:11:21 +0000
+++ b/TODO	2007-01-15 03:15:21 +0000
@@ -7,7 +7,7 @@
 - when committing specific files in a lightweight checkout, make sure to 
   commit the right file id changes for "."
 - custom implementation of WorkingTree.revert()
-- don't update to the same revnum when opening working tree
+- don't update all entries to the same revnum when opening working tree
 - avoid extra connect in logwalker?
 - get rid of use of `svn ls' in logwalker
 - make ListBranchingScheme() support wildcards

=== modified file 'tests/test_upgrade.py'
--- a/tests/test_upgrade.py	2007-01-09 05:59:35 +0000
+++ b/tests/test_upgrade.py	2007-01-15 03:15:21 +0000
@@ -128,6 +128,41 @@
         self.assertTrue([oldrepos.generate_revision_id(1, "")],
                         newrepos.revision_parents("customrev-svn%d-upgrade" % MAPPING_VERSION))
 
+    def test_single_custom_continue(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/a': 'b', 'dc/b': 'c'})
+        self.client_add("dc/a")
+        self.client_add("dc/b")
+        self.client_commit("dc", "data")
+
+        oldrepos = Repository.open(repos_url)
+        dir = BzrDir.create("f")
+        newrepos = dir.create_repository()
+        oldrepos.copy_content_into(newrepos)
+        dir.create_branch()
+        wt = dir.create_workingtree()
+        file("f/a", "w").write("b")
+        file("f/b", "w").write("c")
+        wt.add("a")
+        wt.add("b")
+        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
+        file("f/a", 'w').write("moredata")
+        file("f/b", 'w').write("moredata")
+        wt.commit(message='fix moredata', rev_id="customrev")
+
+        tree = newrepos.revision_tree("svn-v1:1@%s-" % oldrepos.uuid)
+
+        vf = newrepos.weave_store.get_weave_or_empty(tree.inventory.path2id("a"), newrepos.get_transaction())
+        vf.clone_text("customrev-svn%d-upgrade" % MAPPING_VERSION,
+                "svn-v1:1@%s-" % oldrepos.uuid, ["svn-v1:1@%s-" % oldrepos.uuid])
+
+        upgrade_repository(newrepos, oldrepos, allow_change=True)
+
+        self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(1, "")))
+        self.assertTrue(newrepos.has_revision("customrev-svn%d-upgrade" % MAPPING_VERSION))
+        self.assertTrue([oldrepos.generate_revision_id(1, "")],
+                        newrepos.revision_parents("customrev-svn%d-upgrade" % MAPPING_VERSION))
+
     def test_more_custom(self):
         repos_url = self.make_client("a", "dc")
         self.build_tree({'dc/a': 'b'})

=== modified file 'upgrade.py'
--- a/upgrade.py	2007-01-07 00:48:00 +0000
+++ b/upgrade.py	2007-01-15 03:15:21 +0000
@@ -43,6 +43,7 @@
 # Change the parent of a revision
 def change_revision_parent(repository, oldrevid, newrevid, new_parents):
     assert isinstance(new_parents, list)
+    mutter('creating copy %r of %r with new parents %r' % (newrevid, oldrevid, new_parents))
     oldrev = repository.get_revision(oldrevid)
 
     builder = repository.get_commit_builder(branch=None, parents=new_parents, 
@@ -57,9 +58,12 @@
         new_ie = ie.copy()
         if new_ie.revision == oldrevid:
             new_ie.revision = None
-        builder.record_entry_contents(new_ie, 
-               map(repository.get_revision_inventory, new_parents), 
-               path, repository.revision_tree(oldrevid))
+        versionedfile = repository.weave_store.get_weave_or_empty(new_ie.file_id, 
+                repository.get_transaction())
+        if not versionedfile.has_version(newrevid):
+            builder.record_entry_contents(new_ie, 
+                   map(repository.get_revision_inventory, new_parents), 
+                   path, repository.revision_tree(oldrevid))
 
     builder.finish_inventory()
     return builder.commit(oldrev.message)
@@ -180,10 +184,11 @@
 
         pb = ui_factory.nested_progress_bar()
         i = 0
+        total = len(needs_upgrading)
         try:
             while len(needs_upgrading) > 0:
                 revid = needs_upgrading.pop()
-                pb.update('upgrading revisions', i, len(needs_upgrading))
+                pb.update('upgrading revisions', i, total)
                 i+=1
                 newrevid = create_upgraded_revid(revid)
                 rename_map[revid] = newrevid




More information about the bazaar-commits mailing list