# HG changeset patch # User Jun Wu # Date 2017-08-28 23:58:59 # Node ID be814edf330652899299f3b2d2eb64dedfd5a18a # Parent becce02036e1b4d795342ec7c822e4307fb70dfc 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 diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -2371,7 +2371,7 @@ class metadataonlyctx(committablectx): 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) diff --git a/tests/test-context-metadata.t b/tests/test-context-metadata.t new file mode 100644 --- /dev/null +++ b/tests/test-context-metadata.t @@ -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 < 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 ' + $ hg log -r tip + changeset: 4:1f86eaeca92b + tag: tip + parent: 1:3afb7afe6632 + user: foo + date: Thu Jan 01 00:00:00 1970 +0000 + summary: Remove A +