Mercurial > hg
comparison tests/test-amend.t @ 33404:0d5afd360e9e
amend: new extension providing the amend command
Various third parties have implemented the `amend` command, which is in high
demand. This patch adds it as an experimental extension so its interface
could be formalized in core directly.
Since `commit --amend` is basically what `amend` should do. The command is
just a thin wrapper around `commit --amend` and just prevent the editor from
popping up by passing `--message`.
author | Jun Wu <quark@fb.com> |
---|---|
date | Tue, 11 Jul 2017 20:53:55 -0700 |
parents | |
children | fd6eb444f2e1 |
comparison
equal
deleted
inserted
replaced
33403:1bb209d08a34 | 33404:0d5afd360e9e |
---|---|
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 |