diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -495,9 +495,12 @@ def diff(repo, node1=None, node2=None, f if node2: ctx2 = context.changectx(repo, node2) + execf2 = ctx2.manifest().execf else: ctx2 = context.workingctx(repo) - man2 = ctx2.manifest() + execf2 = util.execfunc(repo.root, None) + if execf2 is None: + execf2 = ctx2.parents()[0].manifest().copy().execf # returns False if there was no rename between ctx1 and ctx2 # returns None if the file was created between ctx1 and ctx2 @@ -563,7 +566,7 @@ def diff(repo, node1=None, node2=None, f a, b = f, f if f in added: - mode = gitmode(man2.execf(f)) + mode = gitmode(execf2(f)) if f in copied: a = copied[f] omode = gitmode(man1.execf(a)) @@ -588,7 +591,7 @@ def diff(repo, node1=None, node2=None, f header.append('deleted file mode %s\n' % mode) else: omode = gitmode(man1.execf(f)) - nmode = gitmode(man2.execf(f)) + nmode = gitmode(execf2(f)) addmodehdr(header, omode, nmode) if util.binary(to) or util.binary(tn): dodiff = 'binary'