Rev 18: More tests, extend MapTree a bit. in file:///data/jelmer/bzr-rebase/trunk/

Jelmer Vernooij jelmer at samba.org
Thu Jul 12 09:22:42 BST 2007


At file:///data/jelmer/bzr-rebase/trunk/

------------------------------------------------------------
revno: 18
revision-id: jelmer at samba.org-20070709201858-0hsbv48mwm09vt16
parent: jelmer at samba.org-20070709163514-l1pqhcthz06lawak
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2007-07-09 21:18:58 +0100
message:
  More tests, extend MapTree a bit.
modified:
  README                         readme-20070626220000-c62864tuxlldx6uc-1
  maptree.py                     maptree.py-20070709163407-quin1nc7pd9bp2mo-1
  test_maptree.py                test_maptree.py-20070709163406-wv3n8o12iygpxf4l-1
  test_rebase.py                 test_rebase.py-20070626221123-ellanmf93nw8z9r1-2
=== modified file 'README'
--- a/README	2007-07-09 16:31:06 +0000
+++ b/README	2007-07-09 20:18:58 +0000
@@ -8,6 +8,13 @@
 branch is specified, it will use the current parent branch (which is usually 
 what you want).
 
+If the rebase fails halfway through, perhaps because of conflicts 
+replaying a revision, it will abort. When it's aborted, you can either resolve
+the conflicts (using "bzr resolve") and run ``bzr rebase-continue`` or 
+abort the rebase and undo all changes it's done using ``bzr rebase-abort``. 
+The current state of the rebase can be viewed with the ``bzr rebase-todo`` 
+command.
+
 In the future, I hope it can also support rebasing on top of an unrelated 
 branch.
 

=== modified file 'maptree.py'
--- a/maptree.py	2007-07-09 16:35:14 +0000
+++ b/maptree.py	2007-07-09 20:18:58 +0000
@@ -58,6 +58,14 @@
         for path, ie in self.oldinv.iter_entries():
             yield path, self.map_ie(ie)
 
+    def path2id(self, path):
+        return self.maptree.new_id(self.oldinv.path2id(path))
+
+    def id2path(self, id):
+        return self.oldinv.id2path(self.maptree.old_id(id))
+
+    def has_id(self, id):
+        return self.oldinv.has_id(self.maptree.old_id(id))
 
 class MapTree:
     """Wrapper around a tree that translates file ids.
@@ -105,3 +113,6 @@
     def is_executable(self, file_id, path=None):
         return self.oldtree.is_executable(self.old_id(file_id=file_id), 
                                           path=path)
+
+    def has_filename(self, filename):
+        return self.oldtree.has_filename(filename)

=== modified file 'test_maptree.py'
--- a/test_maptree.py	2007-07-09 16:35:14 +0000
+++ b/test_maptree.py	2007-07-09 20:18:58 +0000
@@ -21,14 +21,74 @@
 from maptree import MapTree
 
 
-class MapTreeTests(TestCaseWithTransport):
+class EmptyMapTreeTests(TestCaseWithTransport):
     def setUp(self):
-        super(MapTreeTests, self).setUp()
-
-    def test_empty_map(self):
-        tree = self.make_branch_and_memory_tree('branch') 
-        builder = TreeBuilder()
-        builder.start_tree(tree)
-        builder.build(['foo'])
-        builder.finish_tree()
-        m = MapTree(tree, {})
+        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_inventory_len(self):
+        self.oldtree.lock_write()
+        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.oldtree.unlock()
+        self.oldtree.lock_read()
+        self.assertEquals(4, len(self.oldtree.inventory))
+        self.oldtree.unlock()
+        self.assertEquals(4, len(self.maptree.inventory))
+
+    def test_path2id(self):
+        self.oldtree.lock_write()
+        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.inventory.path2id("foo"),
+                          self.maptree.inventory.path2id("foo"))
+
+    def test_id2path(self):
+        self.oldtree.lock_write()
+        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.inventory.id2path(
+                              self.maptree.inventory.path2id("foo")))
+
+    def test_has_id(self):
+        self.oldtree.lock_write()
+        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.inventory.has_id(
+                              self.maptree.inventory.path2id("foo")))
+        self.assertFalse(self.maptree.inventory.has_id("bar"))
+

=== modified file 'test_rebase.py'
--- a/test_rebase.py	2007-07-09 16:35:14 +0000
+++ b/test_rebase.py	2007-07-09 20:18:58 +0000
@@ -22,10 +22,10 @@
 from rebase import (marshall_rebase_plan, unmarshall_rebase_plan, 
                     replay_snapshot, generate_simple_plan,
                     generate_transpose_plan, rebase_plan_exists,
-                    REBASE_PLAN_FILENAME, REBASE_CURRENT_REVID_FILENAME,
-                    read_rebase_plan, remove_rebase_plan, 
-                    read_active_rebase_revid, write_active_rebase_revid, 
-                    write_rebase_plan, MapTree)
+                    rebase_todo, REBASE_PLAN_FILENAME, 
+                    REBASE_CURRENT_REVID_FILENAME, read_rebase_plan, 
+                    remove_rebase_plan, read_active_rebase_revid, 
+                    write_active_rebase_revid, write_rebase_plan, MapTree)
 
 
 class RebasePlanReadWriterTests(TestCase):
@@ -232,3 +232,26 @@
         wt = self.make_branch_and_tree('.')
         write_active_rebase_revid(wt, None)
         self.assertIs(None, read_active_rebase_revid(wt))
+
+class RebaseTodoTests(TestCase):
+    def test_done(self):
+        class Repository:
+            def has_revision(self, revid):
+                return revid == "bloe"
+        self.assertEquals([], 
+                list(rebase_todo(Repository(), { "bla": ("bloe", [])})))
+
+    def test_notstarted(self):
+        class Repository:
+            def has_revision(self, revid):
+                return False
+        self.assertEquals(["bla"], 
+                list(rebase_todo(Repository(), { "bla": ("bloe", [])})))
+
+    def test_halfway(self):
+        class Repository:
+            def has_revision(self, revid):
+                return revid == "bloe"
+        self.assertEquals(["ha"], 
+                list(rebase_todo(Repository(), { "bla": ("bloe", []), 
+                                                 "ha": ("hee", [])})))




More information about the bazaar-commits mailing list