comparison mercurial/statichttprepo.py @ 39763:5ccd791344f3

localrepo: pass root manifest into manifestlog.__init__ Today, localrepository has a method that can be overloaded which returns an instance of the root manifest storage object. When a manifestlog is created, it calls this private method and stores the root manifest object on it. This "hook" on localrepository isn't part of the documented interface. It isn't compatible with our desire to make repo storage determined before the repo object is constructed. This commit changes manifestlog.__init__ to accept the root storage object instead of calling into the repo to construct it. By doing things this way, the repo instance is responsible for constructing the manifest storage object directly. This does mean that other derived repo types need to overload manifestlog(). But they should have been doing this already, as manifestlog() is typically decorated in a storage-specific way. e.g. localrepository.manifestlog() is decorated as @storecache('00manifest.i'). And this assumes that a 00manifest.i file exists in the store vfs. This condition may not hold for repository types using non-revlog storage. So it is important for special repo types to override manifestlog() to remove this file association. The code changed in perf is wrong because it isn't compatible with older Mercurial versions. But I'm pretty sure the code was broken on older versions before this commit. It only affects `hg perftags`. I don't care enough to fix that at this time. .. api:: ``manifest.manifestlog.__init__()`` now receives the root manifest storage instance instead of calling into a private method on the repo object to obtain it. Differential Revision: https://phab.mercurial-scm.org/D4641
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 18 Sep 2018 15:15:24 -0700
parents f44187605315
children e4e881572382
comparison
equal deleted inserted replaced
39762:edaa40dc5fe5 39763:5ccd791344f3
183 self.svfs = self.store.opener 183 self.svfs = self.store.opener
184 self.sjoin = self.store.join 184 self.sjoin = self.store.join
185 self._filecache = {} 185 self._filecache = {}
186 self.requirements = requirements 186 self.requirements = requirements
187 187
188 self.manifestlog = manifest.manifestlog(self.svfs, self) 188 rootmanifest = manifest.manifestrevlog(self.svfs)
189 self.manifestlog = manifest.manifestlog(self.svfs, self, rootmanifest)
189 self.changelog = changelog.changelog(self.svfs) 190 self.changelog = changelog.changelog(self.svfs)
190 self._tags = None 191 self._tags = None
191 self.nodetagscache = None 192 self.nodetagscache = None
192 self._branchcaches = {} 193 self._branchcaches = {}
193 self._revbranchcache = None 194 self._revbranchcache = None