Mercurial > hg
changeset 23584:db03ed8cbfa3
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.
author | Augie Fackler <augie@google.com> |
---|---|
date | Mon, 15 Dec 2014 15:00:54 -0500 |
parents | a8edcb9c1199 |
children | 94b25d71dd0f |
files | mercurial/context.py tests/test-commit.t |
diffstat | 2 files changed, 69 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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 <<EOF + > [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 <<EOF > # disable customizing for subsequent tests > [committemplate]