diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -2378,7 +2378,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) 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 +