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 |
|
|
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,6 +790,7 b' class hgtagsfnodescache:' | |||||
780 | if node == self._repo.nullid: |
|
790 | if node == self._repo.nullid: | |
781 | return node |
|
791 | return node | |
782 |
|
792 | |||
|
793 | if rev is None: | |||
783 | rev = self._repo.changelog.rev(node) |
|
794 | rev = self._repo.changelog.rev(node) | |
784 |
|
795 | |||
785 | self.lookupcount += 1 |
|
796 | self.lookupcount += 1 |
General Comments 0
You need to be logged in to leave comments.
Login now