[PATCH 2 of 5] extdata: add revset support for extdata
FUJIWARA Katsunori
foozy at lares.dti.ne.jp
Fri Sep 23 06:49:19 EDT 2016
At Thu, 22 Sep 2016 13:21:36 -0500,
Matt Mackall wrote:
>
> # HG changeset patch
> # User Matt Mackall <mpm at selenic.com>
> # Date 1474293900 18000
> # Mon Sep 19 09:05:00 2016 -0500
> # Node ID 9c8847df32a0c5045e60aded2e03a9c97507f909
> # Parent 19bf2776dfe39befdc479253e1e7d030b41c08f9
> extdata: add revset support for extdata
>
> This inserts extdata into the revset function support. Planned
> extensions of extdata support arguments, so this is the most
> appropriate place for it.
>
> Unfortunately, the registrar framework is not a good fit here. First,
> setting an appropriate load point is still an unsolved problem (we
> want the code to live in revset.py, but that module may never be loaded).
> Second, registered methods become global and the data sources are likely to be
> repo-specific. This won't work well in a context like hgwebdir.
Is there any reason not to define extdata() revset predicate (or
template function), which requires external data source name like as
extdata('filedata') ? (for convenience ?)
> diff -r 19bf2776dfe3 -r 9c8847df32a0 mercurial/revset.py
> --- a/mercurial/revset.py Tue Sep 13 14:14:05 2016 -0500
> +++ b/mercurial/revset.py Mon Sep 19 09:05:00 2016 -0500
> @@ -432,6 +432,14 @@
> return fn(repo, subset, b, order)
> return fn(repo, subset, b)
>
> + # avoid import cycle
> + from . import scmutil
> +
> + # check external data sources (can't override built-ins)
> + if f in scmutil.extdatasources(repo):
> + extdata = scmutil.extdatasource(repo, f)
> + return baseset([r for r in subset if r in extdata])
> +
> keep = lambda fn: getattr(fn, '__doc__', None) is not None
>
> syms = [s for (s, fn) in symbols.items() if keep(fn)]
> diff -r 19bf2776dfe3 -r 9c8847df32a0 tests/test-revset.t
> --- a/tests/test-revset.t Tue Sep 13 14:14:05 2016 -0500
> +++ b/tests/test-revset.t Mon Sep 19 09:05:00 2016 -0500
> @@ -3540,6 +3540,31 @@
> 1
> 3
>
> +test extdata revset support
> +
> + $ echo "[extdata]" >> .hg/hgrc
> + $ echo "filedata = file:extdata.txt" >> .hg/hgrc
> + $ echo "shelldata = shell:cat extdata.txt | grep 2" >> .hg/hgrc
> + $ echo "2" > extdata.txt
> + $ echo "3" >> extdata.txt
> +
> + $ hg log -qr "filedata()"
> + 2:842c8a27ccf2
> + 3:b7e1eaa35f23
> + $ hg log -qr "shelldata()"
> + 2:842c8a27ccf2
> +
> +we don't fix up relative file URLs, but we do run shell commands in repo root
> +
> + $ mkdir sub
> + $ cd sub
> + $ hg log -qr "filedata()"
> + abort: error: No such file or directory
> + [255]
> + $ hg log -qr "shelldata()"
> + 2:842c8a27ccf2
> + $ cd ..
> +
> test error message of bad revset
> $ hg log -r 'foo\\'
> hg: parse error at 3: syntax error in revset 'foo\\'
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
----------------------------------------------------------------------
[FUJIWARA Katsunori] foozy at lares.dti.ne.jp
More information about the Mercurial-devel
mailing list