Rev 6448: (jelmer) Add RevisionHistoryMatches matcher. (Jelmer Vernooij) in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/2.5/

Patch Queue Manager pqm at pqm.ubuntu.com
Thu Jan 19 14:09:51 UTC 2012


At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/2.5/

------------------------------------------------------------
revno: 6448 [merge]
revision-id: pqm at pqm.ubuntu.com-20120119140950-vyytyv8gf83qynav
parent: pqm at pqm.ubuntu.com-20120119134240-g8me32sn0s86c6r1
parent: jelmer at samba.org-20120119120613-w22kh2hk0q3g0jng
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: 2.5
timestamp: Thu 2012-01-19 14:09:50 +0000
message:
  (jelmer) Add RevisionHistoryMatches matcher. (Jelmer Vernooij)
modified:
  bzrlib/tests/matchers.py       matchers.py-20100506074820-iiipsgdue8dhvidy-1
  bzrlib/tests/test_commit_merge.py test_commit_merge.py-20050920084723-819eeeff77907bc5
  bzrlib/tests/test_matchers.py  test_matchers.py-20100506074820-iiipsgdue8dhvidy-2
  doc/en/release-notes/bzr-2.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
=== modified file 'bzrlib/tests/matchers.py'
--- a/bzrlib/tests/matchers.py	2011-12-14 12:15:44 +0000
+++ b/bzrlib/tests/matchers.py	2012-01-06 22:44:57 +0000
@@ -31,6 +31,7 @@
     'MatchesAncestry',
     'ContainsNoVfsCalls',
     'ReturnsUnlockable',
+    'RevisionHistoryMatches',
     ]
 
 from bzrlib import (
@@ -184,6 +185,31 @@
         return Equals(entries).match(actual)
 
 
+class RevisionHistoryMatches(Matcher):
+    """A matcher that checks if a branch has a specific revision history.
+
+    :ivar history: Revision history, as list of revisions. Oldest first.
+    """
+
+    def __init__(self, history):
+        Matcher.__init__(self)
+        self.expected = history
+
+    def __str__(self):
+        return 'RevisionHistoryMatches(%r)' % self.expected
+
+    def match(self, branch):
+        branch.lock_read()
+        try:
+            graph = branch.repository.get_graph()
+            history = list(graph.iter_lefthand_ancestry(
+                branch.last_revision(), [_mod_revision.NULL_REVISION]))
+            history.reverse()
+        finally:
+            branch.unlock()
+        return Equals(self.expected).match(history)
+
+
 class _NoVfsCallsMismatch(Mismatch):
     """Mismatch describing a list of HPSS calls which includes VFS requests."""
 

=== modified file 'bzrlib/tests/test_commit_merge.py'
--- a/bzrlib/tests/test_commit_merge.py	2011-10-05 18:11:19 +0000
+++ b/bzrlib/tests/test_commit_merge.py	2011-12-13 21:20:35 +0000
@@ -20,7 +20,6 @@
 from bzrlib import (
     check,
     osutils,
-    revision as _mod_revision,
     )
 from bzrlib.errors import PointlessCommit
 from bzrlib.tests import (
@@ -29,6 +28,7 @@
 from bzrlib.tests.features import (
     SymlinkFeature,
     )
+from bzrlib.tests.matchers import RevisionHistoryMatches
 
 
 class TestCommitMerge(TestCaseWithTransport):
@@ -61,10 +61,9 @@
         self.assertEquals(by.revno(), 3)
         graph = wty.branch.repository.get_graph()
         self.addCleanup(wty.lock_read().unlock)
-        self.assertEquals(list(
-            graph.iter_lefthand_ancestry(by.last_revision(),
-                [_mod_revision.NULL_REVISION])),
-            ['y at u-0-2', 'y at u-0-1', base_rev])
+        self.assertThat(by,
+            RevisionHistoryMatches([base_rev, 'y at u-0-1', 'y at u-0-2'])
+            )
         rev = by.repository.get_revision('y at u-0-2')
         self.assertEquals(rev.parent_ids,
                           ['y at u-0-1', 'x at u-0-1'])

=== modified file 'bzrlib/tests/test_matchers.py'
--- a/bzrlib/tests/test_matchers.py	2011-12-14 12:15:44 +0000
+++ b/bzrlib/tests/test_matchers.py	2012-01-06 22:53:14 +0000
@@ -178,3 +178,27 @@
         self.assertEquals([calls[0].call], mismatch.vfs_calls)
         self.assertEquals("no VFS calls expected, got: append('file')""",
                 mismatch.describe())
+
+
+class TestRevisionHistoryMatches(TestCaseWithTransport):
+
+    def test_empty(self):
+        tree = self.make_branch_and_tree('.')
+        matcher = RevisionHistoryMatches([])
+        self.assertIs(None, matcher.match(tree.branch))
+
+    def test_matches(self):
+        tree = self.make_branch_and_tree('.')
+        tree.commit('msg1', rev_id='a')
+        tree.commit('msg2', rev_id='b')
+        matcher = RevisionHistoryMatches(['a', 'b'])
+        self.assertIs(None, matcher.match(tree.branch))
+
+    def test_mismatch(self):
+        tree = self.make_branch_and_tree('.')
+        tree.commit('msg1', rev_id='a')
+        tree.commit('msg2', rev_id='b')
+        matcher = RevisionHistoryMatches(['a', 'b', 'c'])
+        self.assertEquals(
+            "['a', 'b', 'c'] != ['a', 'b']",
+            matcher.match(tree.branch).describe())

=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt	2012-01-19 13:42:40 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt	2012-01-19 14:09:50 +0000
@@ -61,6 +61,8 @@
 .. Major internal changes, unlikely to be visible to users or plugin 
    developers, but interesting for bzr developers.
 
+* A new matcher ``RevisionHistoryMatches`` has been added. (Jelmer Vernooij)
+
 * ``MutableTree`` has two new hooks ``pre_transform`` and
   ``post_transform`` that are called for tree transform operations.
   (Jelmer Vernooij, #912084)




More information about the bazaar-commits mailing list