##// END OF EJS Templates
tests: demonstrate crash when common predecessor of divergence is hidden...
Martin von Zweigbergk -
r48347:93ca7d32 default
parent child Browse files
Show More
@@ -1,550 +1,576 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
254 Hidden common predecessor of divergence does not cause crash
255
256 First create C1 as a pruned successor of C
257 $ hg co C
258 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
259 $ hg amend -m C1
260 $ hg tag --local C1
261 $ hg debugobsolete $(hg log -T '{node}' -r C1)
262 1 new obsolescence markers
263 obsoleted 1 changesets
264 Now create C2 as other side of divergence (not actually divergent because C1 is
265 pruned)
266 $ hg co C
267 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
268 $ hg amend -m C2
269 1 new orphan changesets
270 Make the common predecessor (C) pruned
271 $ hg tag --local --remove C
272 $ hg co C1
273 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
274 Try to cause divergence
275 $ hg amend -m C11
276 abort: filtered revision '26805aba1e600a82e93661149f2313866a221a7b' (known-bad-output !)
277 [255]
278 [10]
253 #endif
279 #endif
254
280
255 Cannot amend public changeset
281 Cannot amend public changeset
256
282
257 $ hg phase -r A --public
283 $ hg phase -r A --public
258 $ hg update -C -q A
284 $ hg update -C -q A
259 $ hg amend -m AMEND
285 $ hg amend -m AMEND
260 abort: cannot amend public changesets: 426bada5c675
286 abort: cannot amend public changesets: 426bada5c675
261 (see 'hg help phases' for details)
287 (see 'hg help phases' for details)
262 [10]
288 [10]
263
289
264 Amend a merge changeset
290 Amend a merge changeset
265
291
266 $ hg init $TESTTMP/repo3
292 $ hg init $TESTTMP/repo3
267 $ cd $TESTTMP/repo3
293 $ cd $TESTTMP/repo3
268 $ hg debugdrawdag <<'EOS'
294 $ hg debugdrawdag <<'EOS'
269 > C
295 > C
270 > /|
296 > /|
271 > A B
297 > A B
272 > EOS
298 > EOS
273 $ hg update -q C
299 $ hg update -q C
274 $ hg amend -m FOO
300 $ hg amend -m FOO
275 saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !)
301 saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !)
276 $ rm .hg/localtags
302 $ rm .hg/localtags
277 $ hg log -G -T '{desc}\n'
303 $ hg log -G -T '{desc}\n'
278 @ FOO
304 @ FOO
279 |\
305 |\
280 | o B
306 | o B
281 |
307 |
282 o A
308 o A
283
309
284
310
285 More complete test for status changes (issue5732)
311 More complete test for status changes (issue5732)
286 -------------------------------------------------
312 -------------------------------------------------
287
313
288 Generates history of files having 3 states, r0_r1_wc:
314 Generates history of files having 3 states, r0_r1_wc:
289
315
290 r0: ground (content/missing)
316 r0: ground (content/missing)
291 r1: old state to be amended (content/missing, where missing means removed)
317 r1: old state to be amended (content/missing, where missing means removed)
292 wc: changes to be included in r1 (content/missing-tracked/untracked)
318 wc: changes to be included in r1 (content/missing-tracked/untracked)
293
319
294 $ hg init $TESTTMP/wcstates
320 $ hg init $TESTTMP/wcstates
295 $ cd $TESTTMP/wcstates
321 $ cd $TESTTMP/wcstates
296
322
297 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1
323 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1
298 $ hg addremove -q --similarity 0
324 $ hg addremove -q --similarity 0
299 $ hg commit -m0
325 $ hg commit -m0
300
326
301 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2
327 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2
302 $ hg addremove -q --similarity 0
328 $ hg addremove -q --similarity 0
303 $ hg commit -m1
329 $ hg commit -m1
304
330
305 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc
331 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc
306 $ hg addremove -q --similarity 0
332 $ hg addremove -q --similarity 0
307 $ hg forget *_*_*-untracked
333 $ hg forget *_*_*-untracked
308 $ rm *_*_missing-*
334 $ rm *_*_missing-*
309
335
310 amend r1 to include wc changes
336 amend r1 to include wc changes
311
337
312 $ hg amend
338 $ hg amend
313 saved backup bundle to * (glob) (obsstore-off !)
339 saved backup bundle to * (glob) (obsstore-off !)
314
340
315 clean/modified/removed/added states of the amended revision
341 clean/modified/removed/added states of the amended revision
316
342
317 $ hg status --all --change . 'glob:content1_*_content1-tracked'
343 $ hg status --all --change . 'glob:content1_*_content1-tracked'
318 C content1_content1_content1-tracked
344 C content1_content1_content1-tracked
319 C content1_content2_content1-tracked
345 C content1_content2_content1-tracked
320 C content1_missing_content1-tracked
346 C content1_missing_content1-tracked
321 $ hg status --all --change . 'glob:content1_*_content[23]-tracked'
347 $ hg status --all --change . 'glob:content1_*_content[23]-tracked'
322 M content1_content1_content3-tracked
348 M content1_content1_content3-tracked
323 M content1_content2_content2-tracked
349 M content1_content2_content2-tracked
324 M content1_content2_content3-tracked
350 M content1_content2_content3-tracked
325 M content1_missing_content3-tracked
351 M content1_missing_content3-tracked
326 $ hg status --all --change . 'glob:content1_*_missing-tracked'
352 $ hg status --all --change . 'glob:content1_*_missing-tracked'
327 M content1_content2_missing-tracked
353 M content1_content2_missing-tracked
328 R content1_missing_missing-tracked
354 R content1_missing_missing-tracked
329 C content1_content1_missing-tracked
355 C content1_content1_missing-tracked
330 $ hg status --all --change . 'glob:content1_*_*-untracked'
356 $ hg status --all --change . 'glob:content1_*_*-untracked'
331 R content1_content1_content1-untracked
357 R content1_content1_content1-untracked
332 R content1_content1_content3-untracked
358 R content1_content1_content3-untracked
333 R content1_content1_missing-untracked
359 R content1_content1_missing-untracked
334 R content1_content2_content1-untracked
360 R content1_content2_content1-untracked
335 R content1_content2_content2-untracked
361 R content1_content2_content2-untracked
336 R content1_content2_content3-untracked
362 R content1_content2_content3-untracked
337 R content1_content2_missing-untracked
363 R content1_content2_missing-untracked
338 R content1_missing_content1-untracked
364 R content1_missing_content1-untracked
339 R content1_missing_content3-untracked
365 R content1_missing_content3-untracked
340 R content1_missing_missing-untracked
366 R content1_missing_missing-untracked
341 $ hg status --all --change . 'glob:missing_content2_*'
367 $ hg status --all --change . 'glob:missing_content2_*'
342 A missing_content2_content2-tracked
368 A missing_content2_content2-tracked
343 A missing_content2_content3-tracked
369 A missing_content2_content3-tracked
344 A missing_content2_missing-tracked
370 A missing_content2_missing-tracked
345 $ hg status --all --change . 'glob:missing_missing_*'
371 $ hg status --all --change . 'glob:missing_missing_*'
346 A missing_missing_content3-tracked
372 A missing_missing_content3-tracked
347
373
348 working directory should be all clean (with some missing/untracked files)
374 working directory should be all clean (with some missing/untracked files)
349
375
350 $ hg status --all 'glob:*_content?-tracked'
376 $ hg status --all 'glob:*_content?-tracked'
351 C content1_content1_content1-tracked
377 C content1_content1_content1-tracked
352 C content1_content1_content3-tracked
378 C content1_content1_content3-tracked
353 C content1_content2_content1-tracked
379 C content1_content2_content1-tracked
354 C content1_content2_content2-tracked
380 C content1_content2_content2-tracked
355 C content1_content2_content3-tracked
381 C content1_content2_content3-tracked
356 C content1_missing_content1-tracked
382 C content1_missing_content1-tracked
357 C content1_missing_content3-tracked
383 C content1_missing_content3-tracked
358 C missing_content2_content2-tracked
384 C missing_content2_content2-tracked
359 C missing_content2_content3-tracked
385 C missing_content2_content3-tracked
360 C missing_missing_content3-tracked
386 C missing_missing_content3-tracked
361 $ hg status --all 'glob:*_missing-tracked'
387 $ hg status --all 'glob:*_missing-tracked'
362 ! content1_content1_missing-tracked
388 ! content1_content1_missing-tracked
363 ! content1_content2_missing-tracked
389 ! content1_content2_missing-tracked
364 ! content1_missing_missing-tracked
390 ! content1_missing_missing-tracked
365 ! missing_content2_missing-tracked
391 ! missing_content2_missing-tracked
366 ! missing_missing_missing-tracked
392 ! missing_missing_missing-tracked
367 $ hg status --all 'glob:*-untracked'
393 $ hg status --all 'glob:*-untracked'
368 ? content1_content1_content1-untracked
394 ? content1_content1_content1-untracked
369 ? content1_content1_content3-untracked
395 ? content1_content1_content3-untracked
370 ? content1_content2_content1-untracked
396 ? content1_content2_content1-untracked
371 ? content1_content2_content2-untracked
397 ? content1_content2_content2-untracked
372 ? content1_content2_content3-untracked
398 ? content1_content2_content3-untracked
373 ? content1_missing_content1-untracked
399 ? content1_missing_content1-untracked
374 ? content1_missing_content3-untracked
400 ? content1_missing_content3-untracked
375 ? missing_content2_content2-untracked
401 ? missing_content2_content2-untracked
376 ? missing_content2_content3-untracked
402 ? missing_content2_content3-untracked
377 ? missing_missing_content3-untracked
403 ? missing_missing_content3-untracked
378
404
379 =================================
405 =================================
380 Test backup-bundle config option|
406 Test backup-bundle config option|
381 =================================
407 =================================
382 $ hg init $TESTTMP/repo4
408 $ hg init $TESTTMP/repo4
383 $ cd $TESTTMP/repo4
409 $ cd $TESTTMP/repo4
384 $ echo a>a
410 $ echo a>a
385 $ hg ci -Aqma
411 $ hg ci -Aqma
386 $ echo oops>b
412 $ echo oops>b
387 $ hg ci -Aqm "b"
413 $ hg ci -Aqm "b"
388 $ echo partiallyfixed > b
414 $ echo partiallyfixed > b
389
415
390 #if obsstore-off
416 #if obsstore-off
391 $ hg amend
417 $ hg amend
392 saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg
418 saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg
393 When backup-bundle config option is set:
419 When backup-bundle config option is set:
394 $ cat << EOF >> $HGRCPATH
420 $ cat << EOF >> $HGRCPATH
395 > [rewrite]
421 > [rewrite]
396 > backup-bundle = False
422 > backup-bundle = False
397 > EOF
423 > EOF
398 $ echo fixed > b
424 $ echo fixed > b
399 $ hg amend
425 $ hg amend
400
426
401 #else
427 #else
402 $ hg amend
428 $ hg amend
403 When backup-bundle config option is set:
429 When backup-bundle config option is set:
404 $ cat << EOF >> $HGRCPATH
430 $ cat << EOF >> $HGRCPATH
405 > [rewrite]
431 > [rewrite]
406 > backup-bundle = False
432 > backup-bundle = False
407 > EOF
433 > EOF
408 $ echo fixed > b
434 $ echo fixed > b
409 $ hg amend
435 $ hg amend
410
436
411 #endif
437 #endif
412 ==========================================
438 ==========================================
413 Test update-timestamp config option|
439 Test update-timestamp config option|
414 ==========================================
440 ==========================================
415
441
416 $ cat >> $HGRCPATH << EOF
442 $ cat >> $HGRCPATH << EOF
417 > [extensions]
443 > [extensions]
418 > amend=
444 > amend=
419 > mockmakedate = $TESTDIR/mockmakedate.py
445 > mockmakedate = $TESTDIR/mockmakedate.py
420 > EOF
446 > EOF
421
447
422 $ hg init $TESTTMP/repo5
448 $ hg init $TESTTMP/repo5
423 $ cd $TESTTMP/repo5
449 $ cd $TESTTMP/repo5
424 $ cat <<'EOF' >> .hg/hgrc
450 $ cat <<'EOF' >> .hg/hgrc
425 > [command-templates]
451 > [command-templates]
426 > log = 'user: {user}
452 > log = 'user: {user}
427 > date: {date|date}
453 > date: {date|date}
428 > summary: {desc|firstline}\n'
454 > summary: {desc|firstline}\n'
429 > EOF
455 > EOF
430
456
431 $ echo a>a
457 $ echo a>a
432 $ hg ci -Am 'commit 1'
458 $ hg ci -Am 'commit 1'
433 adding a
459 adding a
434
460
435 When updatetimestamp is False
461 When updatetimestamp is False
436
462
437 $ hg amend --date '1997-1-1 0:1'
463 $ hg amend --date '1997-1-1 0:1'
438 $ hg log --limit 1
464 $ hg log --limit 1
439 user: test
465 user: test
440 date: Wed Jan 01 00:01:00 1997 +0000
466 date: Wed Jan 01 00:01:00 1997 +0000
441 summary: commit 1
467 summary: commit 1
442
468
443 When update-timestamp is True and no other change than the date
469 When update-timestamp is True and no other change than the date
444
470
445 $ hg amend --config rewrite.update-timestamp=True
471 $ hg amend --config rewrite.update-timestamp=True
446 nothing changed
472 nothing changed
447 [1]
473 [1]
448 $ hg log --limit 1
474 $ hg log --limit 1
449 user: test
475 user: test
450 date: Wed Jan 01 00:01:00 1997 +0000
476 date: Wed Jan 01 00:01:00 1997 +0000
451 summary: commit 1
477 summary: commit 1
452
478
453 When update-timestamp is True and there is other change than the date
479 When update-timestamp is True and there is other change than the date
454 $ hg amend --user foobar --config rewrite.update-timestamp=True
480 $ hg amend --user foobar --config rewrite.update-timestamp=True
455 $ hg log --limit 1
481 $ hg log --limit 1
456 user: foobar
482 user: foobar
457 date: Thu Jan 01 00:00:02 1970 +0000
483 date: Thu Jan 01 00:00:02 1970 +0000
458 summary: commit 1
484 summary: commit 1
459
485
460 When date option is applicable and update-timestamp is True
486 When date option is applicable and update-timestamp is True
461 $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True
487 $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True
462 $ hg log --limit 1
488 $ hg log --limit 1
463 user: foobar
489 user: foobar
464 date: Thu Jan 01 00:01:00 1998 +0000
490 date: Thu Jan 01 00:01:00 1998 +0000
465 summary: commit 1
491 summary: commit 1
466
492
467 Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp
493 Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp
468
494
469 $ hg amend -D
495 $ hg amend -D
470 $ hg log --limit 1
496 $ hg log --limit 1
471 user: foobar
497 user: foobar
472 date: Thu Jan 01 00:00:04 1970 +0000
498 date: Thu Jan 01 00:00:04 1970 +0000
473 summary: commit 1
499 summary: commit 1
474
500
475 $ hg amend -D --config rewrite.update-timestamp=True
501 $ hg amend -D --config rewrite.update-timestamp=True
476 $ hg log --limit 1
502 $ hg log --limit 1
477 user: foobar
503 user: foobar
478 date: Thu Jan 01 00:00:05 1970 +0000
504 date: Thu Jan 01 00:00:05 1970 +0000
479 summary: commit 1
505 summary: commit 1
480
506
481 rewrite.update-timestamp can be negated by --no-currentdate
507 rewrite.update-timestamp can be negated by --no-currentdate
482
508
483 $ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz
509 $ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz
484 $ hg log --limit 1
510 $ hg log --limit 1
485 user: baz
511 user: baz
486 date: Thu Jan 01 00:00:05 1970 +0000
512 date: Thu Jan 01 00:00:05 1970 +0000
487 summary: commit 1
513 summary: commit 1
488
514
489 Bad combination of date options:
515 Bad combination of date options:
490
516
491 $ hg amend -D --date '0 0'
517 $ hg amend -D --date '0 0'
492 abort: cannot specify both --date and --currentdate
518 abort: cannot specify both --date and --currentdate
493 [10]
519 [10]
494
520
495 Close branch
521 Close branch
496
522
497 $ hg amend --secret --close-branch
523 $ hg amend --secret --close-branch
498 $ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n'
524 $ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n'
499 close=1
525 close=1
500 phase=secret
526 phase=secret
501
527
502 $ cd ..
528 $ cd ..
503
529
504 Corner case of amend from issue6157:
530 Corner case of amend from issue6157:
505 - working copy parent has a change to file `a`
531 - working copy parent has a change to file `a`
506 - working copy has the inverse change
532 - working copy has the inverse change
507 - we amend the working copy parent for files other than `a`
533 - we amend the working copy parent for files other than `a`
508 hg used to include the changes to `a` anyway.
534 hg used to include the changes to `a` anyway.
509
535
510 $ hg init 6157; cd 6157
536 $ hg init 6157; cd 6157
511 $ echo a > a; echo b > b; hg commit -qAm_
537 $ echo a > a; echo b > b; hg commit -qAm_
512 $ echo a2 > a; hg commit -qm_
538 $ echo a2 > a; hg commit -qm_
513 $ hg diff --stat -c .
539 $ hg diff --stat -c .
514 a | 2 +-
540 a | 2 +-
515 1 files changed, 1 insertions(+), 1 deletions(-)
541 1 files changed, 1 insertions(+), 1 deletions(-)
516 $ echo a > a; echo b2 > b; hg amend -q b
542 $ echo a > a; echo b2 > b; hg amend -q b
517 $ hg diff --stat -c .
543 $ hg diff --stat -c .
518 a | 2 +-
544 a | 2 +-
519 b | 2 +-
545 b | 2 +-
520 2 files changed, 2 insertions(+), 2 deletions(-)
546 2 files changed, 2 insertions(+), 2 deletions(-)
521
547
522 Modifying a file while the editor is open can cause dirstate corruption
548 Modifying a file while the editor is open can cause dirstate corruption
523 (issue6233)
549 (issue6233)
524
550
525 $ cd $TESTTMP
551 $ cd $TESTTMP
526 $ hg init modify-during-amend; cd modify-during-amend
552 $ hg init modify-during-amend; cd modify-during-amend
527 $ echo r0 > foo; hg commit -qAm "r0"
553 $ echo r0 > foo; hg commit -qAm "r0"
528 $ echo alpha > foo; hg commit -qm "alpha"
554 $ echo alpha > foo; hg commit -qm "alpha"
529 $ echo beta >> foo
555 $ echo beta >> foo
530 $ cat > $TESTTMP/touchy_editor.sh <<EOF
556 $ cat > $TESTTMP/touchy_editor.sh <<EOF
531 > sleep 1
557 > sleep 1
532 > echo delta >> "$TESTTMP/modify-during-amend/foo"
558 > echo delta >> "$TESTTMP/modify-during-amend/foo"
533 > sleep 1
559 > sleep 1
534 > echo hi > "\$1"
560 > echo hi > "\$1"
535 > sleep 1
561 > sleep 1
536 > EOF
562 > EOF
537 $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend
563 $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend
538 $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then
564 $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then
539 > echo "OK."
565 > echo "OK."
540 > else
566 > else
541 > echo "Bug detected. 'delta' is not part of the commit OR the wdir"
567 > echo "Bug detected. 'delta' is not part of the commit OR the wdir"
542 > echo "Diff and status before rebuild:"
568 > echo "Diff and status before rebuild:"
543 > hg diff
569 > hg diff
544 > hg status
570 > hg status
545 > hg debugrebuilddirstate
571 > hg debugrebuilddirstate
546 > echo "Diff and status after rebuild:"
572 > echo "Diff and status after rebuild:"
547 > hg diff
573 > hg diff
548 > hg status
574 > hg status
549 > fi
575 > fi
550 OK.
576 OK.
General Comments 0
You need to be logged in to leave comments. Login now