Message11728

Author tonfa
Recipients Ringding, abuehl, astratto, cboos, djc, dsp, friedrich, jcoomes, kiilerix, kupfer, mg, mjnelson, morisgi, mpm, parren, sjtai
Date 2010-02-15.17:03:20
Content
Sorry about last patch, it had some errors. Here is a better version:

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -377,10 +377,42 @@
 
         r = self._filelog.renamed(self._filenode)
         if r:
-            pl[0] = (r[0], r[1], None)
+            pl[0] = (r[0], r[1], self._repo.file(r[0]))
 
-        return [filectx(self._repo, p, fileid=n, filelog=l)
-                for p, n, l in pl if n != nullid]
+        curr = self.rev()
+        cl = self._repo.changelog
+        mf = self._repo.manifest
+        for i in xrange(len(pl)):
+            path, fnode, fl = pl[i]
+            parentrev = fl.linkrev(fl.rev(fnode))
+            parentnode = cl.node(parentrev)
+            last = None
+            if fnode != nullid and not cl.descendant(parentrev, curr):
+                # duplicate linkrev, explore
+                visit = [curr]
+                seen = set()
+                while visit:
+                    n = visit.pop()
+                    if n <= parentrev or n in seen:
+                        continue
+                    seen.add(n)
+                    cldata = cl.read(parentnode)
+                    if path in cldata[3]:
+                        fn = mf.read(cldata[0]).get(path)
+                        if last is not None and fn != fnode:
+                            continue
+                        if fn == fnode:
+                            last = n
+                    for p in cl.parentrevs(n):
+                        if p != nullrev:
+                            visit.append(p)
+            if last is not None:
+                pl[i] = (path, fnode, fl, last)
+            else:
+                pl[i] = (path, fnode, fl, parentrev)
+
+        return [filectx(self._repo, p, fileid=n, changeid=cln, filelog=l)
+                for p, n, l, cln in pl if n != nullid]
 
     def children(self):
         # hard for renames
History
Date User Action Args
2010-02-15 17:03:20tonfasetmessageid: <1266253400.42.0.83365693898.issue1327@mercurial.selenic.com>
2010-02-15 17:03:20tonfasetrecipients: + mpm, cboos, kupfer, kiilerix, mg, parren, djc, abuehl, jcoomes, astratto, dsp, Ringding, sjtai, mjnelson, morisgi, friedrich
2010-02-15 17:03:20tonfalinkissue1327 messages
2010-02-15 17:03:20tonfacreate