# HG changeset patch # User Eric Hopper # Date 1157851507 25200 # Node ID 6ca49c5fe2689008b9947115d0990ffc942338e3 # Parent ef1032c223e7fd813063460503737a9a3003a0a8 Stop erroring out pull -r and clone -r if repository isn't local. diff -r ef1032c223e7 -r 6ca49c5fe268 mercurial/commands.py --- a/mercurial/commands.py Sat Sep 09 18:25:06 2006 -0700 +++ b/mercurial/commands.py Sat Sep 09 18:25:07 2006 -0700 @@ -2105,10 +2105,12 @@ other = hg.repository(ui, source) ui.status(_('pulling from %s\n') % (source)) revs = None - if opts['rev'] and not other.local(): - raise util.Abort(_("pull -r doesn't work for remote repositories yet")) - elif opts['rev']: - revs = [other.lookup(rev) for rev in opts['rev']] + 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) modheads = repo.pull(other, heads=revs, force=opts['force']) return postincoming(ui, repo, modheads, opts['update']) diff -r ef1032c223e7 -r 6ca49c5fe268 mercurial/hg.py --- a/mercurial/hg.py Sat Sep 09 18:25:06 2006 -0700 +++ b/mercurial/hg.py Sat Sep 09 18:25:07 2006 -0700 @@ -176,9 +176,10 @@ else: revs = None if rev: - if not src_repo.local(): - raise util.Abort(_("clone by revision not supported yet " - "for remote repositories")) + if 'lookup' not in src_repo.capabilities: + raise util.Abort(_("src repository does not support revision " + "lookup and so doesn't support clone by " + "revision")) revs = [src_repo.lookup(r) for r in rev] if dest_repo.local(): diff -r ef1032c223e7 -r 6ca49c5fe268 mercurial/localrepo.py --- a/mercurial/localrepo.py Sat Sep 09 18:25:06 2006 -0700 +++ b/mercurial/localrepo.py Sat Sep 09 18:25:07 2006 -0700 @@ -15,7 +15,7 @@ demandload(globals(), "os revlog time util") class localrepository(repo.repository): - capabilities = () + capabilities = ('lookup', 'changegroupsubset') def __del__(self): self.transhandle = None @@ -1241,6 +1241,8 @@ if heads is None: cg = remote.changegroup(fetch, 'pull') else: + if 'changegroupsubset' not in remote.capabilities: + raise util.Abort(_("Partial pull cannot be done because other repository doesn't support changegroupsubset.")) cg = remote.changegroupsubset(fetch, heads, 'pull') return self.addchangegroup(cg, 'pull', remote.url()) finally: