##// END OF EJS Templates
amend: new extension providing the amend command...
Jun Wu -
r33404:0d5afd36 default
parent child Browse files
Show More
@@ -0,0 +1,51
1 # amend.py - provide the amend command
2 #
3 # Copyright 2017 Facebook, Inc.
4 #
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
7 """provide the amend command (EXPERIMENTAL)
8
9 This extension provides an ``amend`` command that is similar to
10 ``commit --amend`` but does not prompt an editor.
11 """
12
13 from __future__ import absolute_import
14
15 from mercurial.i18n import _
16 from mercurial import (
17 cmdutil,
18 commands,
19 registrar,
20 )
21
22 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
23 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
24 # be specifying the version(s) of Mercurial they are tested with, or
25 # leave the attribute unspecified.
26 testedwith = 'ships-with-hg-core'
27
28 cmdtable = {}
29 command = registrar.command(cmdtable)
30
31 @command('amend',
32 [('A', 'addremove', None,
33 _('mark new/missing files as added/removed before committing')),
34 ('e', 'edit', None, _('invoke editor on commit messages')),
35 ('i', 'interactive', None, _('use interactive mode')),
36 ] + cmdutil.walkopts + cmdutil.commitopts + cmdutil.commitopts2,
37 _('[OPTION]... [FILE]...'),
38 inferrepo=True)
39 def amend(ui, repo, *pats, **opts):
40 """amend the working copy parent with all or specified outstanding changes
41
42 Similar to :hg:`commit --amend`, but reuse the commit message without
43 invoking editor, unless ``--edit`` was set.
44
45 See :hg:`help commit` for more details.
46 """
47 with repo.wlock(), repo.lock():
48 if not opts.get('logfile'):
49 opts['message'] = opts.get('message') or repo['.'].description()
50 opts['amend'] = True
51 return commands._docommit(ui, repo, *pats, **opts)
@@ -0,0 +1,220
1 #testcases obsstore-off obsstore-on
2
3 $ cat << EOF >> $HGRCPATH
4 > [extensions]
5 > amend=
6 > debugdrawdag=$TESTDIR/drawdag.py
7 > [diff]
8 > git=1
9 > EOF
10
11 #if obsstore-on
12 $ cat << EOF >> $HGRCPATH
13 > [experimental]
14 > evolution=createmarkers
15 > EOF
16 #endif
17
18 Basic amend
19
20 $ hg init repo1
21 $ cd repo1
22 $ hg debugdrawdag <<'EOS'
23 > B
24 > |
25 > A
26 > EOS
27
28 $ hg update B -q
29 $ echo 2 >> B
30
31 #if obsstore-off
32 $ hg amend
33 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/112478962961-af2c0941-amend.hg (glob)
34 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
35 @ 1 be169c7e8dbe B
36 | diff --git a/B b/B
37 | new file mode 100644
38 | --- /dev/null
39 | +++ b/B
40 | @@ -0,0 +1,1 @@
41 | +B2
42 |
43 o 0 426bada5c675 A
44 diff --git a/A b/A
45 new file mode 100644
46 --- /dev/null
47 +++ b/A
48 @@ -0,0 +1,1 @@
49 +A
50 \ No newline at end of file
51
52 #else
53 $ hg amend
54 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
55 @ 3 be169c7e8dbe B
56 | diff --git a/B b/B
57 | new file mode 100644
58 | --- /dev/null
59 | +++ b/B
60 | @@ -0,0 +1,1 @@
61 | +B2
62 |
63 | x 2 edf08988b141 temporary amend commit for 112478962961
64 | | diff --git a/B b/B
65 | | --- a/B
66 | | +++ b/B
67 | | @@ -1,1 +1,1 @@
68 | | -B
69 | | \ No newline at end of file
70 | | +B2
71 | |
72 | x 1 112478962961 B
73 |/ diff --git a/B b/B
74 | new file mode 100644
75 | --- /dev/null
76 | +++ b/B
77 | @@ -0,0 +1,1 @@
78 | +B
79 | \ No newline at end of file
80 |
81 o 0 426bada5c675 A
82 diff --git a/A b/A
83 new file mode 100644
84 --- /dev/null
85 +++ b/A
86 @@ -0,0 +1,1 @@
87 +A
88 \ No newline at end of file
89
90 #endif
91
92 Nothing changed
93
94 $ hg amend
95 nothing changed
96 [1]
97
98 Matcher and metadata options
99
100 $ echo 3 > C
101 $ echo 4 > D
102 $ hg add C D
103 $ hg amend -m NEWMESSAGE -I C -q
104 $ hg log -r . -T '{node|short} {desc} {files}\n'
105 c7ba14d9075b NEWMESSAGE B C
106 $ echo 5 > E
107 $ rm C
108 $ hg amend -d '2000 1000' -u 'Foo <foo@example.com>' -A C D -q
109 $ hg log -r . -T '{node|short} {desc} {files} {author} {date}\n'
110 14f6c4bcc865 NEWMESSAGE B D Foo <foo@example.com> 2000.01000
111
112 Amend with editor
113
114 $ cat > $TESTTMP/prefix.sh <<'EOF'
115 > printf 'EDITED: ' > $TESTTMP/msg
116 > cat "$1" >> $TESTTMP/msg
117 > mv $TESTTMP/msg "$1"
118 > EOF
119 $ chmod +x $TESTTMP/prefix.sh
120
121 $ HGEDITOR="$TESTTMP/prefix.sh" hg amend --edit -q
122 $ hg log -r . -T '{node|short} {desc}\n'
123 298f085230c3 EDITED: NEWMESSAGE
124 $ HGEDITOR="$TESTTMP/prefix.sh" hg amend -e -m MSG -q
125 $ hg log -r . -T '{node|short} {desc}\n'
126 974f07f28537 EDITED: MSG
127
128 $ echo FOO > $TESTTMP/msg
129 $ hg amend -l $TESTTMP/msg -m BAR
130 abort: options --message and --logfile are mutually exclusive
131 [255]
132 $ hg amend -l $TESTTMP/msg -q
133 $ hg log -r . -T '{node|short} {desc}\n'
134 507be9bdac71 FOO
135
136 Interactive mode
137
138 $ touch F G
139 $ hg add F G
140 $ cat <<EOS | hg amend -i --config ui.interactive=1 -q
141 > y
142 > n
143 > EOS
144 diff --git a/F b/F
145 new file mode 100644
146 examine changes to 'F'? [Ynesfdaq?] y
147
148 diff --git a/G b/G
149 new file mode 100644
150 examine changes to 'G'? [Ynesfdaq?] n
151
152 $ hg log -r . -T '{files}\n'
153 B D F
154
155 Amend in the middle of a stack
156
157 $ hg init $TESTTMP/repo2
158 $ cd $TESTTMP/repo2
159 $ hg debugdrawdag <<'EOS'
160 > C
161 > |
162 > B
163 > |
164 > A
165 > EOS
166
167 $ hg update -q B
168 $ echo 2 >> B
169 $ hg amend
170 abort: cannot amend changeset with children
171 [255]
172
173 #if obsstore-on
174
175 With allowunstable, amend could work in the middle of a stack
176
177 $ cat >> $HGRCPATH <<EOF
178 > [experimental]
179 > evolution=createmarkers, allowunstable
180 > EOF
181
182 $ hg amend
183 $ hg log -T '{rev} {node|short} {desc}\n' -G
184 @ 4 be169c7e8dbe B
185 |
186 | o 2 26805aba1e60 C
187 | |
188 | x 1 112478962961 B
189 |/
190 o 0 426bada5c675 A
191
192 #endif
193
194 Cannot amend public changeset
195
196 $ hg phase -r A --public
197 $ hg update -C -q A
198 $ hg amend -m AMEND -q
199 abort: cannot amend public changesets
200 [255]
201
202 Amend a merge changeset
203
204 $ hg init $TESTTMP/repo3
205 $ cd $TESTTMP/repo3
206 $ hg debugdrawdag <<'EOS'
207 > C
208 > /|
209 > A B
210 > EOS
211 $ hg update -q C
212 $ hg amend -m FOO -q
213 $ rm .hg/localtags
214 $ hg log -G -T '{desc}\n'
215 @ FOO
216 |\
217 | o B
218 |
219 o A
220
General Comments 0
You need to be logged in to leave comments. Login now