mercurial/commands.py
changeset 4451 671158f060cc
parent 4324 cd650cd61b06
child 4474 08ae451148b2
child 4586 1fcc076fcb17
--- a/mercurial/commands.py	Sun May 20 19:27:14 2007 +0200
+++ b/mercurial/commands.py	Fri Jun 01 19:45:05 2007 +0200
@@ -1554,7 +1554,14 @@
     setremoteconfig(ui, opts)
 
     other = hg.repository(ui, source)
-    incoming = repo.findincoming(other, force=opts["force"])
+    revs = None
+    if opts['rev']:
+        if 'lookup' in other.capabilities:
+            revs = [other.lookup(rev) for rev in opts['rev']]
+        else:
+            error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.")
+            raise util.Abort(error)
+    incoming = repo.findincoming(other, heads=revs, force=opts["force"])
     if not incoming:
         ui.status(_("no changes found\n"))
         return
@@ -1564,7 +1571,12 @@
         fname = opts["bundle"]
         if fname or not other.local():
             # create a bundle (uncompressed if other repo is not local)
-            cg = other.changegroup(incoming, "incoming")
+            if revs is None:
+                cg = other.changegroup(incoming, "incoming")
+            else:
+                if 'changegroupsubset' not in other.capabilities:
+                    raise util.Abort(_("Partial incoming cannot be done because other repository doesn't support changegroupsubset."))
+                cg = other.changegroupsubset(incoming, revs, 'incoming')
             bundletype = other.local() and "HG10BZ" or "HG10UN"
             fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
             # keep written bundle?
@@ -1574,9 +1586,6 @@
                 # use the created uncompressed bundlerepo
                 other = bundlerepo.bundlerepository(ui, repo.root, fname)
 
-        revs = None
-        if opts['rev']:
-            revs = [other.lookup(rev) for rev in opts['rev']]
         o = other.changelog.nodesbetween(incoming, revs)[0]
         if opts['newest_first']:
             o.reverse()