changeset 24:ca0d7e212cf8

client: add bookmarks command
author Idan Kamara <idankk86@gmail.com>
date Thu, 11 Aug 2011 17:54:09 +0300
parents 223e463c25e0
children 85ae94b98324
files hglib/client.py tests/test-bookmarks.py
diffstat 2 files changed, 46 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hglib/client.py	Thu Aug 11 17:53:56 2011 +0300
+++ b/hglib/client.py	Thu Aug 11 17:54:09 2011 +0300
@@ -157,6 +157,27 @@
 
         self.rawcommand(args)
 
+    def bookmarks(self):
+        """
+        Return the bookmarks as a list of (name, rev, node) and the
+        index of the current one.
+
+        If there isn't a current one, -1 is returned as the index
+        """
+        out = self.rawcommand(['bookmarks'])
+
+        bms = []
+        current = -1
+        if out.rstrip() != 'no bookmarks set':
+            for line in out.splitlines():
+                iscurrent, line = line[0:3], line[3:]
+                if '*' in iscurrent:
+                    current = len(bms)
+                name, line = line.split(' ', 1)
+                rev, node = line.split(':')
+                bms.append((name, int(rev), node))
+        return bms, current
+
     def branch(self, name=None, clean=False, force=False):
         if name and clean:
             raise ValueError('cannot use both name and clean')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bookmarks.py	Thu Aug 11 17:54:09 2011 +0300
@@ -0,0 +1,25 @@
+import common
+
+class test_bookmarks(common.basetest):
+    def test_empty(self):
+        self.assertEquals(self.client.bookmarks(), ([], -1))
+
+    def test_basic(self):
+        self.append('a', 'a')
+        rev0, node0 = self.client.commit('first', addremove=True)
+        self.append('a', 'a')
+        rev1, node1 = self.client.commit('second')
+
+        self.client.bookmark('0', rev0)
+        self.assertEquals(self.client.bookmarks(),
+                          ([('0', rev0, node0[:12])], -1))
+
+        self.client.bookmark('1', rev1)
+        self.assertEquals(self.client.bookmarks(),
+                          ([('0', rev0, node0[:12]),
+                            ('1', rev1, node1[:12])], 1))
+
+    #def test_spaces(self):
+    #    self.client.bookmark('s pace', self.rev0)
+    #    self.assertEquals(self.client.bookmarks(),
+    #                      ([('s pace', 0, self.rev0.node[:12])], -1))