changeset 39:0555d58a7313

client: add push command
author Idan Kamara <idankk86@gmail.com>
date Mon, 15 Aug 2011 22:46:45 +0300
parents 32f6a2bbf63e
children 238efe4fd7db
files hglib/client.py tests/test-push.py
diffstat 2 files changed, 36 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
@@ -518,6 +518,24 @@
             out = self.rawcommand(args)
             return out.rstrip()
 
+    def push(self, dest=None, rev=None, force=False, bookmark=None, branch=None,
+             newbranch=False, ssh=None, remotecmd=None, insecure=False):
+        args = cmdbuilder('push', dest, r=rev, f=force, B=bookmark, b=branch,
+                          new_branch=newbranch, e=ssh, remotecmd=remotecmd,
+                          insecure=insecure)
+
+        # we could use Python 3 nonlocal here...
+        pushed = [True]
+
+        def eh(ret, out, err):
+            if ret == 1:
+                pushed[0] = False
+            else:
+                raise error.CommandError(args, ret, out, err)
+
+        self.rawcommand(args, eh=eh)
+        return pushed[0]
+
     def remove(self, files, after=False, force=False, include=None, exclude=None):
         if not isinstance(files, list):
             files = [files]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-push.py	Mon Aug 15 22:46:45 2011 +0300
@@ -0,0 +1,18 @@
+import common, hglib
+
+class test_push(common.basetest):
+    def test_basic(self):
+        self.append('a', 'a')
+        self.client.commit('first', addremove=True)
+
+        self.client.clone(dest='other')
+        other = hglib.open('other')
+
+        # broken in hg, doesn't return 1 if nothing to push
+        #self.assertFalse(self.client.push('other'))
+
+        self.append('a', 'a')
+        self.client.commit('second')
+
+        self.assertTrue(self.client.push('other'))
+        self.assertEquals(self.client.log(), other.log())