[PATCH hglib] client: add rebase support to client.pull (issue4644)

Axel Hecht axel at mozilla.com
Wed Apr 6 13:51:05 UTC 2016


# HG changeset patch
# User Axel Hecht <axel at pike.org>
# Date 1442331213 -7200
#      Tue Sep 15 17:33:33 2015 +0200
# Node ID 98efa416f763d5f408244baeaf6ab5e2fc4fd756
# Parent  3478adf2394ad27a4b501c91bbdae8157f06dd10
client: add rebase support to client.pull (issue4644)

Add options to pull to use --rebase. As that's supported only via the
rebase extension, make sure the extension is enable by passing in a
config option.

diff --git a/hglib/client.py b/hglib/client.py
--- a/hglib/client.py
+++ b/hglib/client.py
@@ -1187,7 +1187,7 @@
 
     def pull(self, source=None, rev=None, update=False, force=False,
              bookmark=None, branch=None, ssh=None, remotecmd=None,
-             insecure=False, tool=None):
+             insecure=False, rebase=False, tool=None):
         """Pull changes from a remote repository.
 
         This finds all changes from the repository specified by source
@@ -1207,13 +1207,19 @@
         remotecmd - specify hg command to run on the remote side
         insecure - do not verify server certificate (ignoring
          web.cacerts config)
+        rebase - rebase working directory to branch head
         tool - specify merge tool for rebase
 
         """
-        args = cmdbuilder(b('pull'), source, r=rev, u=update, f=force,
+        if rebase:
+            # make sure the rebase extension is enabled
+            config = [b('--config'), b('extensions.rebase=')]
+        else:
+            config = []
+        args = cmdbuilder(b('pull'), source, *config, r=rev, u=update, f=force,
                           B=bookmark, b=branch, e=ssh,
                           remotecmd=remotecmd, insecure=insecure,
-                          t=tool)
+                          rebase=rebase, t=tool)
 
         eh = util.reterrorhandler(args)
         self.rawcommand(args, eh=eh)
diff --git a/tests/test-pull.py b/tests/test-pull.py
--- a/tests/test-pull.py
+++ b/tests/test-pull.py
@@ -1,6 +1,7 @@
 from tests import common
 import hglib
 from hglib.util import b
+from hglib.client import revision
 
 class test_pull(common.basetest):
     def test_basic(self):
@@ -29,3 +30,25 @@
         self.append('other/a', 'b')
         self.assertFalse(other.pull(update=True))
         self.assertTrue((b('M'), b('a')) in other.status())
+
+    def test_rebase(self):
+        self.append('a', 'a')
+        self.append('b', 'b')
+        self.client.commit(b('first'), addremove=True)
+
+        self.client.clone(dest=b('other'))
+        other = hglib.open(b('other'))
+
+        self.append('a', 'a')
+        self.client.commit(b('second'))
+
+        self.append('other/b', 'b')
+        other.commit(b('third'))
+
+        self.assertTrue(other.pull(rebase=True))
+        # compare the logs, gotta trick away the 'tip' tag
+        def untip(log):
+            return [revision(*(b('') if item==b('tip') else item for item in cs)) for cs in log]
+        client_log = untip(self.client.log())
+        other_log = untip(other.log())
+        self.assertEquals(client_log, other_log[1:])


More information about the Mercurial-devel mailing list