mercurial/tags.py
changeset 33537 709dde1c5dd5
parent 33536 ddacd0e453ae
child 34015 2d80e078724a
equal deleted inserted replaced
33536:ddacd0e453ae 33537:709dde1c5dd5
   615     for name in names:
   615     for name in names:
   616         repo.hook('tag', node=hex(node), tag=name, local=local)
   616         repo.hook('tag', node=hex(node), tag=name, local=local)
   617 
   617 
   618     return tagnode
   618     return tagnode
   619 
   619 
   620 _fnodescachefile = 'cache/hgtagsfnodes1'
   620 _fnodescachefile = 'hgtagsfnodes1'
   621 _fnodesrecsize = 4 + 20 # changeset fragment + filenode
   621 _fnodesrecsize = 4 + 20 # changeset fragment + filenode
   622 _fnodesmissingrec = '\xff' * 24
   622 _fnodesmissingrec = '\xff' * 24
   623 
   623 
   624 class hgtagsfnodescache(object):
   624 class hgtagsfnodescache(object):
   625     """Persistent cache mapping revisions to .hgtags filenodes.
   625     """Persistent cache mapping revisions to .hgtags filenodes.
   649         self.lookupcount = 0
   649         self.lookupcount = 0
   650         self.hitcount = 0
   650         self.hitcount = 0
   651 
   651 
   652 
   652 
   653         try:
   653         try:
   654             data = repo.vfs.read(_fnodescachefile)
   654             data = repo.cachevfs.read(_fnodescachefile)
   655         except (OSError, IOError):
   655         except (OSError, IOError):
   656             data = ""
   656             data = ""
   657         self._raw = bytearray(data)
   657         self._raw = bytearray(data)
   658 
   658 
   659         # The end state of self._raw is an array that is of the exact length
   659         # The end state of self._raw is an array that is of the exact length
   757         repo = self._repo
   757         repo = self._repo
   758 
   758 
   759         try:
   759         try:
   760             lock = repo.wlock(wait=False)
   760             lock = repo.wlock(wait=False)
   761         except error.LockError:
   761         except error.LockError:
   762             repo.ui.log('tagscache',
   762             repo.ui.log('tagscache', 'not writing .hg/cache/%s because '
   763                         'not writing .hg/%s because lock cannot be acquired\n' %
   763                         'lock cannot be acquired\n' % (_fnodescachefile))
   764                         (_fnodescachefile))
       
   765             return
   764             return
   766 
   765 
   767         try:
   766         try:
   768             f = repo.vfs.open(_fnodescachefile, 'ab')
   767             f = repo.cachevfs.open(_fnodescachefile, 'ab')
   769             try:
   768             try:
   770                 # if the file has been truncated
   769                 # if the file has been truncated
   771                 actualoffset = f.tell()
   770                 actualoffset = f.tell()
   772                 if actualoffset < self._dirtyoffset:
   771                 if actualoffset < self._dirtyoffset:
   773                     self._dirtyoffset = actualoffset
   772                     self._dirtyoffset = actualoffset
   774                     data = self._raw[self._dirtyoffset:]
   773                     data = self._raw[self._dirtyoffset:]
   775                 f.seek(self._dirtyoffset)
   774                 f.seek(self._dirtyoffset)
   776                 f.truncate()
   775                 f.truncate()
   777                 repo.ui.log('tagscache',
   776                 repo.ui.log('tagscache',
   778                             'writing %d bytes to %s\n' % (
   777                             'writing %d bytes to cache/%s\n' % (
   779                             len(data), _fnodescachefile))
   778                             len(data), _fnodescachefile))
   780                 f.write(data)
   779                 f.write(data)
   781                 self._dirtyoffset = None
   780                 self._dirtyoffset = None
   782             finally:
   781             finally:
   783                 f.close()
   782                 f.close()
   784         except (IOError, OSError) as inst:
   783         except (IOError, OSError) as inst:
   785             repo.ui.log('tagscache',
   784             repo.ui.log('tagscache',
   786                         "couldn't write %s: %s\n" % (
   785                         "couldn't write cache/%s: %s\n" % (
   787                         _fnodescachefile, inst))
   786                         _fnodescachefile, inst))
   788         finally:
   787         finally:
   789             lock.release()
   788             lock.release()