647 if t == '=': |
647 if t == '=': |
648 child[0][b1:b2] = parent[0][a1:a2] |
648 child[0][b1:b2] = parent[0][a1:a2] |
649 return child |
649 return child |
650 |
650 |
651 getlog = util.lrucachefunc(lambda x: self._repo.file(x)) |
651 getlog = util.lrucachefunc(lambda x: self._repo.file(x)) |
652 def getctx(path, fileid): |
|
653 log = path == self._path and self._filelog or getlog(path) |
|
654 return filectx(self._repo, path, fileid=fileid, filelog=log) |
|
655 getctx = util.lrucachefunc(getctx) |
|
656 |
652 |
657 def parents(f): |
653 def parents(f): |
658 # we want to reuse filectx objects as much as possible |
654 pl = f.parents() |
659 p = f._path |
655 |
660 if f._filerev is None: # working dir |
656 # Don't return renamed parents if we aren't following. |
661 pl = [(n.path(), n.filerev()) for n in f.parents()] |
657 if not follow: |
662 else: |
658 pl = [p for p in pl if p.path() == f.path()] |
663 pl = [(p, n) for n in f._filelog.parentrevs(f._filerev)] |
659 |
664 |
660 # renamed filectx won't have a filelog yet, so set it |
665 if follow: |
661 # from the cache to save time |
666 r = f.renamed() |
662 for p in pl: |
667 if r: |
663 if not '_filelog' in p.__dict__: |
668 pl[0] = (r[0], getlog(r[0]).rev(r[1])) |
664 p._filelog = getlog(p.path()) |
669 |
665 |
670 return [getctx(p, n) for p, n in pl if n != nullrev] |
666 return pl |
671 |
667 |
672 # use linkrev to find the first changeset where self appeared |
668 # use linkrev to find the first changeset where self appeared |
673 if self.rev() != self.linkrev(): |
669 if self.rev() != self.linkrev(): |
674 base = self.filectx(self.filerev()) |
670 base = self.filectx(self.filerev()) |
675 else: |
671 else: |