Mercurial > hg
changeset 39600:87428152e820
templatekw: add experimental {status} keyword
This is another example of fctx-based keywords. I think this is somewhat
useful in log templates.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 29 Jul 2018 22:04:01 +0900 |
parents | a5da906306c9 |
children | 84d6e9a2b104 |
files | mercurial/templatekw.py tests/test-template-keywords.t |
diffstat | 2 files changed, 35 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templatekw.py Sun Jul 29 21:52:01 2018 +0900 +++ b/mercurial/templatekw.py Sun Jul 29 22:04:01 2018 +0900 @@ -301,6 +301,15 @@ revcache['filestatusall'] = listall return revcache['filestatus'] +def _getfilestatusmap(context, mapping, listall=False): + revcache = context.resource(mapping, 'revcache') + if 'filestatusmap' not in revcache or revcache['filestatusall'] < listall: + stat = _getfilestatus(context, mapping, listall=listall) + revcache['filestatusmap'] = statmap = {} + for char, files in zip(pycompat.iterbytestr('MAR!?IC'), stat): + statmap.update((f, char) for f in files) + return revcache['filestatusmap'] # {path: statchar} + def _showfilesbystat(context, mapping, name, index): stat = _getfilestatus(context, mapping) files = stat[index] @@ -595,6 +604,19 @@ fctx = context.resource(mapping, 'fctx') return fctx.size() +# requires 'fctx' to denote {status} depends on (ctx, path) pair +@templatekeyword('status', requires={'ctx', 'fctx', 'revcache'}) +def showstatus(context, mapping): + """String. Status code of the current file. (EXPERIMENTAL)""" + path = templateutil.runsymbol(context, mapping, 'path') + path = templateutil.stringify(context, mapping, path) + if not path: + return + statmap = _getfilestatusmap(context, mapping) + if path not in statmap: + statmap = _getfilestatusmap(context, mapping, listall=True) + return statmap.get(path) + @templatekeyword("successorssets", requires={'repo', 'ctx'}) def showsuccessorssets(context, mapping): """Returns a string of sets of successors for a changectx. Format used
--- a/tests/test-template-keywords.t Sun Jul 29 21:52:01 2018 +0900 +++ b/tests/test-template-keywords.t Sun Jul 29 22:04:01 2018 +0900 @@ -789,12 +789,19 @@ Test file attributes: - $ hg log -l1 -T '{files % "{pad(size, 3, left=True)} {path}\n"}' - a - 0 b - 7 fifth - fourth - 13 third + $ hg log -l1 -T '{files % "{status} {pad(size, 3, left=True)} {path}\n"}' + R a + A 0 b + A 7 fifth + R fourth + M 13 third + +Test file status including clean ones: + + $ hg log -r9 -T '{files("**") % "{status} {path}\n"}' + A a + C fourth + C third Test index keyword: