diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -456,12 +456,15 @@ def outgoing(repo, subset, x): dest = l and getstring(l[0], _("outgoing wants a repository path")) or '' dest = repo.ui.expandpath(dest or 'default-push', dest or 'default') dest, branches = hg.parseurl(dest) + revs, checkout = hg.addbranchrevs(repo, repo, branches, []) + if revs: + revs = [repo.lookup(rev) for rev in revs] other = hg.repository(hg.remoteui(repo, {}), dest) repo.ui.pushbuffer() o = discovery.findoutgoing(repo, other) repo.ui.popbuffer() cl = repo.changelog - o = set([cl.rev(r) for r in repo.changelog.nodesbetween(o, None)[0]]) + o = set([cl.rev(r) for r in repo.changelog.nodesbetween(o, revs)[0]]) return [r for r in subset if r in o] def tagged(repo, subset, x): diff --git a/tests/test-revset-outgoing.t b/tests/test-revset-outgoing.t new file mode 100644 --- /dev/null +++ b/tests/test-revset-outgoing.t @@ -0,0 +1,92 @@ + $ cat >> $HGRCPATH < [extensions] + > graphlog= + > + > [alias] + > tlog = log --template "{rev}:{node|short}: '{desc}' {branches}\n" + > tglog = tlog -G + > tout = out --template "{rev}:{node|short}: '{desc}' {branches}\n" + > EOF + + $ hg init a + $ cd a + + $ echo a > a + $ hg ci -Aqm0 + + $ echo foo >> a + $ hg ci -Aqm1 + + $ hg up -q 0 + + $ hg branch stable + marked working directory as branch stable + $ echo bar >> a + $ hg ci -qm2 + + $ hg tglog + @ 2:7bee6c3bea3a: '2' stable + | + | o 1:3560197d8331: '1' + |/ + o 0:f7b1eb17ad24: '0' + + + $ cd .. + + $ hg clone -q a#stable b + + $ cd b + $ cat .hg/hgrc + [paths] + default = */a#stable (glob) + + $ echo red >> a + $ hg ci -qm3 + + $ hg up -q default + + $ echo blue >> a + $ hg ci -qm4 + + $ hg tglog + @ 3:f0461977a3db: '4' + | + | o 2:1d4099801a4e: '3' stable + | | + | o 1:7bee6c3bea3a: '2' stable + |/ + o 0:f7b1eb17ad24: '0' + + + $ hg tout + comparing with */a (glob) + searching for changes + 2:1d4099801a4e: '3' stable + + $ hg tlog -r 'outgoing()' + 2:1d4099801a4e: '3' stable + + $ hg tout ../a#default + comparing with ../a + searching for changes + 3:f0461977a3db: '4' + + $ hg tlog -r 'outgoing("../a#default")' + 3:f0461977a3db: '4' + + $ echo "green = ../a#default" >> .hg/hgrc + + $ cat .hg/hgrc + [paths] + default = */a#stable (glob) + green = ../a#default + + $ hg tout green + comparing with */a (glob) + searching for changes + 3:f0461977a3db: '4' + + $ hg tlog -r 'outgoing("green")' + 3:f0461977a3db: '4' +