mercurial/context.py
changeset 19292 e0aa6fff8f02
parent 19288 ec367f203cb5
child 19314 bc82abe500a9
equal deleted inserted replaced
19291:93635f69c93b 19292:e0aa6fff8f02
   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: