##// END OF EJS Templates
tags-cache: directly operate on rev-num warming hgtagsfnodescache...
marmoute -
r52491:2664cacd default
parent child Browse files
Show More
@@ -83,9 +83,7 b' from .utils import stringutil'
83 def warm_cache(repo):
83 def warm_cache(repo):
84 """ensure the cache is properly filled"""
84 """ensure the cache is properly filled"""
85 unfi = repo.unfiltered()
85 unfi = repo.unfiltered()
86 tonode = unfi.changelog.node
86 _getfnodes(repo.ui, repo, revs=unfi.changelog.revs())
87 nodes = [tonode(r) for r in unfi.changelog.revs()]
88 _getfnodes(repo.ui, repo, nodes)
89
87
90
88
91 def fnoderevs(ui, repo, revs):
89 def fnoderevs(ui, repo, revs):
@@ -498,7 +496,7 b' def _readtagcache(ui, repo):'
498 return (repoheads, cachefnode, valid, None, True)
496 return (repoheads, cachefnode, valid, None, True)
499
497
500
498
501 def _getfnodes(ui, repo, nodes):
499 def _getfnodes(ui, repo, nodes=None, revs=None):
502 """return .hgtags fnodes for a list of changeset nodes
500 """return .hgtags fnodes for a list of changeset nodes
503
501
504 Return value is a {node: fnode} mapping. There will be no entry for nodes
502 Return value is a {node: fnode} mapping. There will be no entry for nodes
@@ -510,9 +508,21 b' def _getfnodes(ui, repo, nodes):'
510 validated_fnodes = set()
508 validated_fnodes = set()
511 unknown_entries = set()
509 unknown_entries = set()
512
510
511 if nodes is None and revs is None:
512 raise error.ProgrammingError("need to specify either nodes or revs")
513 elif nodes is not None and revs is None:
514 to_rev = repo.changelog.index.rev
515 nodes_revs = ((n, to_rev(n)) for n in nodes)
516 elif nodes is None and revs is not None:
517 to_node = repo.changelog.node
518 nodes_revs = ((to_node(r), r) for r in revs)
519 else:
520 msg = "need to specify only one of nodes or revs"
521 raise error.ProgrammingError(msg)
522
513 flog = None
523 flog = None
514 for node in nodes:
524 for node, rev in nodes_revs:
515 fnode = fnodescache.getfnode(node)
525 fnode = fnodescache.getfnode(node=node, rev=rev)
516 if fnode != repo.nullid:
526 if fnode != repo.nullid:
517 if fnode not in validated_fnodes:
527 if fnode not in validated_fnodes:
518 if flog is None:
528 if flog is None:
@@ -765,7 +775,7 b' class hgtagsfnodescache:'
765 # TODO: zero fill entire record, because it's invalid not missing?
775 # TODO: zero fill entire record, because it's invalid not missing?
766 self._raw.extend(b'\xff' * (wantedlen - rawlen))
776 self._raw.extend(b'\xff' * (wantedlen - rawlen))
767
777
768 def getfnode(self, node, computemissing=True):
778 def getfnode(self, node, computemissing=True, rev=None):
769 """Obtain the filenode of the .hgtags file at a specified revision.
779 """Obtain the filenode of the .hgtags file at a specified revision.
770
780
771 If the value is in the cache, the entry will be validated and returned.
781 If the value is in the cache, the entry will be validated and returned.
@@ -780,7 +790,8 b' class hgtagsfnodescache:'
780 if node == self._repo.nullid:
790 if node == self._repo.nullid:
781 return node
791 return node
782
792
783 rev = self._repo.changelog.rev(node)
793 if rev is None:
794 rev = self._repo.changelog.rev(node)
784
795
785 self.lookupcount += 1
796 self.lookupcount += 1
786
797
General Comments 0
You need to be logged in to leave comments. Login now