annotate hgext/uncommit.py @ 43077:687b865b95ad

formatting: byteify all mercurial/ and hgext/ string literals Done with python3.7 contrib/byteify-strings.py -i $(hg files 'set:mercurial/**.py - mercurial/thirdparty/** + hgext/**.py - hgext/fsmonitor/pywatchman/** - mercurial/__init__.py') black -l 80 -t py33 -S $(hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**" - hgext/fsmonitor/pywatchman/**') # skip-blame mass-reformatting only Differential Revision: https://phab.mercurial-scm.org/D6972
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:48:39 -0400
parents 2372284d9457
children 649d3ac37a12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
1 # uncommit - undo the actions of a commit
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
2 #
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
3 # Copyright 2011 Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
4 # Logilab SA <contact@logilab.fr>
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
5 # Pierre-Yves David <pierre-yves.david@ens-lyon.org>
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
6 # Patrick Mezard <patrick@mezard.eu>
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
7 # Copyright 2016 Facebook, Inc.
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
8 #
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
9 # This software may be used and distributed according to the terms of the
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
10 # GNU General Public License version 2 or any later version.
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
11
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
12 """uncommit part or all of a local changeset (EXPERIMENTAL)
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
13
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
14 This command undoes the effect of a local commit, returning the affected
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
15 files to their uncommitted state. This means that files modified, added or
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
16 removed in the changeset will be left unchanged, and so will remain modified,
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
17 added and removed in the working directory.
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
18 """
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
19
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
20 from __future__ import absolute_import
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
21
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
22 from mercurial.i18n import _
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
23
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
24 from mercurial import (
34291
624c53e4121d uncommit: don't allow bare uncommit on dirty working directory
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34290
diff changeset
25 cmdutil,
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
26 commands,
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
27 context,
41364
7be231f5a4ad unamend: import "copies" module as "copiesmod" to avoid shadowing
Martin von Zweigbergk <martinvonz@google.com>
parents: 40295
diff changeset
28 copies as copiesmod,
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
29 error,
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
30 node,
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
31 obsutil,
35045
3ebae3ec4664 py3: handle keyword arguments in hgext/uncommit.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34758
diff changeset
32 pycompat,
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
33 registrar,
35253
98f97eb20597 rewriteutil: use precheck() in uncommit and amend commands
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35210
diff changeset
34 rewriteutil,
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
35 scmutil,
42051
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
36 util,
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
37 )
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
38
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
39 cmdtable = {}
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
40 command = registrar.command(cmdtable)
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
41
34758
9ea416a4b4f7 configitems: register the 'experimental.uncommitondirtywdir' config
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
42 configtable = {}
9ea416a4b4f7 configitems: register the 'experimental.uncommitondirtywdir' config
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
43 configitem = registrar.configitem(configtable)
9ea416a4b4f7 configitems: register the 'experimental.uncommitondirtywdir' config
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
44
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
45 configitem(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
46 b'experimental', b'uncommitondirtywdir', default=False,
34758
9ea416a4b4f7 configitems: register the 'experimental.uncommitondirtywdir' config
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
47 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
48 configitem(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
49 b'experimental', b'uncommit.keep', default=False,
41759
1040d54eb7eb uncommit: add config option to keep commit by default
Martin von Zweigbergk <martinvonz@google.com>
parents: 41754
diff changeset
50 )
34758
9ea416a4b4f7 configitems: register the 'experimental.uncommitondirtywdir' config
Boris Feld <boris.feld@octobus.net>
parents: 34292
diff changeset
51
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
52 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
53 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
54 # be specifying the version(s) of Mercurial they are tested with, or
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
55 # leave the attribute unspecified.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
56 testedwith = b'ships-with-hg-core'
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
57
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
58
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
59 def _commitfiltered(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
60 repo, ctx, match, keepcommit, message=None, user=None, date=None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
61 ):
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
62 """Recommit ctx with changed files not in match. Return the new
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
63 node identifier, or None if nothing changed.
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
64 """
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
65 base = ctx.p1()
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
66 # ctx
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
67 initialfiles = set(ctx.files())
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
68 exclude = set(f for f in initialfiles if match(f))
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
69
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
70 # No files matched commit, so nothing excluded
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
71 if not exclude:
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
72 return None
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
73
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
74 # return the p1 so that we don't create an obsmarker later
36980
435b8b05affd uncommit: simplify condition for keeping commit
Martin von Zweigbergk <martinvonz@google.com>
parents: 36979
diff changeset
75 if not keepcommit:
41419
0bd56c291359 cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents: 41367
diff changeset
76 return ctx.p1().node()
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
77
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
78 files = initialfiles - exclude
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
79 # Filter copies
41364
7be231f5a4ad unamend: import "copies" module as "copiesmod" to avoid shadowing
Martin von Zweigbergk <martinvonz@google.com>
parents: 40295
diff changeset
80 copied = copiesmod.pathcopies(base, ctx)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
81 copied = dict((dst, src) for dst, src in copied.iteritems() if dst in files)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
82
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
83 def filectxfn(repo, memctx, path, contentctx=ctx, redirect=()):
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
84 if path not in contentctx:
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
85 return None
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
86 fctx = contentctx[path]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
87 mctx = context.memfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
88 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
89 memctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
90 fctx.path(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
91 fctx.data(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
92 fctx.islink(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
93 fctx.isexec(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
94 copysource=copied.get(path),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
95 )
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
96 return mctx
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
97
41754
83d294c71f1e uncommit: inform user if the commit is empty after uncommit
Martin von Zweigbergk <martinvonz@google.com>
parents: 41419
diff changeset
98 if not files:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
99 repo.ui.status(_(b"note: keeping empty commit\n"))
41754
83d294c71f1e uncommit: inform user if the commit is empty after uncommit
Martin von Zweigbergk <martinvonz@google.com>
parents: 41419
diff changeset
100
42908
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
101 if message is None:
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
102 message = ctx.description()
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
103 if not user:
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
104 user = ctx.user()
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
105 if not date:
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
106 date = ctx.date()
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
107
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
108 new = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
109 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
110 parents=[base.node(), node.nullid],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
111 text=message,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
112 files=files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
113 filectxfn=filectxfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
114 user=user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
115 date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
116 extra=ctx.extra(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
117 )
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 36980
diff changeset
118 return repo.commitctx(new)
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
119
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
120
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
121 @command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
122 b'uncommit',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
123 [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
124 (b'', b'keep', None, _(b'allow an empty commit after uncommitting')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
125 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
126 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
127 b'allow-dirty-working-copy',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
128 False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
129 _(b'allow uncommit with outstanding changes'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
130 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
131 (b'n', b'note', b'', _(b'store a note on uncommit'), _(b'TEXT')),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
132 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
133 + commands.walkopts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
134 + commands.commitopts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
135 + commands.commitopts2
42909
66048f6b5d0d uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42908
diff changeset
136 + commands.commitopts3,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
137 _(b'[OPTION]... [FILE]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
138 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
139 )
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
140 def uncommit(ui, repo, *pats, **opts):
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
141 """uncommit part or all of a local changeset
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
142
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
143 This command undoes the effect of a local commit, returning the affected
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
144 files to their uncommitted state. This means that files modified or
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
145 deleted in the changeset will be left unchanged, and so will remain
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
146 modified in the working directory.
36979
d63c5c651183 uncommit: document when the commit will be pruned
Martin von Zweigbergk <martinvonz@google.com>
parents: 36978
diff changeset
147
d63c5c651183 uncommit: document when the commit will be pruned
Martin von Zweigbergk <martinvonz@google.com>
parents: 36978
diff changeset
148 If no files are specified, the commit will be pruned, unless --keep is
d63c5c651183 uncommit: document when the commit will be pruned
Martin von Zweigbergk <martinvonz@google.com>
parents: 36978
diff changeset
149 given.
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
150 """
35045
3ebae3ec4664 py3: handle keyword arguments in hgext/uncommit.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34758
diff changeset
151 opts = pycompat.byteskwargs(opts)
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
152
42940
2da754532dd3 uncommit: enable support for adding a note
Matt Harbison <matt_harbison@yahoo.com>
parents: 42909
diff changeset
153 cmdutil.checknotesize(ui, opts)
42909
66048f6b5d0d uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42908
diff changeset
154 cmdutil.resolvecommitoptions(ui, opts)
66048f6b5d0d uncommit: add options to update to the current user or current date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42908
diff changeset
155
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
156 with repo.wlock(), repo.lock():
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
157
41864
bf22e370ae9a uncommit: don't allow dirty working copy with PATH (issue5977)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents: 41759
diff changeset
158 m, a, r, d = repo.status()[:4]
bf22e370ae9a uncommit: don't allow dirty working copy with PATH (issue5977)
Navaneeth Suresh <navaneeths1998@gmail.com>
parents: 41759
diff changeset
159 isdirtypath = any(set(m + a + r + d) & set(pats))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
160 allowdirtywcopy = opts[
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
161 b'allow_dirty_working_copy'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
162 ] or repo.ui.configbool(b'experimental', b'uncommitondirtywdir')
41865
aa284d9a33ca uncommit: add flag --allow-dirty-working-copy
Navaneeth Suresh <navaneeths1998@gmail.com>
parents: 41864
diff changeset
163 if not allowdirtywcopy and (not pats or isdirtypath):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
164 cmdutil.bailifchanged(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
165 repo,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
166 hint=_(b'requires ' b'--allow-dirty-working-copy to uncommit'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
167 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
168 old = repo[b'.']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
169 rewriteutil.precheck(repo, [old.rev()], b'uncommit')
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
170 if len(old.parents()) > 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
171 raise error.Abort(_(b"cannot uncommit merge changeset"))
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
172
42051
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
173 match = scmutil.match(old, pats, opts)
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
174
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
175 # Check all explicitly given files; abort if there's a problem.
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
176 if match.files():
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
177 s = old.status(old.p1(), match, listclean=True)
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
178 eligible = set(s.added) | set(s.modified) | set(s.removed)
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
179
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
180 badfiles = set(match.files()) - eligible
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
181
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
182 # Naming a parent directory of an eligible file is OK, even
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
183 # if not everything tracked in that directory can be
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
184 # uncommitted.
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
185 if badfiles:
42057
566daffc607d cleanup: use set literals where possible
Martin von Zweigbergk <martinvonz@google.com>
parents: 42051
diff changeset
186 badfiles -= {f for f in util.dirs(eligible)}
42051
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
187
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
188 for f in sorted(badfiles):
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
189 if f in s.clean:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
190 hint = _(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
191 b"file was not changed in working directory " b"parent"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
192 )
42051
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
193 elif repo.wvfs.exists(f):
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
194 hint = _(b"file was untracked in working directory parent")
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
195 else:
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
196 hint = _(b"file does not exist")
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
197
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
198 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
199 _(b'cannot uncommit "%s"') % scmutil.getuipathfn(repo)(f),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
200 hint=hint,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
201 )
42051
f4147ca63d39 uncommit: abort if an explicitly given file cannot be uncommitted (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 41994
diff changeset
202
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
203 with repo.transaction(b'uncommit'):
42908
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
204 if not (opts[b'message'] or opts[b'logfile']):
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
205 opts[b'message'] = old.description()
42956
44be33cf7a57 py3: don't double-convert "opts" to bytes
Martin von Zweigbergk <martinvonz@google.com>
parents: 42940
diff changeset
206 message = cmdutil.logmessage(ui, opts)
42908
ff1ff2aae132 uncommit: add support to modify the commit message and date
Matt Harbison <matt_harbison@yahoo.com>
parents: 42057
diff changeset
207
41759
1040d54eb7eb uncommit: add config option to keep commit by default
Martin von Zweigbergk <martinvonz@google.com>
parents: 41754
diff changeset
208 keepcommit = pats
1040d54eb7eb uncommit: add config option to keep commit by default
Martin von Zweigbergk <martinvonz@google.com>
parents: 41754
diff changeset
209 if not keepcommit:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
210 if opts.get(b'keep') is not None:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
211 keepcommit = opts.get(b'keep')
41759
1040d54eb7eb uncommit: add config option to keep commit by default
Martin von Zweigbergk <martinvonz@google.com>
parents: 41754
diff changeset
212 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
213 keepcommit = ui.configbool(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
214 b'experimental', b'uncommit.keep'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
215 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
216 newid = _commitfiltered(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
217 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
218 old,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
219 match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
220 keepcommit,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
221 message=message,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
222 user=opts.get(b'user'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
223 date=opts.get(b'date'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
224 )
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
225 if newid is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
226 ui.status(_(b"nothing to uncommit\n"))
34204
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
227 return 1
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
228
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
229 mapping = {}
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
230 if newid != old.p1().node():
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
231 # Move local changes on filtered changeset
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
232 mapping[old.node()] = (newid,)
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
233 else:
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
234 # Fully removed the old commit
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
235 mapping[old.node()] = ()
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
236
da2f5f19312c uncommit: move fb-extension to core which uncommits a changeset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff changeset
237 with repo.dirstate.parentchange():
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41940
diff changeset
238 scmutil.movedirstate(repo, repo[newid], match)
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
239
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
240 scmutil.cleanupnodes(repo, mapping, b'uncommit', fixphase=True)
41365
c9f1fd82a826 uncommit: mark old node obsolete after updating dirstate
Martin von Zweigbergk <martinvonz@google.com>
parents: 41364
diff changeset
241
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
242
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
243 def predecessormarkers(ctx):
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
244 """yields the obsolete markers marking the given changeset as a successor"""
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
245 for data in ctx.repo().obsstore.predecessors.get(ctx.node(), ()):
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
246 yield obsutil.marker(ctx.repo(), data)
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
247
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
248
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
249 @command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
250 b'unamend',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
251 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
252 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
253 helpbasic=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
254 )
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
255 def unamend(ui, repo, **opts):
35809
f9a82b9b2c36 unamend: fix command summary line
Martin von Zweigbergk <martinvonz@google.com>
parents: 35439
diff changeset
256 """undo the most recent amend operation on a current changeset
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
257
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
258 This command will roll back to the previous version of a changeset,
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
259 leaving working directory in state in which it was before running
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
260 `hg amend` (e.g. files modified as part of an amend will be
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
261 marked as modified `hg status`)
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
262 """
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
263
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
264 unfi = repo.unfiltered()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
265 with repo.wlock(), repo.lock(), repo.transaction(b'unamend'):
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
266
35210
9e339c97fabb unamend: drop unused vars, query after taking lock, use ctx.hex() for extras
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35194
diff changeset
267 # identify the commit from which to unamend
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
268 curctx = repo[b'.']
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
269
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
270 rewriteutil.precheck(repo, [curctx.rev()], b'unamend')
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
271
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
272 # identify the commit to which to unamend
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
273 markers = list(predecessormarkers(curctx))
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
274 if len(markers) != 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
275 e = _(b"changeset must have one predecessor, found %i predecessors")
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
276 raise error.Abort(e % len(markers))
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
277
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
278 prednode = markers[0].prednode()
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
279 predctx = unfi[prednode]
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
280
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
281 # add an extra so that we get a new hash
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
282 # note: allowing unamend to undo an unamend is an intentional feature
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
283 extras = predctx.extra()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
284 extras[b'unamend_source'] = curctx.hex()
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
285
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
286 def filectxfn(repo, ctx_, path):
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
287 try:
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
288 return predctx.filectx(path)
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
289 except KeyError:
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
290 return None
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
291
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
292 # Make a new commit same as predctx
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
293 newctx = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
294 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
295 parents=(predctx.p1(), predctx.p2()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
296 text=predctx.description(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
297 files=predctx.files(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
298 filectxfn=filectxfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
299 user=predctx.user(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
300 date=predctx.date(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
301 extra=extras,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42976
diff changeset
302 )
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 36980
diff changeset
303 newprednode = repo.commitctx(newctx)
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
304 newpredctx = repo[newprednode]
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
305 dirstate = repo.dirstate
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
306
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
307 with dirstate.parentchange():
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41940
diff changeset
308 scmutil.movedirstate(repo, newpredctx)
35193
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
309
867990238dc6 unamend: move fb extension unamend to core
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35045
diff changeset
310 mapping = {curctx.node(): (newprednode,)}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
311 scmutil.cleanupnodes(repo, mapping, b'unamend', fixphase=True)