Add function for upgrading working trees.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 25 Jul 2007 01:29:00 +0000 (03:29 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 25 Jul 2007 01:29:00 +0000 (03:29 +0200)
__init__.py
tests/test_upgrade.py
upgrade.py

index e7743d50bdf28313b7fbce6d322d71945909defa..e27a144113a62bf8df435e0144d6e78d1e3c6c49 100644 (file)
@@ -219,7 +219,7 @@ class cmd_svn_upgrade(Command):
 
     @display_command
     def run(self, from_repository=None, verbose=False):
-        from upgrade import upgrade_branch
+        from upgrade import upgrade_branch, upgrade_workingtree
         from bzrlib.branch import Branch
         from bzrlib.errors import NoWorkingTree, BzrCommandError
         from bzrlib.repository import Repository
@@ -245,8 +245,12 @@ class cmd_svn_upgrade(Command):
         else:
             from_repository = Repository.open(from_repository)
 
-        upgrade_branch(branch_to, from_repository, allow_changes=True, 
-                       verbose=verbose)
+        if wt_to is not None:
+            upgrade_workingtree(wt_to, from_repository, allow_changes=True,
+                                verbose=verbose)
+        else:
+            upgrade_branch(branch_to, from_repository, allow_changes=True, 
+                           verbose=verbose)
 
         if wt_to is not None:
             wt_to.set_last_revision(branch_to.last_revision())
index 9b0ff5ffe49325a69602e3a2a342e2d12ffdc702..e84b019b12ddbc0c0c6e7a3eff8f4b181e24b46e 100644 (file)
@@ -27,8 +27,9 @@ from format import get_rich_root_format
 from repository import MAPPING_VERSION
 from tests import TestCaseWithSubversionRepository
 from upgrade import (upgrade_repository, upgrade_branch,
-                     UpgradeChangesContent, parse_legacy_revision_id,
-                     create_upgraded_revid, generate_upgrade_map)
+                     upgrade_workingtree, UpgradeChangesContent, 
+                     parse_legacy_revision_id, create_upgraded_revid, 
+                     generate_upgrade_map)
 
 class TestUpgradeChangesContent(TestCase):
     def test_init(self):
@@ -256,6 +257,34 @@ class UpgradeTests(TestCaseWithSubversionRepository):
                           "anotherrev-svn%d-upgrade" % MAPPING_VERSION
                           ], b.revision_history())
 
+    @skip_no_rebase
+    def test_workingtree(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/a': 'b'})
+        self.client_add("dc/a")
+        self.client_commit("dc", "data")
+
+        oldrepos = Repository.open(repos_url)
+        dir = BzrDir.create("f",format=get_rich_root_format())
+        newrepos = dir.create_repository()
+        b = dir.create_branch()
+        wt = dir.create_workingtree()
+        file("f/a", "w").write("b")
+        wt.add("a")
+        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
+        file("f/a", 'w').write("moredata")
+        wt.commit(message='fix moredata', rev_id="customrev")
+        file("f/a", 'w').write("blackfield")
+        wt.commit(message='fix it again', rev_id="anotherrev")
+
+        upgrade_workingtree(wt, oldrepos, allow_changes=True)
+        self.assertEquals(wt.last_revision(), b.last_revision())
+        self.assertEqual([oldrepos.generate_revision_id(0, "", "none"),
+                          oldrepos.generate_revision_id(1, "", "none"),
+                          "customrev-svn%d-upgrade" % MAPPING_VERSION,
+                          "anotherrev-svn%d-upgrade" % MAPPING_VERSION
+                          ], b.revision_history())
+
     @skip_no_rebase
     def test_branch_none(self):
         repos_url = self.make_client("a", "dc")
index da01e82faa59da2adc58b5bbe97e4270d0aa8792..14ee60ffdc4b4cbe52c364fe35be01ba1094ea9c 100644 (file)
@@ -80,6 +80,13 @@ def create_upgraded_revid(revid):
         return revid + suffix
 
 
+def upgrade_workingtree(wt, svn_repository, allow_changes=False, verbose=False):
+    upgrade_branch(wt.branch, svn_repository, allow_changes=allow_changes, verbose=verbose)
+    last_revid = wt.branch.last_revision()
+    wt.set_parent_trees([(last_revid, wt.branch.repository.revision_tree(last_revid))])
+    # TODO: Should also adjust file ids in working tree if necessary
+
+
 def upgrade_branch(branch, svn_repository, allow_changes=False, verbose=False):
     """Upgrade a branch to the current mapping version.