Mercurial > public > mercurial-scm > hg-stable
diff mercurial/localrepo.py @ 8260:54a4b520bd7d
localrepo: use propertycache
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 29 Apr 2009 20:47:15 -0500 |
parents | 99d7e2db8da8 |
children | 3d7b1d97230d |
line wrap: on
line diff
--- a/mercurial/localrepo.py Thu Apr 30 10:15:32 2009 -0500 +++ b/mercurial/localrepo.py Wed Apr 29 20:47:15 2009 -0500 @@ -15,6 +15,7 @@ import merge as merge_ from lock import release +propertycache = util.propertycache class localrepository(repo.repository): capabilities = set(('lookup', 'changegroupsubset')) @@ -88,24 +89,23 @@ self._datafilters = {} self._transref = self._lockref = self._wlockref = None - def __getattr__(self, name): - if name == 'changelog': - self.changelog = changelog.changelog(self.sopener) - if 'HG_PENDING' in os.environ: - p = os.environ['HG_PENDING'] - if p.startswith(self.root): - self.changelog.readpending('00changelog.i.a') - self.sopener.defversion = self.changelog.version - return self.changelog - if name == 'manifest': - self.changelog - self.manifest = manifest.manifest(self.sopener) - return self.manifest - if name == 'dirstate': - self.dirstate = dirstate.dirstate(self.opener, self.ui, self.root) - return self.dirstate - else: - raise AttributeError(name) + @propertycache + def changelog(self): + c = changelog.changelog(self.sopener) + if 'HG_PENDING' in os.environ: + p = os.environ['HG_PENDING'] + if p.startswith(self.root): + c.readpending('00changelog.i.a') + self.sopener.defversion = c.version + return c + + @propertycache + def manifest(self): + return manifest.manifest(self.sopener) + + @propertycache + def dirstate(self): + return dirstate.dirstate(self.opener, self.ui, self.root) def __getitem__(self, changeid): if changeid == None: