Rev 436: Include simple_mainline. in http://bazaar.launchpad.net/~loggerhead-team/loggerhead/trunk-rich

John Arbash Meinel john at arbash-meinel.com
Wed Mar 16 12:21:57 UTC 2011


At http://bazaar.launchpad.net/~loggerhead-team/loggerhead/trunk-rich

------------------------------------------------------------
revno: 436 [merge]
revision-id: john at arbash-meinel.com-20110316122136-930ttoriqgbw2cy3
parent: john at arbash-meinel.com-20110316122028-tgixpjm30aalqk73
parent: john at arbash-meinel.com-20110311095024-7bmh9c7xs43fb9g5
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: trunk-rich
timestamp: Wed 2011-03-16 13:21:36 +0100
message:
  Include simple_mainline.
added:
  loggerhead/tests/test_history.py test_history.py-20110311094724-qreaf3ppfbus5rym-1
modified:
  loggerhead/history.py          history.py-20061211064342-102iqirsciyvgtcf-5
  loggerhead/tests/__init__.py   __init__.py-20061211064342-102iqirsciyvgtcf-29
-------------- next part --------------
=== modified file 'loggerhead/history.py'
--- a/loggerhead/history.py	2010-05-10 13:48:25 +0000
+++ b/loggerhead/history.py	2011-03-11 09:22:29 +0000
@@ -327,7 +327,16 @@
         revid in revid_list.
         """
         if revid_list is None:
-            revid_list = [r[0][1] for r in self._rev_info]
+            # Just yield the mainline, starting at start_revid
+            revid = start_revid
+            is_null = bzrlib.revision.is_null
+            while not is_null(revid):
+                yield revid
+                parents = self._rev_info[self._rev_indices[revid]][2]
+                if not parents:
+                    return
+                revid = parents[0]
+            return
         revid_set = set(revid_list)
         revid = start_revid
 

=== modified file 'loggerhead/tests/__init__.py'
--- a/loggerhead/tests/__init__.py	2011-03-16 12:20:28 +0000
+++ b/loggerhead/tests/__init__.py	2011-03-16 12:21:36 +0000
@@ -20,6 +20,7 @@
         (__name__ + '.' + x) for x in [
             'test_controllers',
             'test_corners',
+            'test_history',
             'test_load_test',
             'test_simple',
             'test_templating',

=== added file 'loggerhead/tests/test_history.py'
--- a/loggerhead/tests/test_history.py	1970-01-01 00:00:00 +0000
+++ b/loggerhead/tests/test_history.py	2011-03-11 09:50:24 +0000
@@ -0,0 +1,114 @@
+# Copyright (C) 2011 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+"""Direct tests of the loggerhead/history.py module"""
+
+from bzrlib import tests
+
+from loggerhead import history
+
+
+class TestHistoryGetRevidsFrom(tests.TestCaseWithMemoryTransport):
+
+    def make_linear_ancestry(self):
+        # Time goes up
+        # rev-3
+        #  |
+        # rev-2
+        #  |
+        # rev-1
+        builder = self.make_branch_builder('branch')
+        builder.start_series()
+        builder.build_snapshot('rev-1', None, [
+            ('add', ('', 'root-id', 'directory', None))])
+        builder.build_snapshot('rev-2', ['rev-1'], [])
+        builder.build_snapshot('rev-3', ['rev-2'], [])
+        builder.finish_series()
+        b = builder.get_branch()
+        self.addCleanup(b.lock_read().unlock)
+        return history.History(b, {})
+
+    def make_merged_ancestry(self):
+        # Time goes up
+        # rev-3
+        #  |  \
+        #  |  rev-2
+        #  |  /
+        # rev-1
+        builder = self.make_branch_builder('branch')
+        builder.start_series()
+        builder.build_snapshot('rev-1', None, [
+            ('add', ('', 'root-id', 'directory', None))])
+        builder.build_snapshot('rev-2', ['rev-1'], [])
+        builder.build_snapshot('rev-3', ['rev-1', 'rev-2'], [])
+        builder.finish_series()
+        b = builder.get_branch()
+        self.addCleanup(b.lock_read().unlock)
+        return history.History(b, {})
+
+    def make_deep_merged_ancestry(self):
+        # Time goes up
+        # F
+        # |\
+        # | E
+        # | |\
+        # | | D
+        # | |/
+        # B C
+        # |/
+        # A
+        builder = self.make_branch_builder('branch')
+        builder.start_series()
+        builder.build_snapshot('A', None, [
+            ('add', ('', 'root-id', 'directory', None))])
+        builder.build_snapshot('B', ['A'], [])
+        builder.build_snapshot('C', ['A'], [])
+        builder.build_snapshot('D', ['C'], [])
+        builder.build_snapshot('E', ['C', 'D'], [])
+        builder.build_snapshot('F', ['B', 'E'], [])
+        builder.finish_series()
+        b = builder.get_branch()
+        self.addCleanup(b.lock_read().unlock)
+        return history.History(b, {})
+
+    def assertRevidsFrom(self, expected, his, search_revs, tip_rev):
+        self.assertEqual(expected,
+                         list(his.get_revids_from(search_revs, tip_rev)))
+
+    def test_get_revids_from_simple_mainline(self):
+        his = self.make_linear_ancestry()
+        self.assertRevidsFrom(['rev-3', 'rev-2', 'rev-1'],
+                              his, None, 'rev-3')
+
+    def test_get_revids_from_merged_mainline(self):
+        his = self.make_merged_ancestry()
+        self.assertRevidsFrom(['rev-3', 'rev-1'],
+                              his, None, 'rev-3')
+
+    def test_get_revids_given_one_rev(self):
+        his = self.make_merged_ancestry()
+        # rev-3 was the first mainline revision to see rev-2.
+        self.assertRevidsFrom(['rev-3'], his, ['rev-2'], 'rev-3')
+
+    def test_get_revids_deep_ancestry(self):
+        his = self.make_deep_merged_ancestry()
+        self.assertRevidsFrom(['F'], his, ['F'], 'F')
+        self.assertRevidsFrom(['F'], his, ['E'], 'F')
+        self.assertRevidsFrom(['F'], his, ['D'], 'F')
+        self.assertRevidsFrom(['F'], his, ['C'], 'F')
+        self.assertRevidsFrom(['B'], his, ['B'], 'F')
+        self.assertRevidsFrom(['A'], his, ['A'], 'F')



More information about the bazaar-commits mailing list