amend: mark commit obsolete after moving working copy
We were doing it this way:
1. move working copy (repo.setparents)
2. add obsmarkers (scmutil.cleanupnodes)
3. fix dirstate (dirstate.normal/drop)
Step 1 and 3 are closely related, so let's move them together. It
seems safest to create the obsmarkers last. This patch thus makes the
order 1, 3, 2.
Differential Revision: https://phab.mercurial-scm.org/D10197
--- a/mercurial/cmdutil.py Wed Mar 10 06:03:01 2021 +0100
+++ b/mercurial/cmdutil.py Tue Feb 26 15:54:20 2019 -0800
@@ -2967,20 +2967,6 @@
# Reroute the working copy parent to the new changeset
repo.setparents(newid, nullid)
- mapping = {old.node(): (newid,)}
- obsmetadata = None
- if opts.get(b'note'):
- obsmetadata = {b'note': encoding.fromlocal(opts[b'note'])}
- backup = ui.configbool(b'rewrite', b'backup-bundle')
- scmutil.cleanupnodes(
- repo,
- mapping,
- b'amend',
- metadata=obsmetadata,
- fixphase=True,
- targetphase=commitphase,
- backup=backup,
- )
# Fixing the dirstate because localrepo.commitctx does not update
# it. This is rather convenient because we did not need to update
@@ -3003,6 +2989,21 @@
for f in removedfiles:
dirstate.drop(f)
+ mapping = {old.node(): (newid,)}
+ obsmetadata = None
+ if opts.get(b'note'):
+ obsmetadata = {b'note': encoding.fromlocal(opts[b'note'])}
+ backup = ui.configbool(b'rewrite', b'backup-bundle')
+ scmutil.cleanupnodes(
+ repo,
+ mapping,
+ b'amend',
+ metadata=obsmetadata,
+ fixphase=True,
+ targetphase=commitphase,
+ backup=backup,
+ )
+
return newid