##// END OF EJS Templates
tests: stabilize test-split.t for Windows...
Matt Harbison -
r42058:0cbcb3e1 default
parent child Browse files
Show More
@@ -1,753 +1,766 b''
1 #testcases obsstore-on obsstore-off
1 #testcases obsstore-on obsstore-off
2
2
3 $ cat > $TESTTMP/editor.py <<EOF
3 $ cat > $TESTTMP/editor.py <<EOF
4 > #!"$PYTHON"
4 > #!"$PYTHON"
5 > import os
5 > import os
6 > import sys
6 > import sys
7 > path = os.path.join(os.environ['TESTTMP'], 'messages')
7 > path = os.path.join(os.environ['TESTTMP'], 'messages')
8 > messages = open(path).read().split('--\n')
8 > messages = open(path).read().split('--\n')
9 > prompt = open(sys.argv[1]).read()
9 > prompt = open(sys.argv[1]).read()
10 > sys.stdout.write(''.join('EDITOR: %s' % l for l in prompt.splitlines(True)))
10 > sys.stdout.write(''.join('EDITOR: %s' % l for l in prompt.splitlines(True)))
11 > sys.stdout.flush()
11 > sys.stdout.flush()
12 > with open(sys.argv[1], 'w') as f:
12 > with open(sys.argv[1], 'w') as f:
13 > f.write(messages[0])
13 > f.write(messages[0])
14 > with open(path, 'w') as f:
14 > with open(path, 'w') as f:
15 > f.write('--\n'.join(messages[1:]))
15 > f.write('--\n'.join(messages[1:]))
16 > EOF
16 > EOF
17
17
18 $ cat >> $HGRCPATH <<EOF
18 $ cat >> $HGRCPATH <<EOF
19 > [extensions]
19 > [extensions]
20 > drawdag=$TESTDIR/drawdag.py
20 > drawdag=$TESTDIR/drawdag.py
21 > split=
21 > split=
22 > [ui]
22 > [ui]
23 > interactive=1
23 > interactive=1
24 > color=no
24 > color=no
25 > paginate=never
25 > paginate=never
26 > [diff]
26 > [diff]
27 > git=1
27 > git=1
28 > unified=0
28 > unified=0
29 > [commands]
29 > [commands]
30 > commit.interactive.unified=0
30 > commit.interactive.unified=0
31 > [alias]
31 > [alias]
32 > glog=log -G -T '{rev}:{node|short} {desc} {bookmarks}\n'
32 > glog=log -G -T '{rev}:{node|short} {desc} {bookmarks}\n'
33 > EOF
33 > EOF
34
34
35 #if obsstore-on
35 #if obsstore-on
36 $ cat >> $HGRCPATH <<EOF
36 $ cat >> $HGRCPATH <<EOF
37 > [experimental]
37 > [experimental]
38 > evolution=all
38 > evolution=all
39 > EOF
39 > EOF
40 #endif
40 #endif
41
41
42 $ hg init a
42 $ hg init a
43 $ cd a
43 $ cd a
44
44
45 Nothing to split
45 Nothing to split
46
46
47 $ hg split
47 $ hg split
48 nothing to split
48 nothing to split
49 [1]
49 [1]
50
50
51 $ hg commit -m empty --config ui.allowemptycommit=1
51 $ hg commit -m empty --config ui.allowemptycommit=1
52 $ hg split
52 $ hg split
53 abort: cannot split an empty revision
53 abort: cannot split an empty revision
54 [255]
54 [255]
55
55
56 $ rm -rf .hg
56 $ rm -rf .hg
57 $ hg init
57 $ hg init
58
58
59 Cannot split working directory
59 Cannot split working directory
60
60
61 $ hg split -r 'wdir()'
61 $ hg split -r 'wdir()'
62 abort: cannot split working directory
62 abort: cannot split working directory
63 [255]
63 [255]
64
64
65 Generate some content. The sed filter drop CR on Windows, which is dropped in
65 Generate some content. The sed filter drop CR on Windows, which is dropped in
66 the a > b line.
66 the a > b line.
67
67
68 $ $TESTDIR/seq.py 1 5 | sed 's/\r$//' >> a
68 $ $TESTDIR/seq.py 1 5 | sed 's/\r$//' >> a
69 $ hg ci -m a1 -A a -q
69 $ hg ci -m a1 -A a -q
70 $ hg bookmark -i r1
70 $ hg bookmark -i r1
71 $ sed 's/1/11/;s/3/33/;s/5/55/' a > b
71 $ sed 's/1/11/;s/3/33/;s/5/55/' a > b
72 $ mv b a
72 $ mv b a
73 $ hg ci -m a2 -q
73 $ hg ci -m a2 -q
74 $ hg bookmark -i r2
74 $ hg bookmark -i r2
75
75
76 Cannot split a public changeset
76 Cannot split a public changeset
77
77
78 $ hg phase --public -r 'all()'
78 $ hg phase --public -r 'all()'
79 $ hg split .
79 $ hg split .
80 abort: cannot split public changeset
80 abort: cannot split public changeset
81 (see 'hg help phases' for details)
81 (see 'hg help phases' for details)
82 [255]
82 [255]
83
83
84 $ hg phase --draft -f -r 'all()'
84 $ hg phase --draft -f -r 'all()'
85
85
86 Cannot split while working directory is dirty
86 Cannot split while working directory is dirty
87
87
88 $ touch dirty
88 $ touch dirty
89 $ hg add dirty
89 $ hg add dirty
90 $ hg split .
90 $ hg split .
91 abort: uncommitted changes
91 abort: uncommitted changes
92 [255]
92 [255]
93 $ hg forget dirty
93 $ hg forget dirty
94 $ rm dirty
94 $ rm dirty
95
95
96 Make a clean directory for future tests to build off of
96 Make a clean directory for future tests to build off of
97
97
98 $ cp -R . ../clean
98 $ cp -R . ../clean
99
99
100 Split a head
100 Split a head
101
101
102 $ hg bookmark r3
102 $ hg bookmark r3
103
103
104 $ hg split 'all()'
104 $ hg split 'all()'
105 abort: cannot split multiple revisions
105 abort: cannot split multiple revisions
106 [255]
106 [255]
107
107
108 This function splits a bit strangely primarily to avoid changing the behavior of
108 This function splits a bit strangely primarily to avoid changing the behavior of
109 the test after a bug was fixed with how split/commit --interactive handled
109 the test after a bug was fixed with how split/commit --interactive handled
110 `commands.commit.interactive.unified=0`: when there were no context lines,
110 `commands.commit.interactive.unified=0`: when there were no context lines,
111 it kept only the last diff hunk. When running split, this meant that runsplit
111 it kept only the last diff hunk. When running split, this meant that runsplit
112 was always recording three commits, one for each diff hunk, in reverse order
112 was always recording three commits, one for each diff hunk, in reverse order
113 (the base commit was the last diff hunk in the file).
113 (the base commit was the last diff hunk in the file).
114 $ runsplit() {
114 $ runsplit() {
115 > cat > $TESTTMP/messages <<EOF
115 > cat > $TESTTMP/messages <<EOF
116 > split 1
116 > split 1
117 > --
117 > --
118 > split 2
118 > split 2
119 > --
119 > --
120 > split 3
120 > split 3
121 > EOF
121 > EOF
122 > cat <<EOF | hg split "$@"
122 > cat <<EOF | hg split "$@"
123 > y
123 > y
124 > n
124 > n
125 > n
125 > n
126 > y
126 > y
127 > y
127 > y
128 > n
128 > n
129 > y
129 > y
130 > y
130 > y
131 > y
131 > y
132 > EOF
132 > EOF
133 > }
133 > }
134
134
135 $ HGEDITOR=false runsplit
135 $ HGEDITOR=false runsplit
136 diff --git a/a b/a
136 diff --git a/a b/a
137 3 hunks, 3 lines changed
137 3 hunks, 3 lines changed
138 examine changes to 'a'? [Ynesfdaq?] y
138 examine changes to 'a'? [Ynesfdaq?] y
139
139
140 @@ -1,1 +1,1 @@
140 @@ -1,1 +1,1 @@
141 -1
141 -1
142 +11
142 +11
143 record change 1/3 to 'a'? [Ynesfdaq?] n
143 record change 1/3 to 'a'? [Ynesfdaq?] n
144
144
145 @@ -3,1 +3,1 @@ 2
145 @@ -3,1 +3,1 @@ 2
146 -3
146 -3
147 +33
147 +33
148 record change 2/3 to 'a'? [Ynesfdaq?] n
148 record change 2/3 to 'a'? [Ynesfdaq?] n
149
149
150 @@ -5,1 +5,1 @@ 4
150 @@ -5,1 +5,1 @@ 4
151 -5
151 -5
152 +55
152 +55
153 record change 3/3 to 'a'? [Ynesfdaq?] y
153 record change 3/3 to 'a'? [Ynesfdaq?] y
154
154
155 transaction abort!
155 transaction abort!
156 rollback completed
156 rollback completed
157 abort: edit failed: false exited with status 1
157 abort: edit failed: false exited with status 1
158 [255]
158 [255]
159 $ hg status
159 $ hg status
160
160
161 $ HGEDITOR="\"$PYTHON\" $TESTTMP/editor.py"
161 $ HGEDITOR="\"$PYTHON\" $TESTTMP/editor.py"
162 $ runsplit
162 $ runsplit
163 diff --git a/a b/a
163 diff --git a/a b/a
164 3 hunks, 3 lines changed
164 3 hunks, 3 lines changed
165 examine changes to 'a'? [Ynesfdaq?] y
165 examine changes to 'a'? [Ynesfdaq?] y
166
166
167 @@ -1,1 +1,1 @@
167 @@ -1,1 +1,1 @@
168 -1
168 -1
169 +11
169 +11
170 record change 1/3 to 'a'? [Ynesfdaq?] n
170 record change 1/3 to 'a'? [Ynesfdaq?] n
171
171
172 @@ -3,1 +3,1 @@ 2
172 @@ -3,1 +3,1 @@ 2
173 -3
173 -3
174 +33
174 +33
175 record change 2/3 to 'a'? [Ynesfdaq?] n
175 record change 2/3 to 'a'? [Ynesfdaq?] n
176
176
177 @@ -5,1 +5,1 @@ 4
177 @@ -5,1 +5,1 @@ 4
178 -5
178 -5
179 +55
179 +55
180 record change 3/3 to 'a'? [Ynesfdaq?] y
180 record change 3/3 to 'a'? [Ynesfdaq?] y
181
181
182 EDITOR: HG: Splitting 1df0d5c5a3ab. Write commit message for the first split changeset.
182 EDITOR: HG: Splitting 1df0d5c5a3ab. Write commit message for the first split changeset.
183 EDITOR: a2
183 EDITOR: a2
184 EDITOR:
184 EDITOR:
185 EDITOR:
185 EDITOR:
186 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
186 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
187 EDITOR: HG: Leave message empty to abort commit.
187 EDITOR: HG: Leave message empty to abort commit.
188 EDITOR: HG: --
188 EDITOR: HG: --
189 EDITOR: HG: user: test
189 EDITOR: HG: user: test
190 EDITOR: HG: branch 'default'
190 EDITOR: HG: branch 'default'
191 EDITOR: HG: changed a
191 EDITOR: HG: changed a
192 created new head
192 created new head
193 diff --git a/a b/a
193 diff --git a/a b/a
194 2 hunks, 2 lines changed
194 2 hunks, 2 lines changed
195 examine changes to 'a'? [Ynesfdaq?] y
195 examine changes to 'a'? [Ynesfdaq?] y
196
196
197 @@ -1,1 +1,1 @@
197 @@ -1,1 +1,1 @@
198 -1
198 -1
199 +11
199 +11
200 record change 1/2 to 'a'? [Ynesfdaq?] n
200 record change 1/2 to 'a'? [Ynesfdaq?] n
201
201
202 @@ -3,1 +3,1 @@ 2
202 @@ -3,1 +3,1 @@ 2
203 -3
203 -3
204 +33
204 +33
205 record change 2/2 to 'a'? [Ynesfdaq?] y
205 record change 2/2 to 'a'? [Ynesfdaq?] y
206
206
207 EDITOR: HG: Splitting 1df0d5c5a3ab. So far it has been split into:
207 EDITOR: HG: Splitting 1df0d5c5a3ab. So far it has been split into:
208 EDITOR: HG: - e704349bd21b: split 1
208 EDITOR: HG: - e704349bd21b: split 1
209 EDITOR: HG: Write commit message for the next split changeset.
209 EDITOR: HG: Write commit message for the next split changeset.
210 EDITOR: a2
210 EDITOR: a2
211 EDITOR:
211 EDITOR:
212 EDITOR:
212 EDITOR:
213 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
213 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
214 EDITOR: HG: Leave message empty to abort commit.
214 EDITOR: HG: Leave message empty to abort commit.
215 EDITOR: HG: --
215 EDITOR: HG: --
216 EDITOR: HG: user: test
216 EDITOR: HG: user: test
217 EDITOR: HG: branch 'default'
217 EDITOR: HG: branch 'default'
218 EDITOR: HG: changed a
218 EDITOR: HG: changed a
219 diff --git a/a b/a
219 diff --git a/a b/a
220 1 hunks, 1 lines changed
220 1 hunks, 1 lines changed
221 examine changes to 'a'? [Ynesfdaq?] y
221 examine changes to 'a'? [Ynesfdaq?] y
222
222
223 @@ -1,1 +1,1 @@
223 @@ -1,1 +1,1 @@
224 -1
224 -1
225 +11
225 +11
226 record this change to 'a'? [Ynesfdaq?] y
226 record this change to 'a'? [Ynesfdaq?] y
227
227
228 EDITOR: HG: Splitting 1df0d5c5a3ab. So far it has been split into:
228 EDITOR: HG: Splitting 1df0d5c5a3ab. So far it has been split into:
229 EDITOR: HG: - e704349bd21b: split 1
229 EDITOR: HG: - e704349bd21b: split 1
230 EDITOR: HG: - a09ad58faae3: split 2
230 EDITOR: HG: - a09ad58faae3: split 2
231 EDITOR: HG: Write commit message for the next split changeset.
231 EDITOR: HG: Write commit message for the next split changeset.
232 EDITOR: a2
232 EDITOR: a2
233 EDITOR:
233 EDITOR:
234 EDITOR:
234 EDITOR:
235 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
235 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
236 EDITOR: HG: Leave message empty to abort commit.
236 EDITOR: HG: Leave message empty to abort commit.
237 EDITOR: HG: --
237 EDITOR: HG: --
238 EDITOR: HG: user: test
238 EDITOR: HG: user: test
239 EDITOR: HG: branch 'default'
239 EDITOR: HG: branch 'default'
240 EDITOR: HG: changed a
240 EDITOR: HG: changed a
241 saved backup bundle to $TESTTMP/a/.hg/strip-backup/1df0d5c5a3ab-8341b760-split.hg (obsstore-off !)
241 saved backup bundle to $TESTTMP/a/.hg/strip-backup/1df0d5c5a3ab-8341b760-split.hg (obsstore-off !)
242
242
243 #if obsstore-off
243 #if obsstore-off
244 $ hg bookmark
244 $ hg bookmark
245 r1 0:a61bcde8c529
245 r1 0:a61bcde8c529
246 r2 3:00eebaf8d2e2
246 r2 3:00eebaf8d2e2
247 * r3 3:00eebaf8d2e2
247 * r3 3:00eebaf8d2e2
248 $ hg glog -p
248 $ hg glog -p
249 @ 3:00eebaf8d2e2 split 3 r2 r3
249 @ 3:00eebaf8d2e2 split 3 r2 r3
250 | diff --git a/a b/a
250 | diff --git a/a b/a
251 | --- a/a
251 | --- a/a
252 | +++ b/a
252 | +++ b/a
253 | @@ -1,1 +1,1 @@
253 | @@ -1,1 +1,1 @@
254 | -1
254 | -1
255 | +11
255 | +11
256 |
256 |
257 o 2:a09ad58faae3 split 2
257 o 2:a09ad58faae3 split 2
258 | diff --git a/a b/a
258 | diff --git a/a b/a
259 | --- a/a
259 | --- a/a
260 | +++ b/a
260 | +++ b/a
261 | @@ -3,1 +3,1 @@
261 | @@ -3,1 +3,1 @@
262 | -3
262 | -3
263 | +33
263 | +33
264 |
264 |
265 o 1:e704349bd21b split 1
265 o 1:e704349bd21b split 1
266 | diff --git a/a b/a
266 | diff --git a/a b/a
267 | --- a/a
267 | --- a/a
268 | +++ b/a
268 | +++ b/a
269 | @@ -5,1 +5,1 @@
269 | @@ -5,1 +5,1 @@
270 | -5
270 | -5
271 | +55
271 | +55
272 |
272 |
273 o 0:a61bcde8c529 a1 r1
273 o 0:a61bcde8c529 a1 r1
274 diff --git a/a b/a
274 diff --git a/a b/a
275 new file mode 100644
275 new file mode 100644
276 --- /dev/null
276 --- /dev/null
277 +++ b/a
277 +++ b/a
278 @@ -0,0 +1,5 @@
278 @@ -0,0 +1,5 @@
279 +1
279 +1
280 +2
280 +2
281 +3
281 +3
282 +4
282 +4
283 +5
283 +5
284
284
285 #else
285 #else
286 $ hg bookmark
286 $ hg bookmark
287 r1 0:a61bcde8c529
287 r1 0:a61bcde8c529
288 r2 4:00eebaf8d2e2
288 r2 4:00eebaf8d2e2
289 * r3 4:00eebaf8d2e2
289 * r3 4:00eebaf8d2e2
290 $ hg glog
290 $ hg glog
291 @ 4:00eebaf8d2e2 split 3 r2 r3
291 @ 4:00eebaf8d2e2 split 3 r2 r3
292 |
292 |
293 o 3:a09ad58faae3 split 2
293 o 3:a09ad58faae3 split 2
294 |
294 |
295 o 2:e704349bd21b split 1
295 o 2:e704349bd21b split 1
296 |
296 |
297 o 0:a61bcde8c529 a1 r1
297 o 0:a61bcde8c529 a1 r1
298
298
299 #endif
299 #endif
300
300
301 Split a head while working parent is not that head
301 Split a head while working parent is not that head
302
302
303 $ cp -R $TESTTMP/clean $TESTTMP/b
303 $ cp -R $TESTTMP/clean $TESTTMP/b
304 $ cd $TESTTMP/b
304 $ cd $TESTTMP/b
305
305
306 $ hg up 0 -q
306 $ hg up 0 -q
307 $ hg bookmark r3
307 $ hg bookmark r3
308
308
309 $ runsplit tip >/dev/null
309 $ runsplit tip >/dev/null
310
310
311 #if obsstore-off
311 #if obsstore-off
312 $ hg bookmark
312 $ hg bookmark
313 r1 0:a61bcde8c529
313 r1 0:a61bcde8c529
314 r2 3:00eebaf8d2e2
314 r2 3:00eebaf8d2e2
315 * r3 0:a61bcde8c529
315 * r3 0:a61bcde8c529
316 $ hg glog
316 $ hg glog
317 o 3:00eebaf8d2e2 split 3 r2
317 o 3:00eebaf8d2e2 split 3 r2
318 |
318 |
319 o 2:a09ad58faae3 split 2
319 o 2:a09ad58faae3 split 2
320 |
320 |
321 o 1:e704349bd21b split 1
321 o 1:e704349bd21b split 1
322 |
322 |
323 @ 0:a61bcde8c529 a1 r1 r3
323 @ 0:a61bcde8c529 a1 r1 r3
324
324
325 #else
325 #else
326 $ hg bookmark
326 $ hg bookmark
327 r1 0:a61bcde8c529
327 r1 0:a61bcde8c529
328 r2 4:00eebaf8d2e2
328 r2 4:00eebaf8d2e2
329 * r3 0:a61bcde8c529
329 * r3 0:a61bcde8c529
330 $ hg glog
330 $ hg glog
331 o 4:00eebaf8d2e2 split 3 r2
331 o 4:00eebaf8d2e2 split 3 r2
332 |
332 |
333 o 3:a09ad58faae3 split 2
333 o 3:a09ad58faae3 split 2
334 |
334 |
335 o 2:e704349bd21b split 1
335 o 2:e704349bd21b split 1
336 |
336 |
337 @ 0:a61bcde8c529 a1 r1 r3
337 @ 0:a61bcde8c529 a1 r1 r3
338
338
339 #endif
339 #endif
340
340
341 Split a non-head
341 Split a non-head
342
342
343 $ cp -R $TESTTMP/clean $TESTTMP/c
343 $ cp -R $TESTTMP/clean $TESTTMP/c
344 $ cd $TESTTMP/c
344 $ cd $TESTTMP/c
345 $ echo d > d
345 $ echo d > d
346 $ hg ci -m d1 -A d
346 $ hg ci -m d1 -A d
347 $ hg bookmark -i d1
347 $ hg bookmark -i d1
348 $ echo 2 >> d
348 $ echo 2 >> d
349 $ hg ci -m d2
349 $ hg ci -m d2
350 $ echo 3 >> d
350 $ echo 3 >> d
351 $ hg ci -m d3
351 $ hg ci -m d3
352 $ hg bookmark -i d3
352 $ hg bookmark -i d3
353 $ hg up '.^' -q
353 $ hg up '.^' -q
354 $ hg bookmark d2
354 $ hg bookmark d2
355 $ cp -R . ../d
355 $ cp -R . ../d
356
356
357 $ runsplit -r 1 | grep rebasing
357 $ runsplit -r 1 | grep rebasing
358 rebasing 2:b5c5ea414030 "d1" (d1)
358 rebasing 2:b5c5ea414030 "d1" (d1)
359 rebasing 3:f4a0a8d004cc "d2" (d2)
359 rebasing 3:f4a0a8d004cc "d2" (d2)
360 rebasing 4:777940761eba "d3" (d3)
360 rebasing 4:777940761eba "d3" (d3)
361 #if obsstore-off
361 #if obsstore-off
362 $ hg bookmark
362 $ hg bookmark
363 d1 4:c4b449ef030e
363 d1 4:c4b449ef030e
364 * d2 5:c9dd00ab36a3
364 * d2 5:c9dd00ab36a3
365 d3 6:19f476bc865c
365 d3 6:19f476bc865c
366 r1 0:a61bcde8c529
366 r1 0:a61bcde8c529
367 r2 3:00eebaf8d2e2
367 r2 3:00eebaf8d2e2
368 $ hg glog -p
368 $ hg glog -p
369 o 6:19f476bc865c d3 d3
369 o 6:19f476bc865c d3 d3
370 | diff --git a/d b/d
370 | diff --git a/d b/d
371 | --- a/d
371 | --- a/d
372 | +++ b/d
372 | +++ b/d
373 | @@ -2,0 +3,1 @@
373 | @@ -2,0 +3,1 @@
374 | +3
374 | +3
375 |
375 |
376 @ 5:c9dd00ab36a3 d2 d2
376 @ 5:c9dd00ab36a3 d2 d2
377 | diff --git a/d b/d
377 | diff --git a/d b/d
378 | --- a/d
378 | --- a/d
379 | +++ b/d
379 | +++ b/d
380 | @@ -1,0 +2,1 @@
380 | @@ -1,0 +2,1 @@
381 | +2
381 | +2
382 |
382 |
383 o 4:c4b449ef030e d1 d1
383 o 4:c4b449ef030e d1 d1
384 | diff --git a/d b/d
384 | diff --git a/d b/d
385 | new file mode 100644
385 | new file mode 100644
386 | --- /dev/null
386 | --- /dev/null
387 | +++ b/d
387 | +++ b/d
388 | @@ -0,0 +1,1 @@
388 | @@ -0,0 +1,1 @@
389 | +d
389 | +d
390 |
390 |
391 o 3:00eebaf8d2e2 split 3 r2
391 o 3:00eebaf8d2e2 split 3 r2
392 | diff --git a/a b/a
392 | diff --git a/a b/a
393 | --- a/a
393 | --- a/a
394 | +++ b/a
394 | +++ b/a
395 | @@ -1,1 +1,1 @@
395 | @@ -1,1 +1,1 @@
396 | -1
396 | -1
397 | +11
397 | +11
398 |
398 |
399 o 2:a09ad58faae3 split 2
399 o 2:a09ad58faae3 split 2
400 | diff --git a/a b/a
400 | diff --git a/a b/a
401 | --- a/a
401 | --- a/a
402 | +++ b/a
402 | +++ b/a
403 | @@ -3,1 +3,1 @@
403 | @@ -3,1 +3,1 @@
404 | -3
404 | -3
405 | +33
405 | +33
406 |
406 |
407 o 1:e704349bd21b split 1
407 o 1:e704349bd21b split 1
408 | diff --git a/a b/a
408 | diff --git a/a b/a
409 | --- a/a
409 | --- a/a
410 | +++ b/a
410 | +++ b/a
411 | @@ -5,1 +5,1 @@
411 | @@ -5,1 +5,1 @@
412 | -5
412 | -5
413 | +55
413 | +55
414 |
414 |
415 o 0:a61bcde8c529 a1 r1
415 o 0:a61bcde8c529 a1 r1
416 diff --git a/a b/a
416 diff --git a/a b/a
417 new file mode 100644
417 new file mode 100644
418 --- /dev/null
418 --- /dev/null
419 +++ b/a
419 +++ b/a
420 @@ -0,0 +1,5 @@
420 @@ -0,0 +1,5 @@
421 +1
421 +1
422 +2
422 +2
423 +3
423 +3
424 +4
424 +4
425 +5
425 +5
426
426
427 #else
427 #else
428 $ hg bookmark
428 $ hg bookmark
429 d1 8:c4b449ef030e
429 d1 8:c4b449ef030e
430 * d2 9:c9dd00ab36a3
430 * d2 9:c9dd00ab36a3
431 d3 10:19f476bc865c
431 d3 10:19f476bc865c
432 r1 0:a61bcde8c529
432 r1 0:a61bcde8c529
433 r2 7:00eebaf8d2e2
433 r2 7:00eebaf8d2e2
434 $ hg glog
434 $ hg glog
435 o 10:19f476bc865c d3 d3
435 o 10:19f476bc865c d3 d3
436 |
436 |
437 @ 9:c9dd00ab36a3 d2 d2
437 @ 9:c9dd00ab36a3 d2 d2
438 |
438 |
439 o 8:c4b449ef030e d1 d1
439 o 8:c4b449ef030e d1 d1
440 |
440 |
441 o 7:00eebaf8d2e2 split 3 r2
441 o 7:00eebaf8d2e2 split 3 r2
442 |
442 |
443 o 6:a09ad58faae3 split 2
443 o 6:a09ad58faae3 split 2
444 |
444 |
445 o 5:e704349bd21b split 1
445 o 5:e704349bd21b split 1
446 |
446 |
447 o 0:a61bcde8c529 a1 r1
447 o 0:a61bcde8c529 a1 r1
448
448
449 #endif
449 #endif
450
450
451 Split a non-head without rebase
451 Split a non-head without rebase
452
452
453 $ cd $TESTTMP/d
453 $ cd $TESTTMP/d
454 #if obsstore-off
454 #if obsstore-off
455 $ runsplit -r 1 --no-rebase
455 $ runsplit -r 1 --no-rebase
456 abort: cannot split changeset with children without rebase
456 abort: cannot split changeset with children without rebase
457 [255]
457 [255]
458 #else
458 #else
459 $ runsplit -r 1 --no-rebase >/dev/null
459 $ runsplit -r 1 --no-rebase >/dev/null
460 3 new orphan changesets
460 3 new orphan changesets
461 $ hg bookmark
461 $ hg bookmark
462 d1 2:b5c5ea414030
462 d1 2:b5c5ea414030
463 * d2 3:f4a0a8d004cc
463 * d2 3:f4a0a8d004cc
464 d3 4:777940761eba
464 d3 4:777940761eba
465 r1 0:a61bcde8c529
465 r1 0:a61bcde8c529
466 r2 7:00eebaf8d2e2
466 r2 7:00eebaf8d2e2
467
467
468 $ hg glog
468 $ hg glog
469 o 7:00eebaf8d2e2 split 3 r2
469 o 7:00eebaf8d2e2 split 3 r2
470 |
470 |
471 o 6:a09ad58faae3 split 2
471 o 6:a09ad58faae3 split 2
472 |
472 |
473 o 5:e704349bd21b split 1
473 o 5:e704349bd21b split 1
474 |
474 |
475 | * 4:777940761eba d3 d3
475 | * 4:777940761eba d3 d3
476 | |
476 | |
477 | @ 3:f4a0a8d004cc d2 d2
477 | @ 3:f4a0a8d004cc d2 d2
478 | |
478 | |
479 | * 2:b5c5ea414030 d1 d1
479 | * 2:b5c5ea414030 d1 d1
480 | |
480 | |
481 | x 1:1df0d5c5a3ab a2
481 | x 1:1df0d5c5a3ab a2
482 |/
482 |/
483 o 0:a61bcde8c529 a1 r1
483 o 0:a61bcde8c529 a1 r1
484
484
485 #endif
485 #endif
486
486
487 Split a non-head with obsoleted descendants
487 Split a non-head with obsoleted descendants
488
488
489 #if obsstore-on
489 #if obsstore-on
490 $ hg init $TESTTMP/e
490 $ hg init $TESTTMP/e
491 $ cd $TESTTMP/e
491 $ cd $TESTTMP/e
492 $ hg debugdrawdag <<'EOS'
492 $ hg debugdrawdag <<'EOS'
493 > H I J
493 > H I J
494 > | | |
494 > | | |
495 > F G1 G2 # amend: G1 -> G2
495 > F G1 G2 # amend: G1 -> G2
496 > | | / # prune: F
496 > | | / # prune: F
497 > C D E
497 > C D E
498 > \|/
498 > \|/
499 > B
499 > B
500 > |
500 > |
501 > A
501 > A
502 > EOS
502 > EOS
503 2 new orphan changesets
503 2 new orphan changesets
504 $ eval `hg tags -T '{tag}={node}\n'`
504 $ eval `hg tags -T '{tag}={node}\n'`
505 $ rm .hg/localtags
505 $ rm .hg/localtags
506 $ hg split $B --config experimental.evolution=createmarkers
506 $ hg split $B --config experimental.evolution=createmarkers
507 abort: split would leave orphaned changesets behind
507 abort: split would leave orphaned changesets behind
508 [255]
508 [255]
509 $ cat > $TESTTMP/messages <<EOF
509 $ cat > $TESTTMP/messages <<EOF
510 > Split B
510 > Split B
511 > EOF
511 > EOF
512 $ cat <<EOF | hg split $B
512 $ cat <<EOF | hg split $B
513 > y
513 > y
514 > y
514 > y
515 > EOF
515 > EOF
516 diff --git a/B b/B
516 diff --git a/B b/B
517 new file mode 100644
517 new file mode 100644
518 examine changes to 'B'? [Ynesfdaq?] y
518 examine changes to 'B'? [Ynesfdaq?] y
519
519
520 @@ -0,0 +1,1 @@
520 @@ -0,0 +1,1 @@
521 +B
521 +B
522 \ No newline at end of file
522 \ No newline at end of file
523 record this change to 'B'? [Ynesfdaq?] y
523 record this change to 'B'? [Ynesfdaq?] y
524
524
525 EDITOR: HG: Splitting 112478962961. Write commit message for the first split changeset.
525 EDITOR: HG: Splitting 112478962961. Write commit message for the first split changeset.
526 EDITOR: B
526 EDITOR: B
527 EDITOR:
527 EDITOR:
528 EDITOR:
528 EDITOR:
529 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
529 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
530 EDITOR: HG: Leave message empty to abort commit.
530 EDITOR: HG: Leave message empty to abort commit.
531 EDITOR: HG: --
531 EDITOR: HG: --
532 EDITOR: HG: user: test
532 EDITOR: HG: user: test
533 EDITOR: HG: branch 'default'
533 EDITOR: HG: branch 'default'
534 EDITOR: HG: added B
534 EDITOR: HG: added B
535 created new head
535 created new head
536 rebasing 2:26805aba1e60 "C"
536 rebasing 2:26805aba1e60 "C"
537 rebasing 3:be0ef73c17ad "D"
537 rebasing 3:be0ef73c17ad "D"
538 rebasing 4:49cb92066bfd "E"
538 rebasing 4:49cb92066bfd "E"
539 rebasing 7:97a6268cc7ef "G2"
539 rebasing 7:97a6268cc7ef "G2"
540 rebasing 10:e2f1e425c0db "J"
540 rebasing 10:e2f1e425c0db "J"
541 $ hg glog -r 'sort(all(), topo)'
541 $ hg glog -r 'sort(all(), topo)'
542 o 16:556c085f8b52 J
542 o 16:556c085f8b52 J
543 |
543 |
544 o 15:8761f6c9123f G2
544 o 15:8761f6c9123f G2
545 |
545 |
546 o 14:a7aeffe59b65 E
546 o 14:a7aeffe59b65 E
547 |
547 |
548 | o 13:e1e914ede9ab D
548 | o 13:e1e914ede9ab D
549 |/
549 |/
550 | o 12:01947e9b98aa C
550 | o 12:01947e9b98aa C
551 |/
551 |/
552 o 11:0947baa74d47 Split B
552 o 11:0947baa74d47 Split B
553 |
553 |
554 | * 9:88ede1d5ee13 I
554 | * 9:88ede1d5ee13 I
555 | |
555 | |
556 | x 6:af8cbf225b7b G1
556 | x 6:af8cbf225b7b G1
557 | |
557 | |
558 | x 3:be0ef73c17ad D
558 | x 3:be0ef73c17ad D
559 | |
559 | |
560 | | * 8:74863e5b5074 H
560 | | * 8:74863e5b5074 H
561 | | |
561 | | |
562 | | x 5:ee481a2a1e69 F
562 | | x 5:ee481a2a1e69 F
563 | | |
563 | | |
564 | | x 2:26805aba1e60 C
564 | | x 2:26805aba1e60 C
565 | |/
565 | |/
566 | x 1:112478962961 B
566 | x 1:112478962961 B
567 |/
567 |/
568 o 0:426bada5c675 A
568 o 0:426bada5c675 A
569
569
570 #endif
570 #endif
571
571
572 Preserve secret phase in split
572 Preserve secret phase in split
573
573
574 $ cp -R $TESTTMP/clean $TESTTMP/phases1
574 $ cp -R $TESTTMP/clean $TESTTMP/phases1
575 $ cd $TESTTMP/phases1
575 $ cd $TESTTMP/phases1
576 $ hg phase --secret -fr tip
576 $ hg phase --secret -fr tip
577 $ hg log -T '{short(node)} {phase}\n'
577 $ hg log -T '{short(node)} {phase}\n'
578 1df0d5c5a3ab secret
578 1df0d5c5a3ab secret
579 a61bcde8c529 draft
579 a61bcde8c529 draft
580 $ runsplit tip >/dev/null
580 $ runsplit tip >/dev/null
581 $ hg log -T '{short(node)} {phase}\n'
581 $ hg log -T '{short(node)} {phase}\n'
582 00eebaf8d2e2 secret
582 00eebaf8d2e2 secret
583 a09ad58faae3 secret
583 a09ad58faae3 secret
584 e704349bd21b secret
584 e704349bd21b secret
585 a61bcde8c529 draft
585 a61bcde8c529 draft
586
586
587 Do not move things to secret even if phases.new-commit=secret
587 Do not move things to secret even if phases.new-commit=secret
588
588
589 $ cp -R $TESTTMP/clean $TESTTMP/phases2
589 $ cp -R $TESTTMP/clean $TESTTMP/phases2
590 $ cd $TESTTMP/phases2
590 $ cd $TESTTMP/phases2
591 $ cat >> .hg/hgrc <<EOF
591 $ cat >> .hg/hgrc <<EOF
592 > [phases]
592 > [phases]
593 > new-commit=secret
593 > new-commit=secret
594 > EOF
594 > EOF
595 $ hg log -T '{short(node)} {phase}\n'
595 $ hg log -T '{short(node)} {phase}\n'
596 1df0d5c5a3ab draft
596 1df0d5c5a3ab draft
597 a61bcde8c529 draft
597 a61bcde8c529 draft
598 $ runsplit tip >/dev/null
598 $ runsplit tip >/dev/null
599 $ hg log -T '{short(node)} {phase}\n'
599 $ hg log -T '{short(node)} {phase}\n'
600 00eebaf8d2e2 draft
600 00eebaf8d2e2 draft
601 a09ad58faae3 draft
601 a09ad58faae3 draft
602 e704349bd21b draft
602 e704349bd21b draft
603 a61bcde8c529 draft
603 a61bcde8c529 draft
604
604
605 `hg split` with ignoreblanklines=1 does not infinite loop
605 `hg split` with ignoreblanklines=1 does not infinite loop
606
606
607 $ mkdir $TESTTMP/f
607 $ mkdir $TESTTMP/f
608 $ hg init $TESTTMP/f/a
608 $ hg init $TESTTMP/f/a
609 $ cd $TESTTMP/f/a
609 $ cd $TESTTMP/f/a
610 $ printf '1\n2\n3\n4\n5\n' > foo
610 $ printf '1\n2\n3\n4\n5\n' > foo
611 $ cp foo bar
611 $ cp foo bar
612 $ hg ci -qAm initial
612 $ hg ci -qAm initial
613 $ printf '1\n\n2\n3\ntest\n4\n5\n' > bar
613 $ printf '1\n\n2\n3\ntest\n4\n5\n' > bar
614 $ printf '1\n2\n3\ntest\n4\n5\n' > foo
614 $ printf '1\n2\n3\ntest\n4\n5\n' > foo
615 $ hg ci -qm splitme
615 $ hg ci -qm splitme
616 $ cat > $TESTTMP/messages <<EOF
616 $ cat > $TESTTMP/messages <<EOF
617 > split 1
617 > split 1
618 > --
618 > --
619 > split 2
619 > split 2
620 > EOF
620 > EOF
621 $ printf 'f\nn\nf\n' | hg --config extensions.split= --config diff.ignoreblanklines=1 split
621 $ printf 'f\nn\nf\n' | hg --config extensions.split= --config diff.ignoreblanklines=1 split
622 diff --git a/bar b/bar
622 diff --git a/bar b/bar
623 2 hunks, 2 lines changed
623 2 hunks, 2 lines changed
624 examine changes to 'bar'? [Ynesfdaq?] f
624 examine changes to 'bar'? [Ynesfdaq?] f
625
625
626 diff --git a/foo b/foo
626 diff --git a/foo b/foo
627 1 hunks, 1 lines changed
627 1 hunks, 1 lines changed
628 examine changes to 'foo'? [Ynesfdaq?] n
628 examine changes to 'foo'? [Ynesfdaq?] n
629
629
630 EDITOR: HG: Splitting dd3c45017cbf. Write commit message for the first split changeset.
630 EDITOR: HG: Splitting dd3c45017cbf. Write commit message for the first split changeset.
631 EDITOR: splitme
631 EDITOR: splitme
632 EDITOR:
632 EDITOR:
633 EDITOR:
633 EDITOR:
634 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
634 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
635 EDITOR: HG: Leave message empty to abort commit.
635 EDITOR: HG: Leave message empty to abort commit.
636 EDITOR: HG: --
636 EDITOR: HG: --
637 EDITOR: HG: user: test
637 EDITOR: HG: user: test
638 EDITOR: HG: branch 'default'
638 EDITOR: HG: branch 'default'
639 EDITOR: HG: changed bar
639 EDITOR: HG: changed bar
640 created new head
640 created new head
641 diff --git a/foo b/foo
641 diff --git a/foo b/foo
642 1 hunks, 1 lines changed
642 1 hunks, 1 lines changed
643 examine changes to 'foo'? [Ynesfdaq?] f
643 examine changes to 'foo'? [Ynesfdaq?] f
644
644
645 EDITOR: HG: Splitting dd3c45017cbf. So far it has been split into:
645 EDITOR: HG: Splitting dd3c45017cbf. So far it has been split into:
646 EDITOR: HG: - f205aea1c624: split 1
646 EDITOR: HG: - f205aea1c624: split 1
647 EDITOR: HG: Write commit message for the next split changeset.
647 EDITOR: HG: Write commit message for the next split changeset.
648 EDITOR: splitme
648 EDITOR: splitme
649 EDITOR:
649 EDITOR:
650 EDITOR:
650 EDITOR:
651 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
651 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
652 EDITOR: HG: Leave message empty to abort commit.
652 EDITOR: HG: Leave message empty to abort commit.
653 EDITOR: HG: --
653 EDITOR: HG: --
654 EDITOR: HG: user: test
654 EDITOR: HG: user: test
655 EDITOR: HG: branch 'default'
655 EDITOR: HG: branch 'default'
656 EDITOR: HG: changed foo
656 EDITOR: HG: changed foo
657 saved backup bundle to $TESTTMP/f/a/.hg/strip-backup/dd3c45017cbf-463441b5-split.hg (obsstore-off !)
657 saved backup bundle to $TESTTMP/f/a/.hg/strip-backup/dd3c45017cbf-463441b5-split.hg (obsstore-off !)
658
658
659 Let's try that again, with a slightly different set of patches, to ensure that
659 Let's try that again, with a slightly different set of patches, to ensure that
660 the ignoreblanklines thing isn't somehow position dependent.
660 the ignoreblanklines thing isn't somehow position dependent.
661
661
662 $ hg init $TESTTMP/f/b
662 $ hg init $TESTTMP/f/b
663 $ cd $TESTTMP/f/b
663 $ cd $TESTTMP/f/b
664 $ printf '1\n2\n3\n4\n5\n' > foo
664 $ printf '1\n2\n3\n4\n5\n' > foo
665 $ cp foo bar
665 $ cp foo bar
666 $ hg ci -qAm initial
666 $ hg ci -qAm initial
667 $ printf '1\n2\n3\ntest\n4\n5\n' > bar
667 $ printf '1\n2\n3\ntest\n4\n5\n' > bar
668 $ printf '1\n2\n3\ntest\n4\n\n5\n' > foo
668 $ printf '1\n2\n3\ntest\n4\n\n5\n' > foo
669 $ hg ci -qm splitme
669 $ hg ci -qm splitme
670 $ cat > $TESTTMP/messages <<EOF
670 $ cat > $TESTTMP/messages <<EOF
671 > split 1
671 > split 1
672 > --
672 > --
673 > split 2
673 > split 2
674 > EOF
674 > EOF
675 $ printf 'f\nn\nf\n' | hg --config extensions.split= --config diff.ignoreblanklines=1 split
675 $ printf 'f\nn\nf\n' | hg --config extensions.split= --config diff.ignoreblanklines=1 split
676 diff --git a/bar b/bar
676 diff --git a/bar b/bar
677 1 hunks, 1 lines changed
677 1 hunks, 1 lines changed
678 examine changes to 'bar'? [Ynesfdaq?] f
678 examine changes to 'bar'? [Ynesfdaq?] f
679
679
680 diff --git a/foo b/foo
680 diff --git a/foo b/foo
681 2 hunks, 2 lines changed
681 2 hunks, 2 lines changed
682 examine changes to 'foo'? [Ynesfdaq?] n
682 examine changes to 'foo'? [Ynesfdaq?] n
683
683
684 EDITOR: HG: Splitting 904c80b40a4a. Write commit message for the first split changeset.
684 EDITOR: HG: Splitting 904c80b40a4a. Write commit message for the first split changeset.
685 EDITOR: splitme
685 EDITOR: splitme
686 EDITOR:
686 EDITOR:
687 EDITOR:
687 EDITOR:
688 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
688 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
689 EDITOR: HG: Leave message empty to abort commit.
689 EDITOR: HG: Leave message empty to abort commit.
690 EDITOR: HG: --
690 EDITOR: HG: --
691 EDITOR: HG: user: test
691 EDITOR: HG: user: test
692 EDITOR: HG: branch 'default'
692 EDITOR: HG: branch 'default'
693 EDITOR: HG: changed bar
693 EDITOR: HG: changed bar
694 created new head
694 created new head
695 diff --git a/foo b/foo
695 diff --git a/foo b/foo
696 2 hunks, 2 lines changed
696 2 hunks, 2 lines changed
697 examine changes to 'foo'? [Ynesfdaq?] f
697 examine changes to 'foo'? [Ynesfdaq?] f
698
698
699 EDITOR: HG: Splitting 904c80b40a4a. So far it has been split into:
699 EDITOR: HG: Splitting 904c80b40a4a. So far it has been split into:
700 EDITOR: HG: - ffecf40fa954: split 1
700 EDITOR: HG: - ffecf40fa954: split 1
701 EDITOR: HG: Write commit message for the next split changeset.
701 EDITOR: HG: Write commit message for the next split changeset.
702 EDITOR: splitme
702 EDITOR: splitme
703 EDITOR:
703 EDITOR:
704 EDITOR:
704 EDITOR:
705 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
705 EDITOR: HG: Enter commit message. Lines beginning with 'HG:' are removed.
706 EDITOR: HG: Leave message empty to abort commit.
706 EDITOR: HG: Leave message empty to abort commit.
707 EDITOR: HG: --
707 EDITOR: HG: --
708 EDITOR: HG: user: test
708 EDITOR: HG: user: test
709 EDITOR: HG: branch 'default'
709 EDITOR: HG: branch 'default'
710 EDITOR: HG: changed foo
710 EDITOR: HG: changed foo
711 saved backup bundle to $TESTTMP/f/b/.hg/strip-backup/904c80b40a4a-47fb907f-split.hg (obsstore-off !)
711 saved backup bundle to $TESTTMP/f/b/.hg/strip-backup/904c80b40a4a-47fb907f-split.hg (obsstore-off !)
712
712
713
713
714 Testing the case in split when commiting flag-only file changes (issue5864)
714 Testing the case in split when commiting flag-only file changes (issue5864)
715 ---------------------------------------------------------------------------
715 ---------------------------------------------------------------------------
716 $ hg init $TESTTMP/issue5864
716 $ hg init $TESTTMP/issue5864
717 $ cd $TESTTMP/issue5864
717 $ cd $TESTTMP/issue5864
718 $ echo foo > foo
718 $ echo foo > foo
719 $ hg add foo
719 $ hg add foo
720 $ hg ci -m "initial"
720 $ hg ci -m "initial"
721 $ chmod +x foo
721 $ hg import -q --bypass -m "make executable" - <<EOF
722 $ hg ci -m "make executable"
722 > diff --git a/foo b/foo
723 > old mode 100644
724 > new mode 100755
725 > EOF
726 $ hg up -q
723
727
724 $ hg glog
728 $ hg glog
725 @ 1:3a2125f0f4cb make executable
729 @ 1:3a2125f0f4cb make executable
726 |
730 |
727 o 0:51f273a58d82 initial
731 o 0:51f273a58d82 initial
728
732
729
733
734 #if no-windows
730 $ printf 'y\ny\ny\n' | hg split
735 $ printf 'y\ny\ny\n' | hg split
731 diff --git a/foo b/foo
736 diff --git a/foo b/foo
732 old mode 100644
737 old mode 100644
733 new mode 100755
738 new mode 100755
734 examine changes to 'foo'? [Ynesfdaq?] y
739 examine changes to 'foo'? [Ynesfdaq?] y
735
740
736 no changes to record
741 no changes to record
737 diff --git a/foo b/foo
742 diff --git a/foo b/foo
738 old mode 100644
743 old mode 100644
739 new mode 100755
744 new mode 100755
740 examine changes to 'foo'? [Ynesfdaq?] y
745 examine changes to 'foo'? [Ynesfdaq?] y
741
746
742 no changes to record
747 no changes to record
743 diff --git a/foo b/foo
748 diff --git a/foo b/foo
744 old mode 100644
749 old mode 100644
745 new mode 100755
750 new mode 100755
746 examine changes to 'foo'? [Ynesfdaq?] y
751 examine changes to 'foo'? [Ynesfdaq?] y
747
752
748 no changes to record
753 no changes to record
749 diff --git a/foo b/foo
754 diff --git a/foo b/foo
750 old mode 100644
755 old mode 100644
751 new mode 100755
756 new mode 100755
752 examine changes to 'foo'? [Ynesfdaq?] abort: response expected
757 examine changes to 'foo'? [Ynesfdaq?] abort: response expected
753 [255]
758 [255]
759 #else
760
761 TODO: Fix this on Windows. See issue 2020 and 5883
762
763 $ printf 'y\ny\ny\n' | hg split
764 abort: cannot split an empty revision
765 [255]
766 #endif
General Comments 0
You need to be logged in to leave comments. Login now