mercurial/localrepo.py
changeset 9674 603b23c6967b
parent 9673 863ba2ea1f0b
child 9675 ee913987e4b0
equal deleted inserted replaced
9673:863ba2ea1f0b 9674:603b23c6967b
    96         # heads, and local tags are defined in .hg/localtags.)  They
    96         # heads, and local tags are defined in .hg/localtags.)  They
    97         # constitute the in-memory cache of tags.
    97         # constitute the in-memory cache of tags.
    98         self._tags = None
    98         self._tags = None
    99         self._tagtypes = None
    99         self._tagtypes = None
   100 
   100 
   101         self.branchcache = None
   101         self._branchcache = None  # in UTF-8
   102         self._ubranchcache = None  # UTF-8 version of branchcache
       
   103         self._branchcachetip = None
   102         self._branchcachetip = None
   104         self.nodetagscache = None
   103         self.nodetagscache = None
   105         self.filterpats = {}
   104         self.filterpats = {}
   106         self._datafilters = {}
   105         self._datafilters = {}
   107         self._transref = self._lockref = self._wlockref = None
   106         self._transref = self._lockref = self._wlockref = None
   318             self._writebranchcache(partial, self.changelog.tip(), tiprev)
   317             self._writebranchcache(partial, self.changelog.tip(), tiprev)
   319 
   318 
   320         return partial
   319         return partial
   321 
   320 
   322     def lbranchmap(self):
   321     def lbranchmap(self):
   323         self.branchcache = {}
   322         branchcache = {}
   324         partial = self.branchmap()
   323         partial = self.branchmap()
   325 
   324 
   326         # the branch cache is stored on disk as UTF-8, but in the local
   325         # the branch cache is stored on disk as UTF-8, but in the local
   327         # charset internally
   326         # charset internally
   328         for k, v in partial.iteritems():
   327         for k, v in partial.iteritems():
   329             self.branchcache[encoding.tolocal(k)] = v
   328             branchcache[encoding.tolocal(k)] = v
   330         return self.branchcache
   329         return branchcache
   331 
   330 
   332     def branchmap(self):
   331     def branchmap(self):
   333         tip = self.changelog.tip()
   332         tip = self.changelog.tip()
   334         if self._ubranchcache is not None and self._branchcachetip == tip:
   333         if self._branchcache is not None and self._branchcachetip == tip:
   335             return self._ubranchcache
   334             return self._branchcache
   336 
   335 
   337         oldtip = self._branchcachetip
   336         oldtip = self._branchcachetip
   338         self._branchcachetip = tip
   337         self._branchcachetip = tip
   339         if oldtip is None or oldtip not in self.changelog.nodemap:
   338         if oldtip is None or oldtip not in self.changelog.nodemap:
   340             partial, last, lrev = self._readbranchcache()
   339             partial, last, lrev = self._readbranchcache()
   341         else:
   340         else:
   342             lrev = self.changelog.rev(oldtip)
   341             lrev = self.changelog.rev(oldtip)
   343             partial = self._ubranchcache
   342             partial = self._branchcache
   344 
   343 
   345         self._branchtags(partial, lrev)
   344         self._branchtags(partial, lrev)
   346         # this private cache holds all heads (not just tips)
   345         # this private cache holds all heads (not just tips)
   347         self._ubranchcache = partial
   346         self._branchcache = partial
   348 
   347 
   349         return self._ubranchcache
   348         return self._branchcache
   350 
   349 
   351     def branchtags(self):
   350     def branchtags(self):
   352         '''return a dict where branch names map to the tipmost head of
   351         '''return a dict where branch names map to the tipmost head of
   353         the branch, open heads come before closed'''
   352         the branch, open heads come before closed'''
   354         bt = {}
   353         bt = {}
   630             if a in self.__dict__:
   629             if a in self.__dict__:
   631                 delattr(self, a)
   630                 delattr(self, a)
   632         self._tags = None
   631         self._tags = None
   633         self._tagtypes = None
   632         self._tagtypes = None
   634         self.nodetagscache = None
   633         self.nodetagscache = None
   635         self.branchcache = None
   634         self._branchcache = None # in UTF-8
   636         self._ubranchcache = None
       
   637         self._branchcachetip = None
   635         self._branchcachetip = None
   638 
   636 
   639     def _lock(self, lockname, wait, releasefn, acquirefn, desc):
   637     def _lock(self, lockname, wait, releasefn, acquirefn, desc):
   640         try:
   638         try:
   641             l = lock.lock(lockname, 0, releasefn, desc=desc)
   639             l = lock.lock(lockname, 0, releasefn, desc=desc)
   913             self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1,
   911             self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1,
   914                       parent2=xp2, pending=p)
   912                       parent2=xp2, pending=p)
   915             self.changelog.finalize(trp)
   913             self.changelog.finalize(trp)
   916             tr.close()
   914             tr.close()
   917 
   915 
   918             if self.branchcache:
   916             if self._branchcache:
   919                 self.branchtags()
   917                 self.branchtags()
   920 
   918 
   921             self.hook("commit", node=hex(n), parent1=xp1, parent2=xp2)
   919             self.hook("commit", node=hex(n), parent1=xp1, parent2=xp2)
   922             return n
   920             return n
   923         finally:
   921         finally: