# HG changeset patch # User Mads Kiilerich # Date 2016-03-13 01:06:21 # Node ID 0706d60d070f7e1c545c08c1ba774de1e7a792b9 # Parent 1435a8e9b5fe38cfe900e0a75fefab046af73dd6 cache: remove branch revision file before rewriting the branch name file New branch names are usually appended to the branch name file. If that fails or the file has been modified by another process, it is rewritten. That left a small opportunity that there could be references to non-existent entries in the file while it was rewritten. To avoid that, remove the revision branch cache file with the references to the branch name file before rewriting the branch name file. Worst case, when interrupted at the wrong time, the cache will be lost and rebuilt next time. It is unknown if this fixes a real problem that ever happened. diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -461,6 +461,8 @@ class revbranchcache(object): self._rbcnamescount = 0 self._rbcrevslen = 0 if self._rbcnamescount == 0: + # before rewriting names, make sure references are removed + repo.vfs.unlinkpath(_rbcrevs, ignoremissing=True) f = repo.vfs.open(_rbcnames, 'wb') f.write('\0'.join(encoding.fromlocal(b) for b in self._names[self._rbcnamescount:]))