Rev 4678: Split out get_deltas_for_revision into a separate test module. in http://bazaar.launchpad.net/~jameinel/bzr/2.0.1-faster-get-deltas-bug374730

John Arbash Meinel john at arbash-meinel.com
Thu Sep 24 22:15:05 BST 2009


At http://bazaar.launchpad.net/~jameinel/bzr/2.0.1-faster-get-deltas-bug374730

------------------------------------------------------------
revno: 4678
revision-id: john at arbash-meinel.com-20090924211450-c7y2v6ppian0d92u
parent: john at arbash-meinel.com-20090924200936-g1iyerqko1bb6tel
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.0.1-faster-get-deltas-bug374730
timestamp: Thu 2009-09-24 16:14:50 -0500
message:
  Split out get_deltas_for_revision into a separate test module.
-------------- next part --------------
=== modified file 'bzrlib/tests/per_repository/__init__.py'
--- a/bzrlib/tests/per_repository/__init__.py	2009-07-22 17:22:06 +0000
+++ b/bzrlib/tests/per_repository/__init__.py	2009-09-24 21:14:50 +0000
@@ -862,6 +862,7 @@
         'test_fileid_involved',
         'test_find_text_key_references',
         'test__generate_text_key_index',
+        'test_get_deltas_for_revisions',
         'test_get_parent_map',
         'test_has_same_location',
         'test_has_revisions',

=== added file 'bzrlib/tests/per_repository/test_get_deltas_for_revisions.py'
--- a/bzrlib/tests/per_repository/test_get_deltas_for_revisions.py	1970-01-01 00:00:00 +0000
+++ b/bzrlib/tests/per_repository/test_get_deltas_for_revisions.py	2009-09-24 21:14:50 +0000
@@ -0,0 +1,105 @@
+# Copyright (C) 2009 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+from bzrlib.transport.memory import MemoryServer
+from bzrlib.tests.per_repository import TestCaseWithRepository
+
+
+class TestGetDeltasForRevisions(TestCaseWithRepository):
+
+    def setUp(self):
+        # All of our tests will be run out of the MemoryServer, not just the
+        # Remote ones
+        self.transport_server = MemoryServer
+        self.vfs_transport_factory = MemoryServer
+        super(TestGetDeltasForRevisions, self).setUp()
+
+    def make_repo_with_history(self):
+        builder = self.make_branch_builder('source',
+                                           format=self.bzrdir_format)
+        builder.start_series()
+        builder.build_snapshot('rev1', None, [
+            ('add', ('', 'TREE_ROOT', 'directory', None)),
+            ('add', ('file', 'file-id', 'file', 'content\n')),
+            ('add', ('dir', 'dir-id', 'directory', None)),
+            ('add', ('dir/subfile', 'subfile-id', 'file', 'content\n')),
+            ('add', ('dir/dir', 'dirdir-id', 'directory', None)),
+            ('add', ('dir/dir/subsubfile', 'subsubfile-id', 'file',
+                     'content\n'))
+            ])
+        builder.build_snapshot('rev2', ['rev1'], [
+            ('modify', ('file-id', 'new file content\n'))])
+        rev3_delta = [('add', ('dir/dir/newsubsubfile', 'newsubsubfile-id',
+                               'file', 'newsubsub content\n')),
+                      ('modify', ('subsubfile-id', 'subsub file content\n')),
+                     ]
+        builder.build_snapshot('rev3', ['rev1'], rev3_delta)
+        builder.build_snapshot('rev4', ['rev2', 'rev3'], rev3_delta)
+        builder.build_snapshot('rev5', ['rev4'], [
+            ('unversion', 'subfile-id')])
+        builder.build_snapshot('rev6', ['rev5'], [
+            ('rename', ('dir/dir', 'dir/newsubdir'))])
+        builder.finish_series()
+        b = builder.get_branch()
+        repo = b.repository
+        repo.lock_read()
+        self.addCleanup(repo.unlock)
+        return repo
+
+    def test_all_changes(self):
+        repo = self.make_repo_with_history()
+        revisions = [repo.get_revision(r) for r in
+                     ['rev1', 'rev2', 'rev3', 'rev4', 'rev5', 'rev6']]
+        deltas1 = list(repo.get_deltas_for_revisions(revisions))
+        # TODO: this is a bad test, as 'get_revision_delta()' is
+        #       implemented in terms of get_deltas_for_revisions()...
+        #       but it is the test we had before
+        deltas2 = [repo.get_revision_delta(r.revision_id) for r in revisions]
+        self.assertEqual(deltas1, deltas2)
+        for delta in deltas1:
+            self.assertTrue(delta.has_changed())
+        delta = deltas1[1]
+        self.assertEqual([('file', 'file-id', 'file', True, False)],
+                         delta.modified)
+
+    def test_filtered_file_changes(self):
+        repo = self.make_repo_with_history()
+        revisions = [repo.get_revision(r) for r in
+                     ['rev1', 'rev2', 'rev3', 'rev4', 'rev5', 'rev6']]
+        deltas = list(repo.get_deltas_for_revisions(revisions,
+                      specific_fileids=['subfile-id']))
+        # Only modified in rev1 and rev5
+        self.assertTrue(deltas[0].has_changed())
+        self.assertFalse(deltas[1].has_changed())
+        self.assertFalse(deltas[2].has_changed())
+        self.assertFalse(deltas[3].has_changed())
+        self.assertTrue(deltas[4].has_changed())
+        self.assertFalse(deltas[5].has_changed())
+
+    def test_filtered_dirs_include_children(self):
+        repo = self.make_repo_with_history()
+        revisions = [repo.get_revision(r) for r in
+                     ['rev1', 'rev2', 'rev3', 'rev4', 'rev5', 'rev6']]
+        deltas = list(repo.get_deltas_for_revisions(revisions,
+                      specific_fileids=['dir-id']))
+        # child modified in all but rev2
+        self.assertTrue(deltas[0].has_changed())
+        self.assertFalse(deltas[1].has_changed())
+        self.assertTrue(deltas[2].has_changed())
+        self.assertTrue(deltas[3].has_changed())
+        self.assertTrue(deltas[4].has_changed())
+        self.assertTrue(deltas[5].has_changed())

=== modified file 'bzrlib/tests/per_repository/test_repository.py'
--- a/bzrlib/tests/per_repository/test_repository.py	2009-09-08 11:32:53 +0000
+++ b/bzrlib/tests/per_repository/test_repository.py	2009-09-24 21:14:50 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2005, 2006, 2007 Canonical Ltd
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -1173,17 +1173,6 @@
         for tree1, tree2 in zip(trees1, trees2):
             self.assertFalse(tree2.changes_from(tree1).has_changed())
 
-    def test_get_deltas_for_revisions(self):
-        repository = self.bzrdir.open_repository()
-        repository.lock_read()
-        self.addCleanup(repository.unlock)
-        revisions = [repository.get_revision(r) for r in
-                     ['rev1', 'rev2', 'rev3', 'rev4']]
-        deltas1 = list(repository.get_deltas_for_revisions(revisions))
-        deltas2 = [repository.get_revision_delta(r.revision_id) for r in
-                   revisions]
-        self.assertEqual(deltas1, deltas2)
-
     def test_all_revision_ids(self):
         # all_revision_ids -> all revisions
         self.assertEqual(set(['rev1', 'rev2', 'rev3', 'rev4']),



More information about the bazaar-commits mailing list