[PATCH] revset: fix #branch in urls for outgoing()

Adrian Buehlmann adrian at cadifra.com
Tue Oct 5 10:57:51 CDT 2010


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1286271253 -7200
# Node ID 8243452c6a1eefda86b2a90abe7e5fa6ebb47280
# Parent  f365aed7cc5b4ce5f42d1e2d20001e2dc7951c5b
revset: fix #branch in urls for outgoing()

hg log -r 'outgoing(..)' ignored #branch in some cases.
This patch fixes it.

The cases where it misbehaved are now covered by the added
test-revset-outgoing.t

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 <<EOF
+  > [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' 
+


More information about the Mercurial-devel mailing list