[PATCH 1 of 2] tags: Log events related to tags cache

Siddharth Agarwal sid0 at fb.com
Sun Mar 23 20:09:13 CDT 2014


On 03/22/2014 05:21 PM, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gps at mozilla.com>
> # Date 1395532277 25200
> #      Sat Mar 22 16:51:17 2014 -0700
> # Node ID 4041f83efd1de680c82b65c776f85b642a59754a
> # Parent  c7d543eebe1a703eeb8bb02ee3a2ae2e08746c4d
> tags: Log events related to tags cache

"Log" should be lowercase.

> We now log when .hg/cache/tags data is built from scratch by reading
> manifests and when the file is written.
>
> diff --git a/mercurial/tags.py b/mercurial/tags.py
> --- a/mercurial/tags.py
> +++ b/mercurial/tags.py
> @@ -10,16 +10,17 @@
>   # Eventually, it could take care of updating (adding/removing/moving)
>   # tags too.
>   
>   from node import nullid, bin, hex, short
>   from i18n import _
>   import encoding
>   import error
>   import errno
> +import time
>   
>   def findglobaltags(ui, repo, alltags, tagtypes):
>       '''Find global tags in repo by reading .hgtags from every head that
>       has a distinct version of it, using a cache to avoid excess work.
>       Updates the dicts alltags, tagtypes in place: alltags maps tag name
>       to (node, hist) pair (see _readtags() below), and tagtypes maps tag
>       name to tag type ("global" in this case).'''
>       # This is so we can be lazy and assume alltags contains only global
> @@ -229,16 +230,18 @@ def _readtagcache(ui, repo):
>   
>       # N.B. in case 4 (nodes destroyed), "new head" really means "newly
>       # exposed".
>       if not len(repo.file('.hgtags')):
>           # No tags have ever been committed, so we can avoid a
>           # potentially expensive search.
>           return (repoheads, cachefnode, None, True)
>   
> +    starttime = time.time()
> +
>       newheads = [head
>                   for head in repoheads
>                   if head not in set(cacheheads)]
>   
>       # Now we have to lookup the .hgtags filenode for every new head.
>       # This is the most expensive part of finding tags, so performance
>       # depends primarily on the size of newheads.  Worst case: no cache
>       # file, so newheads == repoheads.
> @@ -246,27 +249,35 @@ def _readtagcache(ui, repo):
>           cctx = repo[head]
>           try:
>               fnode = cctx.filenode('.hgtags')
>               cachefnode[head] = fnode
>           except error.LookupError:
>               # no .hgtags file on this head
>               pass
>   
> +    duration = time.time() - starttime
> +    ui.log('cache',

'cache' isn't descriptive enough, I think. 'tags' or 'tagscache'?

> +           'Resolved %d tags cache entries from %d manifests in %0.2f seconds\n',

I'd prefer lowercase 'r' in 'resolved'.

> +           len(cachefnode), len(newheads), duration)
> +
>       # Caller has to iterate over all heads, but can use the filenodes in
>       # cachefnode to get to each .hgtags revision quickly.
>       return (repoheads, cachefnode, None, True)
>   
>   def _writetagcache(ui, repo, heads, tagfnode, cachetags):
>   
>       try:
>           cachefile = repo.opener('cache/tags', 'w', atomictemp=True)
>       except (OSError, IOError):
>           return
>   
> +    ui.log('cache', 'Writing tags cache file with %d heads and %d tags\n',

lowercase 'w' here too.

> +            len(heads), len(cachetags))
> +
>       realheads = repo.heads()            # for sanity checks below
>       for head in heads:
>           # temporary sanity checks; these can probably be removed
>           # once this code has been in crew for a few weeks
>           assert head in repo.changelog.nodemap, \
>                  'trying to write non-existent node %s to tag cache' % short(head)
>           assert head in realheads, \
>                  'trying to write non-head %s to tag cache' % short(head)
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list