# HG changeset patch # User Pulkit Goyal # Date 1553003535 -10800 # Node ID 2f8147521e59dbdf64146a3c955956317b7b5503 # Parent 2d428b859282ba0684f3aab65f4ed31d0454f6a3 branchcache: add functions to validate changelog nodes This patch adds functions to validate closed nodes, validate nodes for a certain branch and for all the branches. These functions will be used in upcoming patches. Differential Revision: https://phab.mercurial-scm.org/D6207 diff -r 2d428b859282 -r 2f8147521e59 mercurial/branchmap.py --- a/mercurial/branchmap.py Mon Apr 15 14:32:47 2019 -0700 +++ b/mercurial/branchmap.py Tue Mar 19 16:52:15 2019 +0300 @@ -126,6 +126,10 @@ def clear(self): self._per_filter.clear() +def _unknownnode(node): + """ raises ValueError when branchcache found a node which does not exists + """ + raise ValueError(r'node %s does not exist' % pycompat.sysstr(hex(node))) class branchcache(object): """A dict like object that hold branches heads cache. @@ -173,6 +177,32 @@ if self._hasnode is None: self._hasnode = lambda x: True + def _verifyclosed(self): + """ verify the closed nodes we have """ + if self._closedverified: + return + for node in self._closednodes: + if not self._hasnode(node): + _unknownnode(node) + + self._closedverified = True + + def _verifybranch(self, branch): + """ verify head nodes for the given branch. If branch is None, verify + for all the branches """ + if branch not in self._entries or branch in self._verifiedbranches: + return + for n in self._entries[branch]: + if not self._hasnode(n): + _unknownnode(n) + + self._verifiedbranches.add(branch) + + def _verifyall(self): + """ verifies nodes of all the branches """ + for b in self._entries: + self._verifybranch(b) + def __iter__(self): return iter(self._entries)