[PATCH 6 of 7] tags: extract tags computation from fnodes in its own function

Ryan McElroy rm at fb.com
Tue Mar 28 06:10:12 EDT 2017


On 3/28/17 7:17 AM, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
> # Date 1490674092 -7200
> #      Tue Mar 28 06:08:12 2017 +0200
> # Node ID 3d8a09214760799868b472b97e964e88f7ec8fd5
> # Parent  d5c70d5f7de740d3fa946318998f0f0c1204e4eb
> # EXP-Topic tags
> tags: extract tags computation from fnodes in its own function

s/in/into (or just "to")

>
> I'm about to introduce code that needs to perform such computation on
> "arbitrary" node. The logic is extract in its own function for reuse.

s/node/nodes
s/extract/extracted
s/in/into (or just "to")
>
> diff --git a/mercurial/tags.py b/mercurial/tags.py
> --- a/mercurial/tags.py
> +++ b/mercurial/tags.py
> @@ -85,19 +85,18 @@ def findglobaltags(ui, repo):
>   
>       The tags cache is read and updated as a side-effect of calling.
>       '''
> -    alltags = {}
> -
>       (heads, tagfnode, valid, cachetags, shouldwrite) = _readtagcache(ui, repo)
>       if cachetags is not None:
>           assert not shouldwrite
>           # XXX is this really 100% correct?  are there oddball special
>           # cases where a global tag should outrank a local tag but won't,
>           # because cachetags does not contain rank info?
> +        alltags = {}
>           _updatetags(cachetags, alltags)
>           return alltags
>   
>       seen = set()  # set of fnode
> -    fctx = None
> +    fnodes = []
>       for head in reversed(heads):  # oldest to newest
>           assert head in repo.changelog.nodemap, \
>                  "tag cache returned bogus head %s" % short(head)
> @@ -105,19 +104,32 @@ def findglobaltags(ui, repo):
>           fnode = tagfnode.get(head)
>           if fnode and fnode not in seen:
>               seen.add(fnode)
> -            if not fctx:
> -                fctx = repo.filectx('.hgtags', fileid=fnode)
> -            else:
> -                fctx = fctx.filectx(fnode)
> +            fnodes.append(fnode)
>   
> -            filetags = _readtags(ui, repo, fctx.data().splitlines(), fctx)
> -            _updatetags(filetags, alltags)
> +    alltags = _tagsfromfnodes(ui, repo, fnodes)
>   
>       # and update the cache (if necessary)
>       if shouldwrite:
>           _writetagcache(ui, repo, valid, alltags)
>       return alltags
>   
> +def _tagsfromfnodes(ui, repo, fnodes):
> +    """return a tagsmap from a list of file-node
> +
> +    tagsmap: tag name to (node, hist) 2-tuples.
> +
> +    The order of the list matters."""
> +    alltags = {}
> +    fctx = None
> +    for fnode in fnodes:
> +        if fctx is None:
> +            fctx = repo.filectx('.hgtags', fileid=fnode)
> +        else:
> +            fctx = fctx.filectx(fnode)
> +        filetags = _readtags(ui, repo, fctx.data().splitlines(), fctx)
> +        _updatetags(filetags, alltags)
> +    return alltags
> +
>   def readlocaltags(ui, repo, alltags, tagtypes):
>       '''Read local tags in repo. Update alltags and tagtypes.'''
>       try:
>

Code changes lgtm.


More information about the Mercurial-devel mailing list