comparison mercurial/context.py @ 5810:124577de40a7

context: preserve changeset in filectx if we have one If we know original changeset we are working with - try hard to preserve it. Fallback to filelog.linkrev() only if we have no way to get original changeset, since linkrev() may point to other changeset.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 29 Dec 2007 16:57:43 +0300
parents 0145f9afb0e7
children 180a3eee4b75
comparison
equal deleted inserted replaced
5809:34c4131abdf9 5810:124577de40a7
157 or changectx is not None) 157 or changectx is not None)
158 158
159 if filelog: 159 if filelog:
160 self._filelog = filelog 160 self._filelog = filelog
161 161
162 if fileid is None: 162 if changeid is not None:
163 if changectx is None: 163 self._changeid = changeid
164 self._changeid = changeid 164 if changectx is not None:
165 else: 165 self._changectx = changectx
166 self._changectx = changectx 166 if fileid is not None:
167 else:
168 self._fileid = fileid 167 self._fileid = fileid
169 168
170 def __getattr__(self, name): 169 def __getattr__(self, name):
171 if name == '_changectx': 170 if name == '_changectx':
172 self._changectx = changectx(self._repo, self._changeid) 171 self._changectx = changectx(self._repo, self._changeid)
173 return self._changectx 172 return self._changectx
174 elif name == '_filelog': 173 elif name == '_filelog':
175 self._filelog = self._repo.file(self._path) 174 self._filelog = self._repo.file(self._path)
176 return self._filelog 175 return self._filelog
177 elif name == '_changeid': 176 elif name == '_changeid':
178 self._changeid = self._filelog.linkrev(self._filenode) 177 if '_changectx' in self.__dict__:
178 self._changeid = self._changectx.rev()
179 else:
180 self._changeid = self._filelog.linkrev(self._filenode)
179 return self._changeid 181 return self._changeid
180 elif name == '_filenode': 182 elif name == '_filenode':
181 if '_fileid' in self.__dict__: 183 if '_fileid' in self.__dict__:
182 self._filenode = self._filelog.lookup(self._fileid) 184 self._filenode = self._filelog.lookup(self._fileid)
183 else: 185 else:
227 def filelog(self): return self._filelog 229 def filelog(self): return self._filelog
228 230
229 def rev(self): 231 def rev(self):
230 if '_changectx' in self.__dict__: 232 if '_changectx' in self.__dict__:
231 return self._changectx.rev() 233 return self._changectx.rev()
234 if '_changeid' in self.__dict__:
235 return self._changectx.rev()
232 return self._filelog.linkrev(self._filenode) 236 return self._filelog.linkrev(self._filenode)
233 237
234 def node(self): return self._changectx.node() 238 def node(self): return self._changectx.node()
235 def user(self): return self._changectx.user() 239 def user(self): return self._changectx.user()
236 def date(self): return self._changectx.date() 240 def date(self): return self._changectx.date()