Mercurial > hg
changeset 33999:be814edf3306
metadataonlyctx: don't crash when reusing the manifest with deletions
This was originally fixed by Mateusz Kwapich for the `metaedit` command in
fb-hgext with a test for the `metaedit` command. It didn't get upstreamed
because `metaedit` was not in core.
This patch fixes the crash and adds a test about `metadataonlyctx` to
avoid future regressions.
Differential Revision: https://phab.mercurial-scm.org/D550
author | Jun Wu <quark@fb.com> |
---|---|
date | Mon, 28 Aug 2017 16:58:59 -0700 |
parents | becce02036e1 |
children | 5cef00cdba7f |
files | mercurial/context.py tests/test-context-metadata.t |
diffstat | 2 files changed, 51 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Mon Aug 28 16:49:41 2017 -0700 +++ b/mercurial/context.py Mon Aug 28 16:58:59 2017 -0700 @@ -2371,7 +2371,7 @@ for f in self._files: if not managing(f): added.append(f) - elif self[f]: + elif f in self: modified.append(f) else: removed.append(f)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-context-metadata.t Mon Aug 28 16:58:59 2017 -0700 @@ -0,0 +1,50 @@ +Tests about metadataonlyctx + + $ hg init + $ echo A > A + $ hg commit -A A -m 'Add A' + $ echo B > B + $ hg commit -A B -m 'Add B' + $ hg rm A + $ echo C > C + $ echo B2 > B + $ hg add C -q + $ hg commit -m 'Remove A' + + $ cat > metaedit.py <<EOF + > from __future__ import absolute_import + > from mercurial import context, registrar + > cmdtable = {} + > command = registrar.command(cmdtable) + > @command('metaedit') + > def metaedit(ui, repo, arg): + > # Modify commit message to "FOO" + > with repo.wlock(), repo.lock(), repo.transaction('metaedit'): + > old = repo['.'] + > kwargs = dict(s.split('=', 1) for s in arg.split(';')) + > if 'parents' in kwargs: + > kwargs['parents'] = kwargs['parents'].split(',') + > new = context.metadataonlyctx(repo, old, **kwargs) + > new.commit() + > EOF + $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'text=Changed' + $ hg log -r tip + changeset: 3:ad83e9e00ec9 + tag: tip + parent: 1:3afb7afe6632 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: Changed + + $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'parents=0' 2>&1 | egrep '^\S*Error' + RuntimeError: can't reuse the manifest: its p1 doesn't match the new ctx p1 + + $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'user=foo <foo@example.com>' + $ hg log -r tip + changeset: 4:1f86eaeca92b + tag: tip + parent: 1:3afb7afe6632 + user: foo <foo@example.com> + date: Thu Jan 01 00:00:00 1970 +0000 + summary: Remove A +