changeset 43:77ebb51f5f36

client: add tags command
author Idan Kamara <idankk86@gmail.com>
date Mon, 15 Aug 2011 22:46:45 +0300
parents b6b75c71ac58
children 3a661f63107e
files hglib/client.py tests/test-tags.py
diffstat 2 files changed, 37 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hglib/client.py	Mon Aug 15 22:46:45 2011 +0300
+++ b/hglib/client.py	Mon Aug 15 22:46:45 2011 +0300
@@ -623,6 +623,24 @@
 
         self.rawcommand(args)
 
+    def tags(self):
+        """
+        Return a list of repository tags as: (name, rev, node, islocal)
+        """
+        args = cmdbuilder('tags', v=True)
+
+        out = self.rawcommand(args)
+
+        t = []
+        for line in out.splitlines():
+            taglocal = line.endswith(' local')
+            if taglocal:
+                line = line[:-6]
+            name, rev = line.rsplit(' ', 1)
+            rev, node = rev.split(':')
+            t.append((name.rstrip(), int(rev), node, taglocal))
+        return t
+
     def tip(self):
         args = cmdbuilder('tip', template=templates.changeset)
         out = self.rawcommand(args)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-tags.py	Mon Aug 15 22:46:45 2011 +0300
@@ -0,0 +1,19 @@
+import common
+import hglib
+
+class test_tags(common.basetest):
+    def test_basic(self):
+        self.append('a', 'a')
+        rev, node = self.client.commit('first', addremove=True)
+        self.client.tag('my tag')
+        self.client.tag('local tag', rev=rev, local=True)
+
+        # filecache that was introduced in 2.0 makes us see the local tag, for
+        # now we have to reconnect
+        if self.client.version < (2, 0, 0):
+            self.client = hglib.open()
+
+        tags = self.client.tags()
+        self.assertEquals(tags, [('tip', 1, self.client.tip().node[:12], False),
+                                 ('my tag', 0, node[:12], False),
+                                 ('local tag', 0, node[:12], True)])