Mercurial > hg
changeset 26482:d2e69584e330
templatekw: allow getlatesttags() to match a specific tag pattern
This will allow the latest class of tag to be found, such as a release candidate
or final build, instead of just the absolute latest. It will be exposed in a
future patch.
It's unfortunate that the original 'latesttags' cache can't be used to determine
the proper values, but it isn't fully populated for the entire repo. For
example, the {latesttagdistance} keyword on the Mecurial repo builds the cache
up back to the revision for 1.4. If the pattern was 're:^0\.\d$', that wouldn't
be in the cache. Maybe this can be optimized some other way, but for now, this
is the simpliest implementation.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 23 Aug 2015 23:22:55 -0400 |
parents | 7d132557e44a |
children | e94f93043a4e |
files | mercurial/templatekw.py |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templatekw.py Sat Aug 22 22:52:18 2015 -0400 +++ b/mercurial/templatekw.py Sun Aug 23 23:22:55 2015 -0400 @@ -122,14 +122,21 @@ revcache['files'] = repo.status(ctx.p1(), ctx)[:3] return revcache['files'] -def getlatesttags(repo, ctx, cache): +def getlatesttags(repo, ctx, cache, pattern=None): '''return date, distance and name for the latest tag of rev''' - if 'latesttags' not in cache: + cachename = 'latesttags' + if pattern is not None: + cachename += '-' + pattern + match = util.stringmatcher(pattern)[2] + else: + match = util.always + + if cachename not in cache: # Cache mapping from rev to a tuple with tag date, tag # distance and tag name - cache['latesttags'] = {-1: (0, 0, ['null'])} - latesttags = cache['latesttags'] + cache[cachename] = {-1: (0, 0, ['null'])} + latesttags = cache[cachename] rev = ctx.rev() todo = [rev] @@ -139,7 +146,8 @@ continue ctx = repo[rev] tags = [t for t in ctx.tags() - if (repo.tagtype(t) and repo.tagtype(t) != 'local')] + if (repo.tagtype(t) and repo.tagtype(t) != 'local' + and match(t))] if tags: latesttags[rev] = ctx.date()[0], 0, [t for t in sorted(tags)] continue