mercurial/branchmap.py
changeset 29744 0d588332ad2c
parent 29743 9f3c49ee4486
child 29745 3b184adfb5be
equal deleted inserted replaced
29743:9f3c49ee4486 29744:0d588332ad2c
   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 True:
   473         wlock = None
       
   474         try:
   474             if self._rbcnamescount < len(self._names):
   475             if self._rbcnamescount < len(self._names):
       
   476                 wlock = repo.wlock(wait=False)
   475                 try:
   477                 try:
   476                     if self._rbcnamescount != 0:
   478                     if self._rbcnamescount != 0:
   477                         f = repo.vfs.open(_rbcnames, 'ab')
   479                         f = repo.vfs.open(_rbcnames, 'ab')
   478                         if f.tell() == self._rbcsnameslen:
   480                         if f.tell() == self._rbcsnameslen:
   479                             f.write('\0')
   481                             f.write('\0')
   499                     return
   501                     return
   500                 self._rbcnamescount = len(self._names)
   502                 self._rbcnamescount = len(self._names)
   501 
   503 
   502             start = self._rbcrevslen * _rbcrecsize
   504             start = self._rbcrevslen * _rbcrecsize
   503             if start != len(self._rbcrevs):
   505             if start != len(self._rbcrevs):
       
   506                 if wlock is None:
       
   507                     wlock = repo.wlock(wait=False)
   504                 revs = min(len(repo.changelog),
   508                 revs = min(len(repo.changelog),
   505                            len(self._rbcrevs) // _rbcrecsize)
   509                            len(self._rbcrevs) // _rbcrecsize)
   506                 try:
   510                 try:
   507                     f = repo.vfs.open(_rbcrevs, 'ab')
   511                     f = repo.vfs.open(_rbcrevs, 'ab')
   508                     if f.tell() != start:
   512                     if f.tell() != start:
   519                 except (IOError, OSError, error.Abort) as inst:
   523                 except (IOError, OSError, error.Abort) as inst:
   520                     repo.ui.debug("couldn't write revision branch cache: %s\n" %
   524                     repo.ui.debug("couldn't write revision branch cache: %s\n" %
   521                                   inst)
   525                                   inst)
   522                     return
   526                     return
   523                 self._rbcrevslen = revs
   527                 self._rbcrevslen = revs
       
   528         except error.LockError as inst:
       
   529             repo.ui.debug("couldn't write revision branch cache: %s\n" % inst)
       
   530         finally:
       
   531             if wlock is not None:
       
   532                 wlock.release()