[PATCH RFC] highlight: add highlightfiles config option, which takes a fileset (issue3005)

Yuya Nishihara yuya at tcha.org
Thu Sep 17 08:28:31 CDT 2015


On Wed, 16 Sep 2015 22:36:57 +0800, Anton Shestakov wrote:
> # HG changeset patch
> # User Anton Shestakov <av6 at dwimlabs.net>
> # Date 1442413836 -28800
> #      Wed Sep 16 22:30:36 2015 +0800
> # Node ID ee1b85c5616ece49f53095adfe85e90c3efeb48b
> # Parent  7df5d476087392e217699a41c11fbe8cd48713b2
> highlight: add highlightfiles config option, which takes a fileset (issue3005)
> 
> Highlight extension lacked a way to limit files by size, by extension, and/or
> by any other part of file path. A good solution would be to use a fileset,
> since it can check file path, extension and size (and more) in one expression.
> So this change introduces such an option, highlighfiles, which takes a fileset
> and on each request decides if the requested file should be highlighted.
> 
> The default "size('<5M')" is, in a way, suggested in issue3005.
> 
> checkfctx() limits the amount of work to just one file (subset kwarg in
> fileset.matchctx()).
> 
> Monkey-patching works around issue4568, otherwise using filesets here while
> running hgweb in directory mode would say, for example, "Abort: **.py not under
> root", but this fix is very local and probably far from ideal. I suspect there
> to be a way to fix this for the whole hgweb and resolve the issue, but I don't
> know how to do it.

> +def checkfctx(fctx, expr):
> +    ctx = fctx.changectx()
> +    tree = fileset.parse(expr)
> +    mctx = fileset.matchctx(ctx, subset=[fctx.path()], status=None)
> +    repo = ctx.repo()
> +    # To allow matching file names in the fileset in hgweb directory mode.
> +    # See issue4568.
> +    object.__setattr__(repo, 'getcwd', lambda: repo.root)

It monkey-patches a repo object which lives long in the current thread. So
once you've visited a highlighted page, repo.getcwd() is faked after that.
I'm not sure if it can cause a real problem, but it smells bad.


More information about the Mercurial-devel mailing list