Patchwork D550: metadataonlyctx: don't crash when reusing the manifest with deletions

login
register
mail settings
Submitter phabricator
Date Aug. 29, 2017, 2:05 p.m.
Message ID <96bd878cf544279bed1a9d748733eadb@localhost.localdomain>
Download mbox | patch
Permalink /patch/23467/
State Not Applicable
Headers show

Comments

phabricator - Aug. 29, 2017, 2:05 p.m.
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

Patch

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 <<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
+  
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)