From patchwork Tue Aug 29 14:05:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D550: metadataonlyctx: don't crash when reusing the manifest with deletions From: phabricator X-Patchwork-Id: 23467 Message-Id: <96bd878cf544279bed1a9d748733eadb@localhost.localdomain> To: mercurial-devel@mercurial-scm.org Date: Tue, 29 Aug 2017 14:05:43 +0000 This revision was automatically updated to reflect the committed changes. Closed by commit rHGbe814edf3306: metadataonlyctx: don't crash when reusing the manifest with deletions (authored by quark). REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D550?vs=1374&id=1392 REVISION DETAIL https://phab.mercurial-scm.org/D550 AFFECTED FILES mercurial/context.py tests/test-context-metadata.t CHANGE DETAILS To: quark, #hg-reviewers Cc: mercurial-devel 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 + diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -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)