[PATCH 1 of 7] tags: extract fnode retrieval in its own function
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Mar 28 06:16:56 UTC 2017
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1490673691 -7200
# Tue Mar 28 06:01:31 2017 +0200
# Node ID 1e77e505e7bacf59d1200714dc92e827523d7301
# Parent e6fd7930cf0b37710e379de37b7d87d5c1ea5dc9
# EXP-Topic tags
# Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
# hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r 1e77e505e7ba
tags: extract fnode retrieval in its own function
My main goal here is to be able to reuse this logic easily. As a side effect
this important logic is now insulated and the code is clearer.
diff --git a/mercurial/tags.py b/mercurial/tags.py
--- a/mercurial/tags.py
+++ b/mercurial/tags.py
@@ -341,15 +341,27 @@ def _readtagcache(ui, repo):
# potentially expensive search.
return ([], {}, valid, None, True)
- starttime = util.timer()
# 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.
+ cachefnode = _getfnodes(ui, repo, repoheads)
+
+ # Caller has to iterate over all heads, but can use the filenodes in
+ # cachefnode to get to each .hgtags revision quickly.
+ return (repoheads, cachefnode, valid, None, True)
+
+def _getfnodes(ui, repo, nodes):
+ """return fnode for .hgtags in a list of node
+
+ return value is a {node: fnode} mapping. their will be no entry for node
+ without a '.hgtags' file.
+ """
+ starttime = util.timer()
fnodescache = hgtagsfnodescache(repo.unfiltered())
cachefnode = {}
- for head in reversed(repoheads):
+ for head in reversed(nodes):
fnode = fnodescache.getfnode(head)
if fnode != nullid:
cachefnode[head] = fnode
@@ -361,10 +373,7 @@ def _readtagcache(ui, repo):
'%d/%d cache hits/lookups in %0.4f '
'seconds\n',
fnodescache.hitcount, fnodescache.lookupcount, 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, valid, None, True)
+ return cachefnode
def _writetagcache(ui, repo, valid, cachetags):
filename = _filename(repo)
More information about the Mercurial-devel
mailing list