diff -r 8f32dcfbc338 -r 20932983d520 mercurial/context.py --- a/mercurial/context.py Tue Dec 23 17:13:51 2014 -0800 +++ b/mercurial/context.py Tue Dec 23 18:29:03 2014 -0800 @@ -736,14 +736,22 @@ def parents(self): _path = self._path fl = self._filelog - pl = [(_path, n, fl) for n in self._filelog.parents(self._filenode)] + parents = self._filelog.parents(self._filenode) + pl = [(_path, node, fl) for node in parents if node != nullid] r = self._filelog.renamed(self._filenode) if r: - pl[0] = (r[0], r[1], None) + # - In the simple rename case, both parent are nullid, pl is empty. + # - In case of merge, only one of the parent is null id and should + # be replaced with the rename information. This parent is -always- + # the first one. + # + # As null id have alway been filtered out in the previous list + # comprehension, inserting to 0 will always result in "replacing + # first nullid parent with rename information. + pl.insert(0, (r[0], r[1], None)) - return [filectx(self._repo, p, fileid=n, filelog=l) - for p, n, l in pl if n != nullid] + return [filectx(self._repo, p, fileid=n, filelog=l) for p, n, l in pl] def p1(self): return self.parents()[0]