diff mercurial/localrepo.py @ 1781:284fc722c342

add an optional argument to push only the specified revisions (push -r)
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Tue, 14 Feb 2006 21:11:57 +0100
parents 03ee100b8c21
children b9671b41e360
line wrap: on
line diff
--- a/mercurial/localrepo.py	Mon Feb 13 12:48:28 2006 -0600
+++ b/mercurial/localrepo.py	Tue Feb 14 21:11:57 2006 +0100
@@ -952,7 +952,7 @@
             cg = remote.changegroupsubset(fetch, heads)
         return self.addchangegroup(cg)
 
-    def push(self, remote, force=False):
+    def push(self, remote, force=False, revs=None):
         lock = remote.lock()
 
         base = {}
@@ -964,17 +964,25 @@
             return 1
 
         update = self.findoutgoing(remote, base)
-        if not update:
+        if revs is not None:
+            msng_cl, bases, heads = self.changelog.nodesbetween(update, revs)
+        else:
+            bases, heads = update, self.changelog.heads()
+
+        if not bases:
             self.ui.status(_("no changes found\n"))
             return 1
         elif not force:
-            if len(heads) < len(self.changelog.heads()):
+            if len(bases) < len(heads):
                 self.ui.warn(_("abort: push creates new remote branches!\n"))
                 self.ui.status(_("(did you forget to merge?"
                                  " use push -f to force)\n"))
                 return 1
 
-        cg = self.changegroup(update)
+        if revs is None:
+            cg = self.changegroup(update)
+        else:
+            cg = self.changegroupsubset(update, revs)
         return remote.addchangegroup(cg)
 
     def changegroupsubset(self, bases, heads):