Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/context.py @ 3213:e8199702cf4e
Make filectx lazier
Lazy opening of filelog, lazy lookup of filenode and changeid
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 02 Oct 2006 14:23:38 -0500 |
parents | 9e8dd6114a4e |
children | 696c656202a0 |
comparison
equal
deleted
inserted
replaced
3212:cac7be0b9b99 | 3213:e8199702cf4e |
---|---|
112 | 112 |
113 assert changeid is not None or fileid is not None | 113 assert changeid is not None or fileid is not None |
114 | 114 |
115 if filelog: | 115 if filelog: |
116 self._filelog = filelog | 116 self._filelog = filelog |
117 else: | |
118 self._filelog = self._repo.file(self._path) | |
119 | 117 |
120 if fileid is None: | 118 if fileid is None: |
121 self._changeid = changeid | 119 self._changeid = changeid |
122 else: | 120 else: |
123 self._filenode = self._filelog.lookup(fileid) | 121 self._fileid = fileid |
124 self._changeid = self._filelog.linkrev(self._filenode) | |
125 | 122 |
126 def __getattr__(self, name): | 123 def __getattr__(self, name): |
127 if name == '_changectx': | 124 if name == '_changectx': |
128 self._changectx = changectx(self._repo, self._changeid) | 125 self._changectx = changectx(self._repo, self._changeid) |
129 return self._changectx | 126 return self._changectx |
127 elif name == '_filelog': | |
128 self._filelog = self._repo.file(self._path) | |
129 return self._filelog | |
130 elif name == '_changeid': | |
131 self._changeid = self._filelog.linkrev(self._filenode) | |
132 return self._changeid | |
130 elif name == '_filenode': | 133 elif name == '_filenode': |
131 self._filenode = self._changectx.filenode(self._path) | 134 if hasattr(self, "_fileid"): |
135 self._filenode = self._filelog.lookup(self._fileid) | |
136 else: | |
137 self._filenode = self._changectx.filenode(self._path) | |
132 return self._filenode | 138 return self._filenode |
133 elif name == '_filerev': | 139 elif name == '_filerev': |
134 self._filerev = self._filelog.rev(self._filenode) | 140 self._filerev = self._filelog.rev(self._filenode) |
135 return self._filerev | 141 return self._filerev |
136 else: | 142 else: |