# HG changeset patch # User Augie Fackler # Date 1418673654 18000 # Node ID db03ed8cbfa3fc7f8a4b4af316bafee2a036b36b # Parent a8edcb9c119978f893ee76bc971138524a501102 memctx: fix manifest for removed files (issue4470) filectxfn returns None for removed files, so we have to check for None before computing the new file content hash for the manifest. Includes a test that proves this works, by demonstrating that we can show the diff of an amended commit in the committemplate. diff -r a8edcb9c1199 -r db03ed8cbfa3 mercurial/context.py --- a/mercurial/context.py Fri Dec 12 15:53:17 2014 -0500 +++ b/mercurial/context.py Mon Dec 15 15:00:54 2014 -0500 @@ -1625,9 +1625,10 @@ # keep this simple for now; just worry about p1 pctx = self._parents[0] + pman = pctx.manifest() man = pctx.manifest().copy() - for f, fnode in man.iteritems(): + for f, fnode in pman.iteritems(): p1node = nullid p2node = nullid p = pctx[f].parents() # if file isn't in pctx, check p2? @@ -1635,7 +1636,12 @@ p1node = p[0].node() if len(p) > 1: p2node = p[1].node() - man[f] = revlog.hash(self[f].data(), p1node, p2node) + fctx = self[f] + if fctx is None: + # removed file + del man[f] + else: + man[f] = revlog.hash(fctx.data(), p1node, p2node) return man diff -r a8edcb9c1199 -r db03ed8cbfa3 tests/test-commit.t --- a/tests/test-commit.t Fri Dec 12 15:53:17 2014 -0500 +++ b/tests/test-commit.t Mon Dec 15 15:00:54 2014 -0500 @@ -429,6 +429,67 @@ abort: empty commit message [255] +prove that we can show a diff of an amend using committemplate: + + $ hg init issue4470 + $ cd issue4470 + $ cat >> .hg/hgrc < [committemplate] + > changeset = {desc}\n\n + > HG: {extramsg} + > HG: user: {author}\n{ifeq(p2rev, "-1", "", + > "HG: branch merge\n") + > }HG: branch '{branch}'\n{if(currentbookmark, + > "HG: bookmark '{currentbookmark}'\n") }{subrepos % + > "HG: subrepo {subrepo}\n" } + > {splitlines(diff()) % 'HG: {line}\n'} + > EOF + $ echo a > a + $ echo b > b + $ hg addr + adding a + adding b + $ hg ci -m 'init' + $ hg rm b + $ hg ci -m 'rm b' + $ hg export . + # HG changeset patch + # User test + # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 + # Node ID 88d0ffa85e7a92ccc7c9cc187f9b17858bd206a7 + # Parent 9118d25c26b1ca5cab5683b02100e7eb2c0d9471 + rm b + + diff -r 9118d25c26b1 -r 88d0ffa85e7a b + --- a/b Thu Jan 01 00:00:00 1970 +0000 + +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +0,0 @@ + -b + $ echo a >> a + $ HGEDITOR=cat hg commit --amend + rm b + + + HG: Leave message empty to abort commit. + HG: user: test + HG: branch 'default' + + HG: diff -r 9118d25c26b1 a + HG: --- a/a Thu Jan 01 00:00:00 1970 +0000 + HG: +++ b/a Thu Jan 01 00:00:00 1970 +0000 + HG: @@ -1,1 +1,2 @@ + HG: a + HG: +a + HG: diff -r 9118d25c26b1 b + HG: --- a/b Thu Jan 01 00:00:00 1970 +0000 + HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + HG: @@ -1,1 +0,0 @@ + HG: -b + saved backup bundle to $TESTTMP/*/*-amend-backup.hg (glob) + $ cd .. + +cleanup $ cat >> .hg/hgrc < # disable customizing for subsequent tests > [committemplate]