changeset 122:e05b0cf920bb

client: implement the 'in' keyword for a client object Check if a revision number or a changeset hex matches a changeset in the client repository. The internal tries to create a ctx object. Returns False If the ctx creation fails. This patch also adds the corresponding tests.
author Paul Tonelli <paul.tonelli@logilab.fr>
date Wed, 30 Apr 2014 16:44:59 +0200
parents cc905ee18449
children cdde1656346f
files hglib/client.py tests/test-context.py
diffstat 2 files changed, 31 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hglib/client.py	Sat Feb 01 15:30:18 2014 -0600
+++ b/hglib/client.py	Wed Apr 30 16:44:59 2014 +0200
@@ -1531,3 +1531,14 @@
 
     def __getitem__(self, changeid):
         return context.changectx(self, changeid)
+
+    def __contains__(self, changeid):
+        """
+        check if changeid, which can be either a local revision number or a
+        changeset id, matches a changeset in the client.
+        """
+        try:
+            context.changectx(self, changeid)
+            return True
+        except ValueError:
+            return False
--- a/tests/test-context.py	Sat Feb 01 15:30:18 2014 -0600
+++ b/tests/test-context.py	Wed Apr 30 16:44:59 2014 +0200
@@ -67,3 +67,23 @@
         # from revset
         ctx = context.changectx(self.client, 'all()')
         self.assertEquals(ctx.node(), tip.node)
+
+    def test_in_keyword(self):
+        """
+        test the 'in' keyword using both revision numbers or changeset ids.
+        """
+        self.append('a', 'a')
+        rev0, node0 = self.client.commit('first', addremove=True)
+        self.append('a', 'a')
+        rev1, node1 = self.client.commit('second')
+
+        self.assertIn(1, self.client)
+        hash_1 = self.client.log(0)[0][1]
+        self.assertIn(hash_1, self.client)
+        self.assertNotIn(2, self.client)
+        hash_2 = self.client.log(1)[0][1]
+        self.assertIn(hash_2,self.client)
+        hash_2 = 'deadbeef'
+        self.assertNotIn(hash_2, self.client)
+
+