mercurial/localrepo.py
changeset 4209 dbc3846c09a1
parent 4200 b5d1eaade333
parent 4178 0b48e3985765
child 4214 5ccbc0be6cdb
equal deleted inserted replaced
4208:bd9b84b9a84b 4209:dbc3846c09a1
    13 import os, revlog, time, util
    13 import os, revlog, time, util
    14 
    14 
    15 class localrepository(repo.repository):
    15 class localrepository(repo.repository):
    16     capabilities = ('lookup', 'changegroupsubset')
    16     capabilities = ('lookup', 'changegroupsubset')
    17     supported = ('revlogv1', 'store')
    17     supported = ('revlogv1', 'store')
    18     branchcache_features = ('unnamed',)
       
    19 
    18 
    20     def __del__(self):
    19     def __del__(self):
    21         self.transhandle = None
    20         self.transhandle = None
    22     def __init__(self, parentui, path=None, create=0):
    21     def __init__(self, parentui, path=None, create=0):
    23         repo.repository.__init__(self)
    22         repo.repository.__init__(self)
   393         return self.branchcache
   392         return self.branchcache
   394 
   393 
   395     def _readbranchcache(self):
   394     def _readbranchcache(self):
   396         partial = {}
   395         partial = {}
   397         try:
   396         try:
   398             f = self.opener("branches.cache")
   397             f = self.opener("branch.cache")
   399             lines = f.read().split('\n')
   398             lines = f.read().split('\n')
   400             f.close()
   399             f.close()
   401             features = lines.pop(0).strip()
       
   402             if not features.startswith('features: '):
       
   403                 raise ValueError(_('branch cache: no features specified'))
       
   404             features = features.split(' ', 1)[1].split()
       
   405             missing_features = []
       
   406             for feature in self.branchcache_features:
       
   407                 try:
       
   408                     features.remove(feature)
       
   409                 except ValueError, inst:
       
   410                     missing_features.append(feature)
       
   411             if missing_features:
       
   412                 raise ValueError(_('branch cache: missing features: %s')
       
   413                                  % ', '.join(missing_features))
       
   414             if features:
       
   415                 raise ValueError(_('branch cache: unknown features: %s')
       
   416                                  % ', '.join(features))
       
   417             last, lrev = lines.pop(0).split(" ", 1)
   400             last, lrev = lines.pop(0).split(" ", 1)
   418             last, lrev = bin(last), int(lrev)
   401             last, lrev = bin(last), int(lrev)
   419             if not (lrev < self.changelog.count() and
   402             if not (lrev < self.changelog.count() and
   420                     self.changelog.node(lrev) == last): # sanity check
   403                     self.changelog.node(lrev) == last): # sanity check
   421                 # invalidate the cache
   404                 # invalidate the cache
   432             partial, last, lrev = {}, nullid, nullrev
   415             partial, last, lrev = {}, nullid, nullrev
   433         return partial, last, lrev
   416         return partial, last, lrev
   434 
   417 
   435     def _writebranchcache(self, branches, tip, tiprev):
   418     def _writebranchcache(self, branches, tip, tiprev):
   436         try:
   419         try:
   437             f = self.opener("branches.cache", "w")
   420             f = self.opener("branch.cache", "w")
   438             f.write(" features: %s\n" % ' '.join(self.branchcache_features))
       
   439             f.write("%s %s\n" % (hex(tip), tiprev))
   421             f.write("%s %s\n" % (hex(tip), tiprev))
   440             for label, node in branches.iteritems():
   422             for label, node in branches.iteritems():
   441                 f.write("%s %s\n" % (hex(node), label))
   423                 f.write("%s %s\n" % (hex(node), label))
   442         except IOError:
   424         except IOError:
   443             pass
   425             pass
   757                 raise util.Abort(_('branch name not in UTF-8!'))
   739                 raise util.Abort(_('branch name not in UTF-8!'))
   758         else:
   740         else:
   759             branchname = ""
   741             branchname = ""
   760 
   742 
   761         if use_dirstate:
   743         if use_dirstate:
   762             oldname = c1[5].get("branch", "") # stored in UTF-8
   744             oldname = c1[5].get("branch") # stored in UTF-8
   763             if not commit and not remove and not force and p2 == nullid and \
   745             if not commit and not remove and not force and p2 == nullid and \
   764                    branchname == oldname:
   746                    branchname == oldname:
   765                 self.ui.status(_("nothing changed\n"))
   747                 self.ui.status(_("nothing changed\n"))
   766                 return None
   748                 return None
   767 
   749