mercurial/branchmap.py
changeset 29743 9f3c49ee4486
parent 29615 a2a380e2750f
child 29744 0d588332ad2c
equal deleted inserted replaced
29742:b410e26692a4 29743:9f3c49ee4486
   468             tr.addfinalize('write-revbranchcache', self.write)
   468             tr.addfinalize('write-revbranchcache', self.write)
   469 
   469 
   470     def write(self, tr=None):
   470     def write(self, tr=None):
   471         """Save branch cache if it is dirty."""
   471         """Save branch cache if it is dirty."""
   472         repo = self._repo
   472         repo = self._repo
   473         if self._rbcnamescount < len(self._names):
   473         if True:
   474             try:
   474             if self._rbcnamescount < len(self._names):
   475                 if self._rbcnamescount != 0:
   475                 try:
   476                     f = repo.vfs.open(_rbcnames, 'ab')
   476                     if self._rbcnamescount != 0:
   477                     if f.tell() == self._rbcsnameslen:
   477                         f = repo.vfs.open(_rbcnames, 'ab')
   478                         f.write('\0')
   478                         if f.tell() == self._rbcsnameslen:
   479                     else:
   479                             f.write('\0')
   480                         f.close()
   480                         else:
   481                         repo.ui.debug("%s changed - rewriting it\n" % _rbcnames)
   481                             f.close()
   482                         self._rbcnamescount = 0
   482                             repo.ui.debug("%s changed - rewriting it\n"
   483                         self._rbcrevslen = 0
   483                                           % _rbcnames)
   484                 if self._rbcnamescount == 0:
   484                             self._rbcnamescount = 0
   485                     # before rewriting names, make sure references are removed
   485                             self._rbcrevslen = 0
   486                     repo.vfs.unlinkpath(_rbcrevs, ignoremissing=True)
   486                     if self._rbcnamescount == 0:
   487                     f = repo.vfs.open(_rbcnames, 'wb')
   487                         # before rewriting names, make sure references are
   488                 f.write('\0'.join(encoding.fromlocal(b)
   488                         # removed
   489                                   for b in self._names[self._rbcnamescount:]))
   489                         repo.vfs.unlinkpath(_rbcrevs, ignoremissing=True)
   490                 self._rbcsnameslen = f.tell()
   490                         f = repo.vfs.open(_rbcnames, 'wb')
   491                 f.close()
   491                     f.write('\0'.join(encoding.fromlocal(b)
   492             except (IOError, OSError, error.Abort) as inst:
   492                                       for b in self._names[self._rbcnamescount:]
   493                 repo.ui.debug("couldn't write revision branch cache names: "
   493                                       ))
   494                               "%s\n" % inst)
   494                     self._rbcsnameslen = f.tell()
   495                 return
   495                     f.close()
   496             self._rbcnamescount = len(self._names)
   496                 except (IOError, OSError, error.Abort) as inst:
   497 
   497                     repo.ui.debug("couldn't write revision branch cache names: "
   498         start = self._rbcrevslen * _rbcrecsize
   498                                   "%s\n" % inst)
   499         if start != len(self._rbcrevs):
   499                     return
   500             revs = min(len(repo.changelog), len(self._rbcrevs) // _rbcrecsize)
   500                 self._rbcnamescount = len(self._names)
   501             try:
   501 
   502                 f = repo.vfs.open(_rbcrevs, 'ab')
   502             start = self._rbcrevslen * _rbcrecsize
   503                 if f.tell() != start:
   503             if start != len(self._rbcrevs):
   504                     repo.ui.debug("truncating %s to %s\n" % (_rbcrevs, start))
   504                 revs = min(len(repo.changelog),
   505                     f.seek(start)
   505                            len(self._rbcrevs) // _rbcrecsize)
       
   506                 try:
       
   507                     f = repo.vfs.open(_rbcrevs, 'ab')
   506                     if f.tell() != start:
   508                     if f.tell() != start:
   507                         start = 0
   509                         repo.ui.debug("truncating %s to %s\n"
       
   510                                       % (_rbcrevs, start))
   508                         f.seek(start)
   511                         f.seek(start)
   509                     f.truncate()
   512                         if f.tell() != start:
   510                 end = revs * _rbcrecsize
   513                             start = 0
   511                 f.write(self._rbcrevs[start:end])
   514                             f.seek(start)
   512                 f.close()
   515                         f.truncate()
   513             except (IOError, OSError, error.Abort) as inst:
   516                     end = revs * _rbcrecsize
   514                 repo.ui.debug("couldn't write revision branch cache: %s\n" %
   517                     f.write(self._rbcrevs[start:end])
   515                               inst)
   518                     f.close()
   516                 return
   519                 except (IOError, OSError, error.Abort) as inst:
   517             self._rbcrevslen = revs
   520                     repo.ui.debug("couldn't write revision branch cache: %s\n" %
       
   521                                   inst)
       
   522                     return
       
   523                 self._rbcrevslen = revs