Mercurial > hg
changeset 12928:a5f7f1e9340e
revsets: let p1() and p2() return parents of working dir
This patch makes the 'set' argument to revset functions p1() and p2()
optional. If no argument is given, p1() and p2() return the first or second
parent of the working directory.
If the working directory is not an in-progress merge (no 2nd parent), p2()
returns the empty set. For a checkout of the null changeset, both p1() and
p2() return the empty set.
author | Kevin Bullock <kbullock@ringworld.org> |
---|---|
date | Thu, 04 Nov 2010 16:59:03 -0500 |
parents | b6245c2470a9 |
children | 515c2786e1cf |
files | mercurial/revset.py tests/test-revset-dirstate-parents.t |
diffstat | 2 files changed, 56 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Thu Nov 04 09:04:37 2010 +0100 +++ b/mercurial/revset.py Thu Nov 04 16:59:03 2010 -0500 @@ -202,9 +202,12 @@ return [r for r in subset if r == l] def p1(repo, subset, x): - """``p1(set)`` - First parent of changesets in set. + """``p1([set])`` + First parent of changesets in set, or the working directory. """ + if x is None: + return [repo[x].parents()[0].rev()] + ps = set() cl = repo.changelog for r in getset(repo, range(len(repo)), x): @@ -212,9 +215,16 @@ return [r for r in subset if r in ps] def p2(repo, subset, x): - """``p2(set)`` - Second parent of changesets in set. + """``p2([set])`` + Second parent of changesets in set, or the working directory. """ + if x is None: + ps = repo[x].parents() + try: + return [ps[1].rev()] + except IndexError: + return [] + ps = set() cl = repo.changelog for r in getset(repo, range(len(repo)), x):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-revset-dirstate-parents.t Thu Nov 04 16:59:03 2010 -0500 @@ -0,0 +1,42 @@ + $ HGENCODING=utf-8 + $ export HGENCODING + + $ try() { + > hg debugrevspec --debug $@ + > } + + $ log() { + > hg log --template '{rev}\n' -r "$1" + > } + + $ hg init repo + $ cd repo + + $ try 'p1()' + ('func', ('symbol', 'p1'), None) + -1 + $ try 'p2()' + ('func', ('symbol', 'p2'), None) + +null revision + $ log 'p1()' + $ log 'p2()' + +working dir with a single parent + $ echo a > a + $ hg ci -Aqm0 + $ log 'p1()' + 0 + $ log 'p2()' + +merge in progress + $ echo b > b + $ hg ci -Aqm1 + $ hg up -q 0 + $ echo c > c + $ hg ci -Aqm2 + $ hg merge -q + $ log 'p1()' + 2 + $ log 'p2()' + 1