comparison tests/test-unamend.t @ 35182:867990238dc6

unamend: move fb extension unamend to core unamend extension adds an unamend command which undoes the effect of the amend command. This patch moves the unamend command from that extension to uncommit extension and this one does not completely undoes the effect of amend command as it creates a new commit, rather than reviving the old one back. This also adds tests for the same. .. feature:: A new unamend command in uncommit extension which undoes the effect of the amend command by creating a new changeset which was there before amend and moving the changes that were amended to the working directory. Differential Revision: https://phab.mercurial-scm.org/D821
author Pulkit Goyal <7895pulkit@gmail.com>
date Sun, 24 Sep 2017 00:56:52 +0530
parents
children 900ed9853017
comparison
equal deleted inserted replaced
35181:d4805a5e7e70 35182:867990238dc6
1 Test for command `hg unamend` which lives in uncommit extension
2 ===============================================================
3
4 $ cat >> $HGRCPATH << EOF
5 > [alias]
6 > glog = log -G -T '{rev}:{node|short} {desc}'
7 > [experimental]
8 > evolution = createmarkers, allowunstable
9 > [extensions]
10 > rebase =
11 > amend =
12 > uncommit =
13 > EOF
14
15 Repo Setup
16
17 $ hg init repo
18 $ cd repo
19 $ for ch in {a..h}; do touch $ch; echo "foo" >> $ch; hg ci -Aqm "Added "$ch; done
20
21 $ hg glog
22 @ 7:ec2426147f0e Added h
23 |
24 o 6:87d6d6676308 Added g
25 |
26 o 5:825660c69f0c Added f
27 |
28 o 4:aa98ab95a928 Added e
29 |
30 o 3:62615734edd5 Added d
31 |
32 o 2:28ad74487de9 Added c
33 |
34 o 1:29becc82797a Added b
35 |
36 o 0:18d04c59bb5d Added a
37
38 Trying to unamend when there was no amend done
39
40 $ hg unamend
41 abort: changeset must have one predecessor, found 0 predecessors
42 [255]
43
44 Unamend on clean wdir and tip
45
46 $ echo "bar" >> h
47 $ hg amend
48
49 $ hg exp
50 # HG changeset patch
51 # User test
52 # Date 0 0
53 # Thu Jan 01 00:00:00 1970 +0000
54 # Node ID c9fa1a715c1b7661c0fafb362a9f30bd75878d7d
55 # Parent 87d6d66763085b629e6d7ed56778c79827273022
56 Added h
57
58 diff -r 87d6d6676308 -r c9fa1a715c1b h
59 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
60 +++ b/h Thu Jan 01 00:00:00 1970 +0000
61 @@ -0,0 +1,2 @@
62 +foo
63 +bar
64
65 $ hg glog --hidden
66 @ 8:c9fa1a715c1b Added h
67 |
68 | x 7:ec2426147f0e Added h
69 |/
70 o 6:87d6d6676308 Added g
71 |
72 o 5:825660c69f0c Added f
73 |
74 o 4:aa98ab95a928 Added e
75 |
76 o 3:62615734edd5 Added d
77 |
78 o 2:28ad74487de9 Added c
79 |
80 o 1:29becc82797a Added b
81 |
82 o 0:18d04c59bb5d Added a
83
84 $ hg unamend
85 $ hg glog --hidden
86 @ 9:8da14a1fd653 Added h
87 |
88 | x 8:c9fa1a715c1b Added h
89 |/
90 | x 7:ec2426147f0e Added h
91 |/
92 o 6:87d6d6676308 Added g
93 |
94 o 5:825660c69f0c Added f
95 |
96 o 4:aa98ab95a928 Added e
97 |
98 o 3:62615734edd5 Added d
99 |
100 o 2:28ad74487de9 Added c
101 |
102 o 1:29becc82797a Added b
103 |
104 o 0:18d04c59bb5d Added a
105
106 $ hg diff
107 diff -r 8da14a1fd653 h
108 --- a/h Thu Jan 01 00:00:00 1970 +0000
109 +++ b/h Thu Jan 01 00:00:00 1970 +0000
110 @@ -1,1 +1,2 @@
111 foo
112 +bar
113
114 $ hg exp
115 # HG changeset patch
116 # User test
117 # Date 0 0
118 # Thu Jan 01 00:00:00 1970 +0000
119 # Node ID 8da14a1fd653c3f07fdad5760511c9e12652a306
120 # Parent 87d6d66763085b629e6d7ed56778c79827273022
121 Added h
122
123 diff -r 87d6d6676308 -r 8da14a1fd653 h
124 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
125 +++ b/h Thu Jan 01 00:00:00 1970 +0000
126 @@ -0,0 +1,1 @@
127 +foo
128
129 $ hg status
130 M h
131
132 $ hg log -r . -T '{extras % "{extra}\n"}' --config alias.log=log
133 branch=default
134 unamend_source=\xc9\xfa\x1aq\\\x1bva\xc0\xfa\xfb6*\x9f0\xbdu\x87\x8d}
135
136 Using unamend to undo an unamed (intentional)
137
138 $ hg unamend
139 $ hg exp
140 # HG changeset patch
141 # User test
142 # Date 0 0
143 # Thu Jan 01 00:00:00 1970 +0000
144 # Node ID 1c09887216571a9755fc9d2e7f0e41c2b49e341b
145 # Parent 87d6d66763085b629e6d7ed56778c79827273022
146 Added h
147
148 diff -r 87d6d6676308 -r 1c0988721657 h
149 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
150 +++ b/h Thu Jan 01 00:00:00 1970 +0000
151 @@ -0,0 +1,2 @@
152 +foo
153 +bar
154 $ hg diff
155
156 Unamend on a dirty working directory
157
158 $ echo "bar" >> a
159 $ hg amend
160 $ echo "foobar" >> a
161 $ echo "bar" >> b
162 $ hg status
163 M a
164 M b
165
166 $ hg unamend
167
168 $ hg status
169 M a
170 M b
171
172 $ hg diff
173 diff -r 956548224719 a
174 --- a/a Thu Jan 01 00:00:00 1970 +0000
175 +++ b/a Thu Jan 01 00:00:00 1970 +0000
176 @@ -1,1 +1,3 @@
177 foo
178 +bar
179 +foobar
180 diff -r 956548224719 b
181 --- a/b Thu Jan 01 00:00:00 1970 +0000
182 +++ b/b Thu Jan 01 00:00:00 1970 +0000
183 @@ -1,1 +1,2 @@
184 foo
185 +bar
186
187 Unamending an added file
188
189 $ hg ci -m "Added things to a and b"
190 $ echo foo > bar
191 $ hg add bar
192 $ hg amend
193
194 $ hg unamend
195 $ hg status
196 A bar
197
198 $ hg revert --all
199 forgetting bar
200
201 Unamending a removed file
202
203 $ hg remove a
204 $ hg amend
205
206 $ hg unamend
207 $ hg status
208 R a
209 ? bar
210
211 $ hg revert --all
212 undeleting a
213
214 Unamending an added file with dirty wdir status
215
216 $ hg add bar
217 $ hg amend
218 $ echo bar >> bar
219 $ hg status
220 M bar
221
222 $ hg unamend
223 $ hg status
224 A bar
225 $ hg diff
226 diff -r ff917aa01c86 bar
227 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
228 +++ b/bar Thu Jan 01 00:00:00 1970 +0000
229 @@ -0,0 +1,2 @@
230 +foo
231 +bar
232
233 $ hg revert --all
234 forgetting bar
235
236 Unamending in middle of a stack
237
238 $ hg glog
239 @ 19:ff917aa01c86 Added things to a and b
240 |
241 o 12:956548224719 Added h
242 |
243 o 6:87d6d6676308 Added g
244 |
245 o 5:825660c69f0c Added f
246 |
247 o 4:aa98ab95a928 Added e
248 |
249 o 3:62615734edd5 Added d
250 |
251 o 2:28ad74487de9 Added c
252 |
253 o 1:29becc82797a Added b
254 |
255 o 0:18d04c59bb5d Added a
256
257 $ hg up 5
258 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
259 $ echo bar >> f
260 $ hg amend
261 $ hg rebase -s 6 -d . -q
262
263 $ hg glog
264 o 23:2b41b42e192a Added things to a and b
265 |
266 o 22:1860df151f01 Added h
267 |
268 o 21:49635b68477e Added g
269 |
270 @ 20:93f0e8ffab32 Added f
271 |
272 o 4:aa98ab95a928 Added e
273 |
274 o 3:62615734edd5 Added d
275 |
276 o 2:28ad74487de9 Added c
277 |
278 o 1:29becc82797a Added b
279 |
280 o 0:18d04c59bb5d Added a
281
282
283 $ hg unamend
284 abort: cannot unamend a changeset with children
285 [255]
286
287 Trying to unamend a public changeset
288
289 $ hg up
290 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
291 $ hg phase -r . -p
292 $ hg unamend
293 abort: cannot unamend public changesets
294 [255]
295
296 Testing whether unamend retains copies or not
297
298 $ hg status
299 ? bar
300
301 $ hg mv a foo
302
303 $ hg ci -m "Moved a to foo"
304 $ hg exp --git
305 # HG changeset patch
306 # User test
307 # Date 0 0
308 # Thu Jan 01 00:00:00 1970 +0000
309 # Node ID b087c66cada118d6c5487d3d7cb29cac239bd98a
310 # Parent 2b41b42e192adc425b106643c3fc89170d6b8add
311 Moved a to foo
312
313 diff --git a/a b/foo
314 rename from a
315 rename to foo
316
317 $ hg mv b foobar
318 $ hg diff --git
319 diff --git a/b b/foobar
320 rename from b
321 rename to foobar
322 $ hg amend
323
324 $ hg exp --git
325 # HG changeset patch
326 # User test
327 # Date 0 0
328 # Thu Jan 01 00:00:00 1970 +0000
329 # Node ID 9fa06fb09a83a86ec7368d15004dbc52ac1a5d2e
330 # Parent 2b41b42e192adc425b106643c3fc89170d6b8add
331 Moved a to foo
332
333 diff --git a/a b/foo
334 rename from a
335 rename to foo
336 diff --git a/b b/foobar
337 rename from b
338 rename to foobar
339
340 $ hg mv c wat
341 $ hg unamend
342
343 Retained copies in new prdecessor commit
344
345 $ hg exp --git
346 # HG changeset patch
347 # User test
348 # Date 0 0
349 # Thu Jan 01 00:00:00 1970 +0000
350 # Node ID 4cf9987c9b941f615930e7c46307b4dbf35697cf
351 # Parent 2b41b42e192adc425b106643c3fc89170d6b8add
352 Moved a to foo
353
354 diff --git a/a b/foo
355 rename from a
356 rename to foo
357
358 Retained copies in working directoy
359
360 $ hg diff --git
361 diff --git a/b b/foobar
362 rename from b
363 rename to foobar
364 diff --git a/c b/wat
365 rename from c
366 rename to wat