template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
$ hg init
$ echo a > a
$ hg ci -qAm 'add a'
$ echo b > b
$ hg ci -qAm 'add b'
$ hg up -qC 0
$ hg rm a
$ hg ci -m 'rm a'
created new head
$ hg up -qC 1
$ rm a
Local deleted a file, remote removed
Should fail, since there are deleted files:
$ hg merge
abort: uncommitted changes
(use 'hg status' to list changes)
[255]
Should succeed with --force:
$ hg -v merge --force
resolving manifests
removing a
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Should show 'a' as removed:
$ hg status
R a
$ hg ci -m merge
Should not show 'a':
$ hg manifest
b