Mercurial > hg
comparison mercurial/context.py @ 8528:4ddffb793d18
workingfilectx: always use the same filelog, even for renames
workingfilectx() was using the "src" filelog in case the file was renamed in
the working copy.
For consistency, stop special-casing it. This allows us to remove some
duplication between filectx and workingfilectx.
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Wed, 20 May 2009 02:08:53 +0200 |
parents | f9a80054dd3c |
children | e8de59577257 |
comparison
equal
deleted
inserted
replaced
8527:f9a80054dd3c | 8528:4ddffb793d18 |
---|---|
636 | 636 |
637 @propertycache | 637 @propertycache |
638 def _changectx(self): | 638 def _changectx(self): |
639 return workingctx(self._repo) | 639 return workingctx(self._repo) |
640 | 640 |
641 @propertycache | |
642 def _repopath(self): | |
643 return self._repo.dirstate.copied(self._path) or self._path | |
644 | |
645 @propertycache | |
646 def _filelog(self): | |
647 return self._repo.file(self._repopath) | |
648 | |
649 def __nonzero__(self): | 641 def __nonzero__(self): |
650 return True | 642 return True |
651 | 643 |
652 def __str__(self): | 644 def __str__(self): |
653 return "%s@%s" % (self.path(), self._changectx) | 645 return "%s@%s" % (self.path(), self._changectx) |
654 | 646 |
655 def filectx(self, fileid): | |
656 '''opens an arbitrary revision of the file without | |
657 opening a new filelog''' | |
658 return filectx(self._repo, self._repopath, fileid=fileid, | |
659 filelog=self._filelog) | |
660 | |
661 def rev(self): | |
662 if '_changectx' in self.__dict__: | |
663 return self._changectx.rev() | |
664 return self._filelog.linkrev(self._filerev) | |
665 | |
666 def data(self): return self._repo.wread(self._path) | 647 def data(self): return self._repo.wread(self._path) |
667 def renamed(self): | 648 def renamed(self): |
668 rp = self._repopath | 649 rp = self._repo.dirstate.copied(self._path) |
669 if rp == self._path: | 650 if not rp: |
670 return None | 651 return None |
671 return rp, self._changectx._parents[0]._manifest.get(rp, nullid) | 652 return rp, self._changectx._parents[0]._manifest.get(rp, nullid) |
672 | 653 |
673 def parents(self): | 654 def parents(self): |
674 '''return parent filectxs, following copies if necessary''' | 655 '''return parent filectxs, following copies if necessary''' |
675 p = self._path | 656 def filenode(ctx, path): |
676 rp = self._repopath | 657 return ctx._manifest.get(path, nullid) |
658 | |
659 path = self._path | |
660 fl = self._filelog | |
677 pcl = self._changectx._parents | 661 pcl = self._changectx._parents |
678 fl = self._filelog | 662 renamed = self.renamed() |
679 pl = [(rp, pcl[0]._manifest.get(rp, nullid), fl)] | 663 |
680 if len(pcl) > 1: | 664 if renamed: |
681 if rp != p: | 665 pl = [renamed + (None,)] |
682 fl = None | 666 else: |
683 pl.append((p, pcl[1]._manifest.get(p, nullid), fl)) | 667 pl = [(path, filenode(pcl[0], path), fl)] |
668 | |
669 for pc in pcl[1:]: | |
670 pl.append((path, filenode(pc, path), fl)) | |
684 | 671 |
685 return [filectx(self._repo, p, fileid=n, filelog=l) | 672 return [filectx(self._repo, p, fileid=n, filelog=l) |
686 for p,n,l in pl if n != nullid] | 673 for p,n,l in pl if n != nullid] |
687 | 674 |
688 def children(self): | 675 def children(self): |