mercurial/branchmap.py
changeset 28558 bcd106d456c4
parent 28557 4b83507bfc91
child 29423 d2c6f3a948fa
equal deleted inserted replaced
28557:4b83507bfc91 28558:bcd106d456c4
   381         if self._rbcrevslen == 0:
   381         if self._rbcrevslen == 0:
   382             self._names = []
   382             self._names = []
   383         self._rbcnamescount = len(self._names) # number of good names on disk
   383         self._rbcnamescount = len(self._names) # number of good names on disk
   384         self._namesreverse = dict((b, r) for r, b in enumerate(self._names))
   384         self._namesreverse = dict((b, r) for r, b in enumerate(self._names))
   385 
   385 
       
   386     def _clear(self):
       
   387         self._rbcsnameslen = 0
       
   388         del self._names[:]
       
   389         self._rbcnamescount = 0
       
   390         self._namesreverse.clear()
       
   391         self._rbcrevslen = len(self._repo.changelog)
       
   392         self._rbcrevs = array('c')
       
   393         self._rbcrevs.fromstring('\0' * (self._rbcrevslen * _rbcrecsize))
       
   394 
   386     def branchinfo(self, rev):
   395     def branchinfo(self, rev):
   387         """Return branch name and close flag for rev, using and updating
   396         """Return branch name and close flag for rev, using and updating
   388         persistent cache."""
   397         persistent cache."""
   389         changelog = self._repo.changelog
   398         changelog = self._repo.changelog
   390         rbcrevidx = rev * _rbcrecsize
   399         rbcrevidx = rev * _rbcrecsize
   406         if close:
   415         if close:
   407             branchidx &= _rbcbranchidxmask
   416             branchidx &= _rbcbranchidxmask
   408         if cachenode == '\0\0\0\0':
   417         if cachenode == '\0\0\0\0':
   409             pass
   418             pass
   410         elif cachenode == reponode:
   419         elif cachenode == reponode:
   411             return self._names[branchidx], close
   420             if branchidx < self._rbcnamescount:
       
   421                 return self._names[branchidx], close
       
   422             # referenced branch doesn't exist - rebuild is expensive but needed
       
   423             self._repo.ui.debug("rebuilding corrupted revision branch cache\n")
       
   424             self._clear()
   412         else:
   425         else:
   413             # rev/node map has changed, invalidate the cache from here up
   426             # rev/node map has changed, invalidate the cache from here up
   414             truncate = rbcrevidx + _rbcrecsize
   427             truncate = rbcrevidx + _rbcrecsize
   415             del self._rbcrevs[truncate:]
   428             del self._rbcrevs[truncate:]
   416             self._rbcrevslen = min(self._rbcrevslen, truncate)
   429             self._rbcrevslen = min(self._rbcrevslen, truncate)