comparison mercurial/localrepo.py @ 17137:b090601a80d1

localrepo: make requirements and openerreqs mutable by subclasses This is necessary for extensions that need to modify a repo's requirements.
author Bryan O'Sullivan <bryano@fb.com>
date Wed, 11 Jul 2012 15:36:00 -0700
parents 28ed1c4511ce
children ad1b5e070f16
comparison
equal deleted inserted replaced
17136:de8173d0c326 17137:b090601a80d1
27 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey', 27 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey',
28 'known', 'getbundle')) 28 'known', 'getbundle'))
29 supportedformats = set(('revlogv1', 'generaldelta')) 29 supportedformats = set(('revlogv1', 'generaldelta'))
30 supported = supportedformats | set(('store', 'fncache', 'shared', 30 supported = supportedformats | set(('store', 'fncache', 'shared',
31 'dotencode')) 31 'dotencode'))
32 openerreqs = set(('revlogv1', 'generaldelta'))
33 requirements = ['revlogv1']
34
35 def _baserequirements(self, create):
36 return self.requirements[:]
32 37
33 def __init__(self, baseui, path=None, create=False): 38 def __init__(self, baseui, path=None, create=False):
34 repo.repository.__init__(self) 39 repo.repository.__init__(self)
35 self.root = os.path.realpath(util.expandpath(path)) 40 self.root = os.path.realpath(util.expandpath(path))
36 self.path = os.path.join(self.root, ".hg") 41 self.path = os.path.join(self.root, ".hg")
54 if not os.path.isdir(self.path): 59 if not os.path.isdir(self.path):
55 if create: 60 if create:
56 if not os.path.exists(path): 61 if not os.path.exists(path):
57 util.makedirs(path) 62 util.makedirs(path)
58 util.makedir(self.path, notindexed=True) 63 util.makedir(self.path, notindexed=True)
59 requirements = ["revlogv1"] 64 requirements = self._baserequirements(create)
60 if self.ui.configbool('format', 'usestore', True): 65 if self.ui.configbool('format', 'usestore', True):
61 os.mkdir(os.path.join(self.path, "store")) 66 os.mkdir(os.path.join(self.path, "store"))
62 requirements.append("store") 67 requirements.append("store")
63 if self.ui.configbool('format', 'usefncache', True): 68 if self.ui.configbool('format', 'usefncache', True):
64 requirements.append("fncache") 69 requirements.append("fncache")
118 # Maps a property name to its util.filecacheentry 123 # Maps a property name to its util.filecacheentry
119 self._filecache = {} 124 self._filecache = {}
120 125
121 def _applyrequirements(self, requirements): 126 def _applyrequirements(self, requirements):
122 self.requirements = requirements 127 self.requirements = requirements
123 openerreqs = set(('revlogv1', 'generaldelta'))
124 self.sopener.options = dict((r, 1) for r in requirements 128 self.sopener.options = dict((r, 1) for r in requirements
125 if r in openerreqs) 129 if r in self.openerreqs)
126 130
127 def _writerequirements(self): 131 def _writerequirements(self):
128 reqfile = self.opener("requires", "w") 132 reqfile = self.opener("requires", "w")
129 for r in self.requirements: 133 for r in self.requirements:
130 reqfile.write("%s\n" % r) 134 reqfile.write("%s\n" % r)