Mercurial > public > mercurial-scm > hg
comparison mercurial/context.py @ 5811:180a3eee4b75
Fix copies reporting in log and convert.
If copy logged in file revision, we report copy for changeset only
if file revisions linkrev points back to the changeset in question
or both changeset parents contain different file revisions.
This fixes extra copies reported when executable bit was changed for
previously copied file.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sat, 29 Dec 2007 17:11:48 +0300 |
parents | 124577de40a7 |
children | 3ef279074c77 |
comparison
equal
deleted
inserted
replaced
5810:124577de40a7 | 5811:180a3eee4b75 |
---|---|
233 return self._changectx.rev() | 233 return self._changectx.rev() |
234 if '_changeid' in self.__dict__: | 234 if '_changeid' in self.__dict__: |
235 return self._changectx.rev() | 235 return self._changectx.rev() |
236 return self._filelog.linkrev(self._filenode) | 236 return self._filelog.linkrev(self._filenode) |
237 | 237 |
238 def linkrev(self): return self._filelog.linkrev(self._filenode) | |
238 def node(self): return self._changectx.node() | 239 def node(self): return self._changectx.node() |
239 def user(self): return self._changectx.user() | 240 def user(self): return self._changectx.user() |
240 def date(self): return self._changectx.date() | 241 def date(self): return self._changectx.date() |
241 def files(self): return self._changectx.files() | 242 def files(self): return self._changectx.files() |
242 def description(self): return self._changectx.description() | 243 def description(self): return self._changectx.description() |
243 def branch(self): return self._changectx.branch() | 244 def branch(self): return self._changectx.branch() |
244 def manifest(self): return self._changectx.manifest() | 245 def manifest(self): return self._changectx.manifest() |
245 def changectx(self): return self._changectx | 246 def changectx(self): return self._changectx |
246 | 247 |
247 def data(self): return self._filelog.read(self._filenode) | 248 def data(self): return self._filelog.read(self._filenode) |
248 def renamed(self): return self._filelog.renamed(self._filenode) | |
249 def path(self): return self._path | 249 def path(self): return self._path |
250 def size(self): return self._filelog.size(self._filerev) | 250 def size(self): return self._filelog.size(self._filerev) |
251 | 251 |
252 def cmp(self, text): return self._filelog.cmp(self._filenode, text) | 252 def cmp(self, text): return self._filelog.cmp(self._filenode, text) |
253 | |
254 def renamed(self): | |
255 """check if file was actually renamed in this changeset revision | |
256 | |
257 If rename logged in file revision, we report copy for changeset only | |
258 if file revisions linkrev points back to the changeset in question | |
259 or both changeset parents contain different file revisions. | |
260 """ | |
261 | |
262 renamed = self._filelog.renamed(self._filenode) | |
263 if not renamed: | |
264 return renamed | |
265 | |
266 if self.rev() == self.linkrev(): | |
267 return renamed | |
268 | |
269 name = self.path() | |
270 fnode = self._filenode | |
271 for p in self._changectx.parents(): | |
272 try: | |
273 if fnode == p.filenode(name): | |
274 return None | |
275 except revlog.LookupError: | |
276 pass | |
277 return renamed | |
253 | 278 |
254 def parents(self): | 279 def parents(self): |
255 p = self._path | 280 p = self._path |
256 fl = self._filelog | 281 fl = self._filelog |
257 pl = [(p, n, fl) for n in self._filelog.parents(self._filenode)] | 282 pl = [(p, n, fl) for n in self._filelog.parents(self._filenode)] |
320 pl[0] = (r[0], getlog(r[0]).rev(r[1])) | 345 pl[0] = (r[0], getlog(r[0]).rev(r[1])) |
321 | 346 |
322 return [getctx(p, n) for p, n in pl if n != nullrev] | 347 return [getctx(p, n) for p, n in pl if n != nullrev] |
323 | 348 |
324 # use linkrev to find the first changeset where self appeared | 349 # use linkrev to find the first changeset where self appeared |
325 if self.rev() != self._filelog.linkrev(self._filenode): | 350 if self.rev() != self.linkrev(): |
326 base = self.filectx(self.filerev()) | 351 base = self.filectx(self.filerev()) |
327 else: | 352 else: |
328 base = self | 353 base = self |
329 | 354 |
330 # find all ancestors | 355 # find all ancestors |