##// END OF EJS Templates
tests: add test case for issue 6262...
Martin von Zweigbergk -
r48343:f97fc3c6 default draft
parent child Browse files
Show More
@@ -1,576 +1,611 b''
1 #testcases obsstore-off obsstore-on
1 #testcases obsstore-off obsstore-on
2
2
3 $ cat << EOF >> $HGRCPATH
3 $ cat << EOF >> $HGRCPATH
4 > [extensions]
4 > [extensions]
5 > amend=
5 > amend=
6 > debugdrawdag=$TESTDIR/drawdag.py
6 > debugdrawdag=$TESTDIR/drawdag.py
7 > [diff]
7 > [diff]
8 > git=1
8 > git=1
9 > EOF
9 > EOF
10
10
11 #if obsstore-on
11 #if obsstore-on
12 $ cat << EOF >> $HGRCPATH
12 $ cat << EOF >> $HGRCPATH
13 > [experimental]
13 > [experimental]
14 > evolution.createmarkers=True
14 > evolution.createmarkers=True
15 > EOF
15 > EOF
16 #endif
16 #endif
17
17
18 Basic amend
18 Basic amend
19
19
20 $ hg init repo1
20 $ hg init repo1
21 $ cd repo1
21 $ cd repo1
22 $ hg debugdrawdag <<'EOS'
22 $ hg debugdrawdag <<'EOS'
23 > B
23 > B
24 > |
24 > |
25 > A
25 > A
26 > EOS
26 > EOS
27
27
28 $ hg update B -q
28 $ hg update B -q
29 $ echo 2 >> B
29 $ echo 2 >> B
30
30
31 $ hg amend
31 $ hg amend
32 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/112478962961-7e959a55-amend.hg (obsstore-off !)
32 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/112478962961-7e959a55-amend.hg (obsstore-off !)
33 #if obsstore-off
33 #if obsstore-off
34 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
34 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
35 @ 1 be169c7e8dbe B
35 @ 1 be169c7e8dbe B
36 | diff --git a/B b/B
36 | diff --git a/B b/B
37 | new file mode 100644
37 | new file mode 100644
38 | --- /dev/null
38 | --- /dev/null
39 | +++ b/B
39 | +++ b/B
40 | @@ -0,0 +1,1 @@
40 | @@ -0,0 +1,1 @@
41 | +B2
41 | +B2
42 |
42 |
43 o 0 426bada5c675 A
43 o 0 426bada5c675 A
44 diff --git a/A b/A
44 diff --git a/A b/A
45 new file mode 100644
45 new file mode 100644
46 --- /dev/null
46 --- /dev/null
47 +++ b/A
47 +++ b/A
48 @@ -0,0 +1,1 @@
48 @@ -0,0 +1,1 @@
49 +A
49 +A
50 \ No newline at end of file
50 \ No newline at end of file
51
51
52 #else
52 #else
53 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
53 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
54 @ 2 be169c7e8dbe B
54 @ 2 be169c7e8dbe B
55 | diff --git a/B b/B
55 | diff --git a/B b/B
56 | new file mode 100644
56 | new file mode 100644
57 | --- /dev/null
57 | --- /dev/null
58 | +++ b/B
58 | +++ b/B
59 | @@ -0,0 +1,1 @@
59 | @@ -0,0 +1,1 @@
60 | +B2
60 | +B2
61 |
61 |
62 | x 1 112478962961 B
62 | x 1 112478962961 B
63 |/ diff --git a/B b/B
63 |/ diff --git a/B b/B
64 | new file mode 100644
64 | new file mode 100644
65 | --- /dev/null
65 | --- /dev/null
66 | +++ b/B
66 | +++ b/B
67 | @@ -0,0 +1,1 @@
67 | @@ -0,0 +1,1 @@
68 | +B
68 | +B
69 | \ No newline at end of file
69 | \ No newline at end of file
70 |
70 |
71 o 0 426bada5c675 A
71 o 0 426bada5c675 A
72 diff --git a/A b/A
72 diff --git a/A b/A
73 new file mode 100644
73 new file mode 100644
74 --- /dev/null
74 --- /dev/null
75 +++ b/A
75 +++ b/A
76 @@ -0,0 +1,1 @@
76 @@ -0,0 +1,1 @@
77 +A
77 +A
78 \ No newline at end of file
78 \ No newline at end of file
79
79
80 #endif
80 #endif
81
81
82 Nothing changed
82 Nothing changed
83
83
84 $ hg amend
84 $ hg amend
85 nothing changed
85 nothing changed
86 [1]
86 [1]
87
87
88 $ hg amend -d "0 0"
88 $ hg amend -d "0 0"
89 nothing changed
89 nothing changed
90 [1]
90 [1]
91
91
92 $ hg amend -d "Thu Jan 01 00:00:00 1970 UTC"
92 $ hg amend -d "Thu Jan 01 00:00:00 1970 UTC"
93 nothing changed
93 nothing changed
94 [1]
94 [1]
95
95
96 #if obsstore-on
96 #if obsstore-on
97 $ hg init repo-merge-state
97 $ hg init repo-merge-state
98 $ cd repo-merge-state
98 $ cd repo-merge-state
99 $ echo a > f
99 $ echo a > f
100 $ hg ci -Aqm a
100 $ hg ci -Aqm a
101 $ echo b > f
101 $ echo b > f
102 $ hg ci -Aqm b
102 $ hg ci -Aqm b
103 $ echo c > f
103 $ echo c > f
104 $ hg co -m '.^'
104 $ hg co -m '.^'
105 merging f
105 merging f
106 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
106 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
107 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
107 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
108 use 'hg resolve' to retry unresolved file merges
108 use 'hg resolve' to retry unresolved file merges
109 [1]
109 [1]
110 $ echo d > f
110 $ echo d > f
111 $ hg resolve -m f
111 $ hg resolve -m f
112 (no more unresolved files)
112 (no more unresolved files)
113 $ hg ci --amend --config experimental.evolution.allowunstable=True
113 $ hg ci --amend --config experimental.evolution.allowunstable=True
114 1 new orphan changesets
114 1 new orphan changesets
115 $ hg resolve -l
115 $ hg resolve -l
116 $ cd ..
116 $ cd ..
117 #endif
117 #endif
118
118
119 Matcher and metadata options
119 Matcher and metadata options
120
120
121 $ echo 3 > C
121 $ echo 3 > C
122 $ echo 4 > D
122 $ echo 4 > D
123 $ hg add C D
123 $ hg add C D
124 $ hg amend -m NEWMESSAGE -I C
124 $ hg amend -m NEWMESSAGE -I C
125 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/be169c7e8dbe-7684ddc5-amend.hg (obsstore-off !)
125 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/be169c7e8dbe-7684ddc5-amend.hg (obsstore-off !)
126 $ hg log -r . -T '{node|short} {desc} {files}\n'
126 $ hg log -r . -T '{node|short} {desc} {files}\n'
127 c7ba14d9075b NEWMESSAGE B C
127 c7ba14d9075b NEWMESSAGE B C
128 $ echo 5 > E
128 $ echo 5 > E
129 $ rm C
129 $ rm C
130 $ hg amend -d '2000 1000' -u 'Foo <foo@example.com>' -A C D
130 $ hg amend -d '2000 1000' -u 'Foo <foo@example.com>' -A C D
131 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/c7ba14d9075b-b3e76daa-amend.hg (obsstore-off !)
131 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/c7ba14d9075b-b3e76daa-amend.hg (obsstore-off !)
132 $ hg log -r . -T '{node|short} {desc} {files} {author} {date}\n'
132 $ hg log -r . -T '{node|short} {desc} {files} {author} {date}\n'
133 14f6c4bcc865 NEWMESSAGE B D Foo <foo@example.com> 2000.01000
133 14f6c4bcc865 NEWMESSAGE B D Foo <foo@example.com> 2000.01000
134
134
135 Amend with editor
135 Amend with editor
136
136
137 $ cat > $TESTTMP/prefix.sh <<'EOF'
137 $ cat > $TESTTMP/prefix.sh <<'EOF'
138 > printf 'EDITED: ' > $TESTTMP/msg
138 > printf 'EDITED: ' > $TESTTMP/msg
139 > cat "$1" >> $TESTTMP/msg
139 > cat "$1" >> $TESTTMP/msg
140 > mv $TESTTMP/msg "$1"
140 > mv $TESTTMP/msg "$1"
141 > EOF
141 > EOF
142 $ chmod +x $TESTTMP/prefix.sh
142 $ chmod +x $TESTTMP/prefix.sh
143
143
144 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend --edit
144 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend --edit
145 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/14f6c4bcc865-6591f15d-amend.hg (obsstore-off !)
145 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/14f6c4bcc865-6591f15d-amend.hg (obsstore-off !)
146 $ hg log -r . -T '{node|short} {desc}\n'
146 $ hg log -r . -T '{node|short} {desc}\n'
147 298f085230c3 EDITED: NEWMESSAGE
147 298f085230c3 EDITED: NEWMESSAGE
148 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend -e -m MSG
148 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend -e -m MSG
149 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/298f085230c3-d81a6ad3-amend.hg (obsstore-off !)
149 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/298f085230c3-d81a6ad3-amend.hg (obsstore-off !)
150 $ hg log -r . -T '{node|short} {desc}\n'
150 $ hg log -r . -T '{node|short} {desc}\n'
151 974f07f28537 EDITED: MSG
151 974f07f28537 EDITED: MSG
152
152
153 $ echo FOO > $TESTTMP/msg
153 $ echo FOO > $TESTTMP/msg
154 $ hg amend -l $TESTTMP/msg -m BAR
154 $ hg amend -l $TESTTMP/msg -m BAR
155 abort: cannot specify both --message and --logfile
155 abort: cannot specify both --message and --logfile
156 [10]
156 [10]
157 $ hg amend -l $TESTTMP/msg
157 $ hg amend -l $TESTTMP/msg
158 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/974f07f28537-edb6470a-amend.hg (obsstore-off !)
158 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/974f07f28537-edb6470a-amend.hg (obsstore-off !)
159 $ hg log -r . -T '{node|short} {desc}\n'
159 $ hg log -r . -T '{node|short} {desc}\n'
160 507be9bdac71 FOO
160 507be9bdac71 FOO
161
161
162 Interactive mode
162 Interactive mode
163
163
164 $ touch F G
164 $ touch F G
165 $ hg add F G
165 $ hg add F G
166 $ cat <<EOS | hg amend -i --config ui.interactive=1
166 $ cat <<EOS | hg amend -i --config ui.interactive=1
167 > y
167 > y
168 > n
168 > n
169 > EOS
169 > EOS
170 diff --git a/F b/F
170 diff --git a/F b/F
171 new file mode 100644
171 new file mode 100644
172 examine changes to 'F'?
172 examine changes to 'F'?
173 (enter ? for help) [Ynesfdaq?] y
173 (enter ? for help) [Ynesfdaq?] y
174
174
175 diff --git a/G b/G
175 diff --git a/G b/G
176 new file mode 100644
176 new file mode 100644
177 examine changes to 'G'?
177 examine changes to 'G'?
178 (enter ? for help) [Ynesfdaq?] n
178 (enter ? for help) [Ynesfdaq?] n
179
179
180 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/507be9bdac71-c8077452-amend.hg (obsstore-off !)
180 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/507be9bdac71-c8077452-amend.hg (obsstore-off !)
181 $ hg log -r . -T '{files}\n'
181 $ hg log -r . -T '{files}\n'
182 B D F
182 B D F
183
183
184 Amend in the middle of a stack
184 Amend in the middle of a stack
185
185
186 $ hg init $TESTTMP/repo2
186 $ hg init $TESTTMP/repo2
187 $ cd $TESTTMP/repo2
187 $ cd $TESTTMP/repo2
188 $ hg debugdrawdag <<'EOS'
188 $ hg debugdrawdag <<'EOS'
189 > C
189 > C
190 > |
190 > |
191 > B
191 > B
192 > |
192 > |
193 > A
193 > A
194 > EOS
194 > EOS
195
195
196 $ hg update -q B
196 $ hg update -q B
197 $ echo 2 >> B
197 $ echo 2 >> B
198 $ hg amend
198 $ hg amend
199 abort: cannot amend changeset, as that will orphan 1 descendants
199 abort: cannot amend changeset, as that will orphan 1 descendants
200 (see 'hg help evolution.instability')
200 (see 'hg help evolution.instability')
201 [10]
201 [10]
202
202
203 #if obsstore-on
203 #if obsstore-on
204
204
205 With allowunstable, amend could work in the middle of a stack
205 With allowunstable, amend could work in the middle of a stack
206
206
207 $ cat >> $HGRCPATH <<EOF
207 $ cat >> $HGRCPATH <<EOF
208 > [experimental]
208 > [experimental]
209 > evolution.createmarkers=True
209 > evolution.createmarkers=True
210 > evolution.allowunstable=True
210 > evolution.allowunstable=True
211 > EOF
211 > EOF
212
212
213 $ hg amend
213 $ hg amend
214 1 new orphan changesets
214 1 new orphan changesets
215 $ hg log -T '{rev} {node|short} {desc}\n' -G
215 $ hg log -T '{rev} {node|short} {desc}\n' -G
216 @ 3 be169c7e8dbe B
216 @ 3 be169c7e8dbe B
217 |
217 |
218 | * 2 26805aba1e60 C
218 | * 2 26805aba1e60 C
219 | |
219 | |
220 | x 1 112478962961 B
220 | x 1 112478962961 B
221 |/
221 |/
222 o 0 426bada5c675 A
222 o 0 426bada5c675 A
223
223
224 Checking the note stored in the obsmarker
224 Checking the note stored in the obsmarker
225
225
226 $ echo foo > bar
226 $ echo foo > bar
227 $ hg add bar
227 $ hg add bar
228 $ hg amend --note 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
228 $ hg amend --note 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
229 abort: cannot store a note of more than 255 bytes
229 abort: cannot store a note of more than 255 bytes
230 [10]
230 [10]
231 $ hg amend --note "adding bar"
231 $ hg amend --note "adding bar"
232 $ hg debugobsolete -r .
232 $ hg debugobsolete -r .
233 112478962961147124edd43549aedd1a335e44bf be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
233 112478962961147124edd43549aedd1a335e44bf be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
234 be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 16084da537dd8f84cfdb3055c633772269d62e1b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'adding bar', 'operation': 'amend', 'user': 'test'}
234 be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 16084da537dd8f84cfdb3055c633772269d62e1b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'adding bar', 'operation': 'amend', 'user': 'test'}
235
235
236 Cannot cause divergence by default
236 Cannot cause divergence by default
237
237
238 $ hg co --hidden 1
238 $ hg co --hidden 1
239 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
239 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
240 $ hg amend -m divergent
240 $ hg amend -m divergent
241 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
241 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
242 (add --verbose for details or see 'hg help evolution.instability')
242 (add --verbose for details or see 'hg help evolution.instability')
243 [10]
243 [10]
244 $ hg amend -m divergent --verbose
244 $ hg amend -m divergent --verbose
245 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
245 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
246 changeset 112478962961 already has a successor in changeset 16084da537dd
246 changeset 112478962961 already has a successor in changeset 16084da537dd
247 rewriting changeset 112478962961 would create "content-divergence"
247 rewriting changeset 112478962961 would create "content-divergence"
248 set experimental.evolution.allowdivergence=True to skip this check
248 set experimental.evolution.allowdivergence=True to skip this check
249 (see 'hg help evolution.instability' for details on content-divergence)
249 (see 'hg help evolution.instability' for details on content-divergence)
250 [10]
250 [10]
251 $ hg amend -m divergent --config experimental.evolution.allowdivergence=true
251 $ hg amend -m divergent --config experimental.evolution.allowdivergence=true
252 2 new content-divergent changesets
252 2 new content-divergent changesets
253
253
254 Amending pruned part of split commit does not cause divergence (issue6262)
255
256 $ hg debugobsolete $(hg log -T '{node}' -r .)
257 1 new obsolescence markers
258 obsoleted 1 changesets
259 $ hg co '.^'
260 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
261 $ node_B=$(hg log -T '{node}' -r 4)
262 $ hg revert -r $node_B -a
263 adding B
264 adding bar
265 $ hg ci -m B-split1
266 created new head
267 $ node_B_split1=$(hg log -T '{node}' -r .)
268 $ hg co '.^'
269 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
270 $ hg revert -r 4 -a
271 adding B
272 adding bar
273 $ hg ci -m B-split2
274 created new head
275 $ node_B_split2=$(hg log -T '{node}' -r .)
276 $ hg debugobsolete $node_B $node_B_split1 $node_B_split2
277 1 new obsolescence markers
278 obsoleted 1 changesets
279 $ hg debugobsolete $node_B_split2
280 1 new obsolescence markers
281 obsoleted 1 changesets
282 $ hg co --hidden $node_B_split2
283 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
284 $ hg amend -m 'revived B-split2'
285 abort: cannot amend 809fe227532f, as that creates content-divergence with c68306a86921, from 16084da537dd (known-bad-output !)
286 (add --verbose for details or see 'hg help evolution.instability') (known-bad-output !)
287 [10]
288
254 Hidden common predecessor of divergence does not cause crash
289 Hidden common predecessor of divergence does not cause crash
255
290
256 First create C1 as a pruned successor of C
291 First create C1 as a pruned successor of C
257 $ hg co C
292 $ hg co C
258 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
293 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
259 $ hg amend -m C1
294 $ hg amend -m C1
260 $ hg tag --local C1
295 $ hg tag --local C1
261 $ hg debugobsolete $(hg log -T '{node}' -r C1)
296 $ hg debugobsolete $(hg log -T '{node}' -r C1)
262 1 new obsolescence markers
297 1 new obsolescence markers
263 obsoleted 1 changesets
298 obsoleted 1 changesets
264 Now create C2 as other side of divergence (not actually divergent because C1 is
299 Now create C2 as other side of divergence (not actually divergent because C1 is
265 pruned)
300 pruned)
266 $ hg co C
301 $ hg co C
267 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
302 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
268 $ hg amend -m C2
303 $ hg amend -m C2
269 1 new orphan changesets
304 1 new orphan changesets
270 Make the common predecessor (C) pruned
305 Make the common predecessor (C) pruned
271 $ hg tag --local --remove C
306 $ hg tag --local --remove C
272 $ hg co C1
307 $ hg co C1
273 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
308 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
274 Try to cause divergence
309 Try to cause divergence
275 $ hg amend -m C11
310 $ hg amend -m C11
276 abort: cannot amend 2758767f5d17, as that creates content-divergence with bfcb433a0dea, from 26805aba1e60
311 abort: cannot amend 2758767f5d17, as that creates content-divergence with bfcb433a0dea, from 26805aba1e60
277 (add --verbose for details or see 'hg help evolution.instability')
312 (add --verbose for details or see 'hg help evolution.instability')
278 [10]
313 [10]
279 #endif
314 #endif
280
315
281 Cannot amend public changeset
316 Cannot amend public changeset
282
317
283 $ hg phase -r A --public
318 $ hg phase -r A --public
284 $ hg update -C -q A
319 $ hg update -C -q A
285 $ hg amend -m AMEND
320 $ hg amend -m AMEND
286 abort: cannot amend public changesets: 426bada5c675
321 abort: cannot amend public changesets: 426bada5c675
287 (see 'hg help phases' for details)
322 (see 'hg help phases' for details)
288 [10]
323 [10]
289
324
290 Amend a merge changeset
325 Amend a merge changeset
291
326
292 $ hg init $TESTTMP/repo3
327 $ hg init $TESTTMP/repo3
293 $ cd $TESTTMP/repo3
328 $ cd $TESTTMP/repo3
294 $ hg debugdrawdag <<'EOS'
329 $ hg debugdrawdag <<'EOS'
295 > C
330 > C
296 > /|
331 > /|
297 > A B
332 > A B
298 > EOS
333 > EOS
299 $ hg update -q C
334 $ hg update -q C
300 $ hg amend -m FOO
335 $ hg amend -m FOO
301 saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !)
336 saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !)
302 $ rm .hg/localtags
337 $ rm .hg/localtags
303 $ hg log -G -T '{desc}\n'
338 $ hg log -G -T '{desc}\n'
304 @ FOO
339 @ FOO
305 |\
340 |\
306 | o B
341 | o B
307 |
342 |
308 o A
343 o A
309
344
310
345
311 More complete test for status changes (issue5732)
346 More complete test for status changes (issue5732)
312 -------------------------------------------------
347 -------------------------------------------------
313
348
314 Generates history of files having 3 states, r0_r1_wc:
349 Generates history of files having 3 states, r0_r1_wc:
315
350
316 r0: ground (content/missing)
351 r0: ground (content/missing)
317 r1: old state to be amended (content/missing, where missing means removed)
352 r1: old state to be amended (content/missing, where missing means removed)
318 wc: changes to be included in r1 (content/missing-tracked/untracked)
353 wc: changes to be included in r1 (content/missing-tracked/untracked)
319
354
320 $ hg init $TESTTMP/wcstates
355 $ hg init $TESTTMP/wcstates
321 $ cd $TESTTMP/wcstates
356 $ cd $TESTTMP/wcstates
322
357
323 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1
358 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1
324 $ hg addremove -q --similarity 0
359 $ hg addremove -q --similarity 0
325 $ hg commit -m0
360 $ hg commit -m0
326
361
327 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2
362 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2
328 $ hg addremove -q --similarity 0
363 $ hg addremove -q --similarity 0
329 $ hg commit -m1
364 $ hg commit -m1
330
365
331 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc
366 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc
332 $ hg addremove -q --similarity 0
367 $ hg addremove -q --similarity 0
333 $ hg forget *_*_*-untracked
368 $ hg forget *_*_*-untracked
334 $ rm *_*_missing-*
369 $ rm *_*_missing-*
335
370
336 amend r1 to include wc changes
371 amend r1 to include wc changes
337
372
338 $ hg amend
373 $ hg amend
339 saved backup bundle to * (glob) (obsstore-off !)
374 saved backup bundle to * (glob) (obsstore-off !)
340
375
341 clean/modified/removed/added states of the amended revision
376 clean/modified/removed/added states of the amended revision
342
377
343 $ hg status --all --change . 'glob:content1_*_content1-tracked'
378 $ hg status --all --change . 'glob:content1_*_content1-tracked'
344 C content1_content1_content1-tracked
379 C content1_content1_content1-tracked
345 C content1_content2_content1-tracked
380 C content1_content2_content1-tracked
346 C content1_missing_content1-tracked
381 C content1_missing_content1-tracked
347 $ hg status --all --change . 'glob:content1_*_content[23]-tracked'
382 $ hg status --all --change . 'glob:content1_*_content[23]-tracked'
348 M content1_content1_content3-tracked
383 M content1_content1_content3-tracked
349 M content1_content2_content2-tracked
384 M content1_content2_content2-tracked
350 M content1_content2_content3-tracked
385 M content1_content2_content3-tracked
351 M content1_missing_content3-tracked
386 M content1_missing_content3-tracked
352 $ hg status --all --change . 'glob:content1_*_missing-tracked'
387 $ hg status --all --change . 'glob:content1_*_missing-tracked'
353 M content1_content2_missing-tracked
388 M content1_content2_missing-tracked
354 R content1_missing_missing-tracked
389 R content1_missing_missing-tracked
355 C content1_content1_missing-tracked
390 C content1_content1_missing-tracked
356 $ hg status --all --change . 'glob:content1_*_*-untracked'
391 $ hg status --all --change . 'glob:content1_*_*-untracked'
357 R content1_content1_content1-untracked
392 R content1_content1_content1-untracked
358 R content1_content1_content3-untracked
393 R content1_content1_content3-untracked
359 R content1_content1_missing-untracked
394 R content1_content1_missing-untracked
360 R content1_content2_content1-untracked
395 R content1_content2_content1-untracked
361 R content1_content2_content2-untracked
396 R content1_content2_content2-untracked
362 R content1_content2_content3-untracked
397 R content1_content2_content3-untracked
363 R content1_content2_missing-untracked
398 R content1_content2_missing-untracked
364 R content1_missing_content1-untracked
399 R content1_missing_content1-untracked
365 R content1_missing_content3-untracked
400 R content1_missing_content3-untracked
366 R content1_missing_missing-untracked
401 R content1_missing_missing-untracked
367 $ hg status --all --change . 'glob:missing_content2_*'
402 $ hg status --all --change . 'glob:missing_content2_*'
368 A missing_content2_content2-tracked
403 A missing_content2_content2-tracked
369 A missing_content2_content3-tracked
404 A missing_content2_content3-tracked
370 A missing_content2_missing-tracked
405 A missing_content2_missing-tracked
371 $ hg status --all --change . 'glob:missing_missing_*'
406 $ hg status --all --change . 'glob:missing_missing_*'
372 A missing_missing_content3-tracked
407 A missing_missing_content3-tracked
373
408
374 working directory should be all clean (with some missing/untracked files)
409 working directory should be all clean (with some missing/untracked files)
375
410
376 $ hg status --all 'glob:*_content?-tracked'
411 $ hg status --all 'glob:*_content?-tracked'
377 C content1_content1_content1-tracked
412 C content1_content1_content1-tracked
378 C content1_content1_content3-tracked
413 C content1_content1_content3-tracked
379 C content1_content2_content1-tracked
414 C content1_content2_content1-tracked
380 C content1_content2_content2-tracked
415 C content1_content2_content2-tracked
381 C content1_content2_content3-tracked
416 C content1_content2_content3-tracked
382 C content1_missing_content1-tracked
417 C content1_missing_content1-tracked
383 C content1_missing_content3-tracked
418 C content1_missing_content3-tracked
384 C missing_content2_content2-tracked
419 C missing_content2_content2-tracked
385 C missing_content2_content3-tracked
420 C missing_content2_content3-tracked
386 C missing_missing_content3-tracked
421 C missing_missing_content3-tracked
387 $ hg status --all 'glob:*_missing-tracked'
422 $ hg status --all 'glob:*_missing-tracked'
388 ! content1_content1_missing-tracked
423 ! content1_content1_missing-tracked
389 ! content1_content2_missing-tracked
424 ! content1_content2_missing-tracked
390 ! content1_missing_missing-tracked
425 ! content1_missing_missing-tracked
391 ! missing_content2_missing-tracked
426 ! missing_content2_missing-tracked
392 ! missing_missing_missing-tracked
427 ! missing_missing_missing-tracked
393 $ hg status --all 'glob:*-untracked'
428 $ hg status --all 'glob:*-untracked'
394 ? content1_content1_content1-untracked
429 ? content1_content1_content1-untracked
395 ? content1_content1_content3-untracked
430 ? content1_content1_content3-untracked
396 ? content1_content2_content1-untracked
431 ? content1_content2_content1-untracked
397 ? content1_content2_content2-untracked
432 ? content1_content2_content2-untracked
398 ? content1_content2_content3-untracked
433 ? content1_content2_content3-untracked
399 ? content1_missing_content1-untracked
434 ? content1_missing_content1-untracked
400 ? content1_missing_content3-untracked
435 ? content1_missing_content3-untracked
401 ? missing_content2_content2-untracked
436 ? missing_content2_content2-untracked
402 ? missing_content2_content3-untracked
437 ? missing_content2_content3-untracked
403 ? missing_missing_content3-untracked
438 ? missing_missing_content3-untracked
404
439
405 =================================
440 =================================
406 Test backup-bundle config option|
441 Test backup-bundle config option|
407 =================================
442 =================================
408 $ hg init $TESTTMP/repo4
443 $ hg init $TESTTMP/repo4
409 $ cd $TESTTMP/repo4
444 $ cd $TESTTMP/repo4
410 $ echo a>a
445 $ echo a>a
411 $ hg ci -Aqma
446 $ hg ci -Aqma
412 $ echo oops>b
447 $ echo oops>b
413 $ hg ci -Aqm "b"
448 $ hg ci -Aqm "b"
414 $ echo partiallyfixed > b
449 $ echo partiallyfixed > b
415
450
416 #if obsstore-off
451 #if obsstore-off
417 $ hg amend
452 $ hg amend
418 saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg
453 saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg
419 When backup-bundle config option is set:
454 When backup-bundle config option is set:
420 $ cat << EOF >> $HGRCPATH
455 $ cat << EOF >> $HGRCPATH
421 > [rewrite]
456 > [rewrite]
422 > backup-bundle = False
457 > backup-bundle = False
423 > EOF
458 > EOF
424 $ echo fixed > b
459 $ echo fixed > b
425 $ hg amend
460 $ hg amend
426
461
427 #else
462 #else
428 $ hg amend
463 $ hg amend
429 When backup-bundle config option is set:
464 When backup-bundle config option is set:
430 $ cat << EOF >> $HGRCPATH
465 $ cat << EOF >> $HGRCPATH
431 > [rewrite]
466 > [rewrite]
432 > backup-bundle = False
467 > backup-bundle = False
433 > EOF
468 > EOF
434 $ echo fixed > b
469 $ echo fixed > b
435 $ hg amend
470 $ hg amend
436
471
437 #endif
472 #endif
438 ==========================================
473 ==========================================
439 Test update-timestamp config option|
474 Test update-timestamp config option|
440 ==========================================
475 ==========================================
441
476
442 $ cat >> $HGRCPATH << EOF
477 $ cat >> $HGRCPATH << EOF
443 > [extensions]
478 > [extensions]
444 > amend=
479 > amend=
445 > mockmakedate = $TESTDIR/mockmakedate.py
480 > mockmakedate = $TESTDIR/mockmakedate.py
446 > EOF
481 > EOF
447
482
448 $ hg init $TESTTMP/repo5
483 $ hg init $TESTTMP/repo5
449 $ cd $TESTTMP/repo5
484 $ cd $TESTTMP/repo5
450 $ cat <<'EOF' >> .hg/hgrc
485 $ cat <<'EOF' >> .hg/hgrc
451 > [command-templates]
486 > [command-templates]
452 > log = 'user: {user}
487 > log = 'user: {user}
453 > date: {date|date}
488 > date: {date|date}
454 > summary: {desc|firstline}\n'
489 > summary: {desc|firstline}\n'
455 > EOF
490 > EOF
456
491
457 $ echo a>a
492 $ echo a>a
458 $ hg ci -Am 'commit 1'
493 $ hg ci -Am 'commit 1'
459 adding a
494 adding a
460
495
461 When updatetimestamp is False
496 When updatetimestamp is False
462
497
463 $ hg amend --date '1997-1-1 0:1'
498 $ hg amend --date '1997-1-1 0:1'
464 $ hg log --limit 1
499 $ hg log --limit 1
465 user: test
500 user: test
466 date: Wed Jan 01 00:01:00 1997 +0000
501 date: Wed Jan 01 00:01:00 1997 +0000
467 summary: commit 1
502 summary: commit 1
468
503
469 When update-timestamp is True and no other change than the date
504 When update-timestamp is True and no other change than the date
470
505
471 $ hg amend --config rewrite.update-timestamp=True
506 $ hg amend --config rewrite.update-timestamp=True
472 nothing changed
507 nothing changed
473 [1]
508 [1]
474 $ hg log --limit 1
509 $ hg log --limit 1
475 user: test
510 user: test
476 date: Wed Jan 01 00:01:00 1997 +0000
511 date: Wed Jan 01 00:01:00 1997 +0000
477 summary: commit 1
512 summary: commit 1
478
513
479 When update-timestamp is True and there is other change than the date
514 When update-timestamp is True and there is other change than the date
480 $ hg amend --user foobar --config rewrite.update-timestamp=True
515 $ hg amend --user foobar --config rewrite.update-timestamp=True
481 $ hg log --limit 1
516 $ hg log --limit 1
482 user: foobar
517 user: foobar
483 date: Thu Jan 01 00:00:02 1970 +0000
518 date: Thu Jan 01 00:00:02 1970 +0000
484 summary: commit 1
519 summary: commit 1
485
520
486 When date option is applicable and update-timestamp is True
521 When date option is applicable and update-timestamp is True
487 $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True
522 $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True
488 $ hg log --limit 1
523 $ hg log --limit 1
489 user: foobar
524 user: foobar
490 date: Thu Jan 01 00:01:00 1998 +0000
525 date: Thu Jan 01 00:01:00 1998 +0000
491 summary: commit 1
526 summary: commit 1
492
527
493 Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp
528 Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp
494
529
495 $ hg amend -D
530 $ hg amend -D
496 $ hg log --limit 1
531 $ hg log --limit 1
497 user: foobar
532 user: foobar
498 date: Thu Jan 01 00:00:04 1970 +0000
533 date: Thu Jan 01 00:00:04 1970 +0000
499 summary: commit 1
534 summary: commit 1
500
535
501 $ hg amend -D --config rewrite.update-timestamp=True
536 $ hg amend -D --config rewrite.update-timestamp=True
502 $ hg log --limit 1
537 $ hg log --limit 1
503 user: foobar
538 user: foobar
504 date: Thu Jan 01 00:00:05 1970 +0000
539 date: Thu Jan 01 00:00:05 1970 +0000
505 summary: commit 1
540 summary: commit 1
506
541
507 rewrite.update-timestamp can be negated by --no-currentdate
542 rewrite.update-timestamp can be negated by --no-currentdate
508
543
509 $ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz
544 $ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz
510 $ hg log --limit 1
545 $ hg log --limit 1
511 user: baz
546 user: baz
512 date: Thu Jan 01 00:00:05 1970 +0000
547 date: Thu Jan 01 00:00:05 1970 +0000
513 summary: commit 1
548 summary: commit 1
514
549
515 Bad combination of date options:
550 Bad combination of date options:
516
551
517 $ hg amend -D --date '0 0'
552 $ hg amend -D --date '0 0'
518 abort: cannot specify both --date and --currentdate
553 abort: cannot specify both --date and --currentdate
519 [10]
554 [10]
520
555
521 Close branch
556 Close branch
522
557
523 $ hg amend --secret --close-branch
558 $ hg amend --secret --close-branch
524 $ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n'
559 $ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n'
525 close=1
560 close=1
526 phase=secret
561 phase=secret
527
562
528 $ cd ..
563 $ cd ..
529
564
530 Corner case of amend from issue6157:
565 Corner case of amend from issue6157:
531 - working copy parent has a change to file `a`
566 - working copy parent has a change to file `a`
532 - working copy has the inverse change
567 - working copy has the inverse change
533 - we amend the working copy parent for files other than `a`
568 - we amend the working copy parent for files other than `a`
534 hg used to include the changes to `a` anyway.
569 hg used to include the changes to `a` anyway.
535
570
536 $ hg init 6157; cd 6157
571 $ hg init 6157; cd 6157
537 $ echo a > a; echo b > b; hg commit -qAm_
572 $ echo a > a; echo b > b; hg commit -qAm_
538 $ echo a2 > a; hg commit -qm_
573 $ echo a2 > a; hg commit -qm_
539 $ hg diff --stat -c .
574 $ hg diff --stat -c .
540 a | 2 +-
575 a | 2 +-
541 1 files changed, 1 insertions(+), 1 deletions(-)
576 1 files changed, 1 insertions(+), 1 deletions(-)
542 $ echo a > a; echo b2 > b; hg amend -q b
577 $ echo a > a; echo b2 > b; hg amend -q b
543 $ hg diff --stat -c .
578 $ hg diff --stat -c .
544 a | 2 +-
579 a | 2 +-
545 b | 2 +-
580 b | 2 +-
546 2 files changed, 2 insertions(+), 2 deletions(-)
581 2 files changed, 2 insertions(+), 2 deletions(-)
547
582
548 Modifying a file while the editor is open can cause dirstate corruption
583 Modifying a file while the editor is open can cause dirstate corruption
549 (issue6233)
584 (issue6233)
550
585
551 $ cd $TESTTMP
586 $ cd $TESTTMP
552 $ hg init modify-during-amend; cd modify-during-amend
587 $ hg init modify-during-amend; cd modify-during-amend
553 $ echo r0 > foo; hg commit -qAm "r0"
588 $ echo r0 > foo; hg commit -qAm "r0"
554 $ echo alpha > foo; hg commit -qm "alpha"
589 $ echo alpha > foo; hg commit -qm "alpha"
555 $ echo beta >> foo
590 $ echo beta >> foo
556 $ cat > $TESTTMP/touchy_editor.sh <<EOF
591 $ cat > $TESTTMP/touchy_editor.sh <<EOF
557 > sleep 1
592 > sleep 1
558 > echo delta >> "$TESTTMP/modify-during-amend/foo"
593 > echo delta >> "$TESTTMP/modify-during-amend/foo"
559 > sleep 1
594 > sleep 1
560 > echo hi > "\$1"
595 > echo hi > "\$1"
561 > sleep 1
596 > sleep 1
562 > EOF
597 > EOF
563 $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend
598 $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend
564 $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then
599 $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then
565 > echo "OK."
600 > echo "OK."
566 > else
601 > else
567 > echo "Bug detected. 'delta' is not part of the commit OR the wdir"
602 > echo "Bug detected. 'delta' is not part of the commit OR the wdir"
568 > echo "Diff and status before rebuild:"
603 > echo "Diff and status before rebuild:"
569 > hg diff
604 > hg diff
570 > hg status
605 > hg status
571 > hg debugrebuilddirstate
606 > hg debugrebuilddirstate
572 > echo "Diff and status after rebuild:"
607 > echo "Diff and status after rebuild:"
573 > hg diff
608 > hg diff
574 > hg status
609 > hg status
575 > fi
610 > fi
576 OK.
611 OK.
General Comments 0
You need to be logged in to leave comments. Login now