diff -r bd7359c18d69 -r 16efed18ae4e mercurial/branching/rev_cache.py --- a/mercurial/branching/rev_cache.py Tue Sep 24 15:44:10 2024 +0200 +++ b/mercurial/branching/rev_cache.py Wed Sep 25 12:49:32 2024 +0200 @@ -146,6 +146,7 @@ self._names = [] # branch names in local encoding with static index self._rbcrevs = rbcrevs(bytearray()) self._rbcsnameslen = 0 # length of names read at _rbcsnameslen + self._force_overwrite = False v1_fallback = False try: try: @@ -157,6 +158,7 @@ # consider stop doing this many version after hg-6.9 release bndata = repo.cachevfs.read(_rbc_legacy_names) v1_fallback = True + self._force_overwrite = True self._rbcsnameslen = len(bndata) # for verification before writing if bndata: self._names = [ @@ -198,7 +200,6 @@ self._names = [] self._rbcnamescount = len(self._names) # number of names read at # _rbcsnameslen - self._force_overwrite = False def _clear(self): self._rbcsnameslen = 0 @@ -320,7 +321,7 @@ step = b'' try: # write the new names - if self._rbcnamescount < len(self._names): + if self._force_overwrite or self._rbcnamescount < len(self._names): wlock = repo.wlock(wait=False) step = b' names' self._writenames(repo) @@ -345,15 +346,24 @@ def _writenames(self, repo): """write the new branch names to revbranchcache""" f = None + if self._force_overwrite: + self._rbcsnameslen = 0 + self._rbcnamescount = 0 try: - if self._rbcnamescount != 0: + if self._force_overwrite or self._rbcnamescount != 0: f = repo.cachevfs.open(_rbcnames, b'ab') - if f.tell() == self._rbcsnameslen: + current_size = f.tell() + if current_size == self._rbcsnameslen: f.write(b'\0') else: f.close() - f = None - repo.ui.debug(b"%s changed - rewriting it\n" % _rbcnames) + if self._force_overwrite: + dbg = b"resetting content of %s\n" + elif current_size > 0: + dbg = b"%s changed - rewriting it\n" + else: + dbg = b"%s is missing - rewriting it\n" + repo.ui.debug(dbg % _rbcnames) self._rbcnamescount = 0 self._rbcrevslen = 0 if self._rbcnamescount == 0: