[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