Mercurial > hg
changeset 34457:2c3b8fa3211b
revset: add experimental support for extdata
This is minimal and non-controversial implementation of extdata() revset.
Originally extdata sources were exposed to the symbol namespace, but I've
changed it to a plain function for simplicity.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 01 Oct 2017 10:50:00 +0100 |
parents | 7757cc48b766 |
children | a1b89c8ad32d |
files | mercurial/revset.py tests/test-extdata.t |
diffstat | 2 files changed, 67 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Tue Sep 13 14:14:05 2016 -0500 +++ b/mercurial/revset.py Sun Oct 01 10:50:00 2017 +0100 @@ -786,6 +786,17 @@ contentdivergent = obsmod.getrevs(repo, 'contentdivergent') return subset & contentdivergent +@predicate('extdata(source)', safe=False, weight=100) +def extdata(repo, subset, x): + """Changesets in the specified extdata source. (EXPERIMENTAL)""" + # i18n: "extdata" is a keyword + args = getargsdict(x, 'extdata', 'source') + source = getstring(args.get('source'), + # i18n: "extdata" is a keyword + _('extdata takes at least 1 string argument')) + data = scmutil.extdatasource(repo, source) + return subset & baseset(data) + @predicate('extinct()', safe=True) def extinct(repo, subset, x): """Obsolete changesets with obsolete descendants only.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extdata.t Sun Oct 01 10:50:00 2017 +0100 @@ -0,0 +1,56 @@ + $ hg init repo + $ cd repo + $ for n in 0 1 2 3; do + > echo $n > $n + > hg ci -qAm $n + > done + +test revset support + + $ cat <<'EOF' >> .hg/hgrc + > [extdata] + > filedata = file:extdata.txt + > shelldata = shell:cat extdata.txt | grep 2 + > EOF + $ cat <<'EOF' > extdata.txt + > 2 + > 3 + > EOF + + $ hg log -qr "extdata(filedata)" + 2:f6ed99a58333 + 3:9de260b1e88e + $ hg log -qr "extdata(shelldata)" + 2:f6ed99a58333 + +test weight of extdata() revset + + $ hg debugrevspec -p optimized "extdata(filedata) & 3" + * optimized: + (andsmally + (func + (symbol 'extdata') + (symbol 'filedata')) + (symbol '3')) + 3 + +test bad extdata() revset source + + $ hg log -qr "extdata()" + hg: parse error: extdata takes at least 1 string argument + [255] + $ hg log -qr "extdata(unknown)" + abort: unknown extdata source 'unknown' + [255] + +we don't fix up relative file URLs, but we do run shell commands in repo root + + $ mkdir sub + $ cd sub + $ hg log -qr "extdata(filedata)" + abort: error: No such file or directory + [255] + $ hg log -qr "extdata(shelldata)" + 2:f6ed99a58333 + + $ cd ..