Newer
Older

Katsunori FUJIWARA
committed
################################
test for branch merging
################################

Katsunori FUJIWARA
committed
test for rename awareness of case-folding collision check:

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
(1) colliding file is one renamed from collided file:
this is also case for issue3370.

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ hg init branch_merge_renaming
$ cd branch_merge_renaming

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ echo a > a
$ hg add a
$ echo b > b
$ hg add b

Katsunori FUJIWARA
committed
$ hg commit -m '#0'
$ hg tag -l A

Katsunori FUJIWARA
committed
$ hg rename a tmp
$ hg rename tmp A
$ hg commit -m '#1'
$ hg tag -l B

Katsunori FUJIWARA
committed
$ hg update -q 0
$ touch x
$ hg add x

Katsunori FUJIWARA
committed
$ hg commit -m '#2'

Katsunori FUJIWARA
committed
created new head
$ hg tag -l C

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ hg merge -q

Katsunori FUJIWARA
committed
$ hg status -A
M A
R a
C b

Katsunori FUJIWARA
committed
C x

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ hg update -q --clean 1
$ hg merge -q

Katsunori FUJIWARA
committed
$ hg status -A

Katsunori FUJIWARA
committed
M x
C A
C b
$ hg commit -m '(D)'
$ hg tag -l D
additional test for issue3452:
| this assumes the history below.
|
| (A) -- (C) -- (E) -------
| \ \ \
| \ \ \
| (B) -- (D) -- (F) -- (G)
|
| A: add file 'a'
| B: rename from 'a' to 'A'
| C: add 'x' (or operation other than modification of 'a')
| D: merge C into B
| E: modify 'a'
| F: modify 'A'
| G: merge E into F
|
| issue3452 occurs when (B) is recorded before (C)
$ hg update -q --clean C
$ echo "modify 'a' at (E)" > a
$ echo "modify 'b' at (E)" > b
$ hg commit -m '(E)'
created new head
$ hg tag -l E
$ hg update -q --clean D
$ echo "modify 'A' at (F)" > A
$ hg commit -m '(F)'
$ hg tag -l F
$ hg merge -q --tool internal:other E
$ hg status -A
M A
a
M b
C x
$ cat A
modify 'a' at (E)

Katsunori FUJIWARA
committed
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
test also the case that (B) is recorded after (C), to prevent
regression by changes in the future.
to avoid unexpected (successful) behavior by filelog unification,
target file is not 'a'/'A' but 'b'/'B' in this case.
$ hg update -q --clean A
$ hg rename b tmp
$ hg rename tmp B
$ hg commit -m '(B1)'
created new head
$ hg tag -l B1
$ hg merge -q C
$ hg status -A
M x
C B
C a
$ hg commit -m '(D1)'
$ hg tag -l D1
$ echo "modify 'B' at (F1)" > B
$ hg commit -m '(F1)'
$ hg tag -l F1
$ hg merge -q --tool internal:other E
$ hg status -A
M B
b
M a
C x
$ cat B
modify 'b' at (E)

Katsunori FUJIWARA
committed
$ cd ..
(2) colliding file is not related to collided file

Katsunori FUJIWARA
committed
$ hg init branch_merge_collding
$ cd branch_merge_collding

Katsunori FUJIWARA
committed
$ echo a > a
$ hg add a
$ hg commit -m '#0'
$ hg remove a
$ hg commit -m '#1'
$ echo A > A
$ hg add A
$ hg commit -m '#2'
$ hg update --clean 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

Katsunori FUJIWARA
committed
$ echo x > x
$ hg add x

Katsunori FUJIWARA
committed
$ hg commit -m '#3'
created new head

Katsunori FUJIWARA
committed
$ echo 'modified at #4' > a
$ hg commit -m '#4'

Katsunori FUJIWARA
committed
$ hg merge
abort: case-folding collision between [aA] and [Aa] (re)

Katsunori FUJIWARA
committed
[255]

Katsunori FUJIWARA
committed
$ hg parents --template '{rev}\n'

Katsunori FUJIWARA
committed
4

Katsunori FUJIWARA
committed
$ hg status -A
C a

Katsunori FUJIWARA
committed
C x

Katsunori FUJIWARA
committed
$ cat a

Katsunori FUJIWARA
committed
modified at #4

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ hg update --clean 2

Katsunori FUJIWARA
committed
1 files updated, 0 files merged, 2 files removed, 0 files unresolved

Katsunori FUJIWARA
committed
$ hg merge
abort: case-folding collision between [aA] and [Aa] (re)

Katsunori FUJIWARA
committed
[255]

Katsunori FUJIWARA
committed
$ hg parents --template '{rev}\n'
2

Katsunori FUJIWARA
committed
$ hg status -A
C A
$ cat A
A

Katsunori FUJIWARA
committed
test for deletion awareness of case-folding collision check (issue3648):
revision '#3' doesn't change 'a', so 'a' should be recognized as
safely removed in merging between #2 and #3.
$ hg update --clean 3
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge 2
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status -A
M A
R a
C x
$ hg update --clean 2
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge 3
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status -A
M x
C A

Katsunori FUJIWARA
committed
$ cd ..
Prepare for tests of directory case-folding collisions
$ hg init directory-casing
$ cd directory-casing
$ touch 0 # test: file without directory
$ mkdir 0a
$ touch 0a/f
$ mkdir aA
$ touch aA/a
$ hg ci -Aqm0
Directory/file case-folding collision:
$ hg up -q null
$ touch 00 # test: starts as '0'
$ mkdir 000 # test: starts as '0'
$ touch 000/f
$ touch Aa # test: collision with 'aA/a'
$ hg ci -Aqm1
$ hg merge 0
abort: case-folding collision between Aa and directory of aA/a
[255]
(note: no collision between 0 and 00 or 000/f)
Directory case-folding collision:
$ hg up -qC null
$ hg --config extensions.purge= purge
$ mkdir 0A0
$ touch 0A0/f # test: starts as '0a'
$ mkdir Aa
$ touch Aa/b # test: collision with 'aA/a'
$ hg ci -Aqm2
$ hg merge 0
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cd ..

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
################################
test for linear updates
################################

Katsunori FUJIWARA
committed
test for rename awareness of case-folding collision check:

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
(1) colliding file is one renamed from collided file
$ hg init linearupdate_renameaware_1
$ cd linearupdate_renameaware_1

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ echo a > a
$ hg add a
$ hg commit -m '#0'
$ hg rename a tmp
$ hg rename tmp A
$ hg commit -m '#1'

Katsunori FUJIWARA
committed
$ hg update 0

Katsunori FUJIWARA
committed
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

Katsunori FUJIWARA
committed

Katsunori FUJIWARA
committed
$ echo 'this is added line' >> a

Katsunori FUJIWARA
committed
$ hg update 1
merging a and A to A
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
$ hg status -A
M A
$ cat A

Katsunori FUJIWARA
committed
a

Katsunori FUJIWARA
committed
this is added line

Katsunori FUJIWARA
committed
$ cd ..
(2) colliding file is not related to collided file
$ hg init linearupdate_renameaware_2
$ cd linearupdate_renameaware_2
$ echo a > a
$ hg add a
$ hg commit -m '#0'
$ hg remove a
$ hg commit -m '#1'
$ echo A > A
$ hg add A
$ hg commit -m '#2'
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

Katsunori FUJIWARA
committed
$ hg parents --template '{rev}\n'

Katsunori FUJIWARA
committed
$ hg status -A

Katsunori FUJIWARA
committed
$ cat A
a
$ hg up -qC 2

Katsunori FUJIWARA
committed
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
$ hg update --check 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg parents --template '{rev}\n'
0
$ hg status -A
C a
$ cat a
a
$ hg update --clean 2
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg parents --template '{rev}\n'
2
$ hg status -A
C A
$ cat A
A
$ cd ..
(3) colliding file is not related to collided file: added in working dir
$ hg init linearupdate_renameaware_3
$ cd linearupdate_renameaware_3
$ echo a > a
$ hg add a
$ hg commit -m '#0'
$ hg rename a b
$ hg commit -m '#1'
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo B > B
$ hg add B
$ hg status
A B
$ hg update
abort: case-folding collision between [bB] and [Bb] (re)

Katsunori FUJIWARA
committed
[255]
$ hg update --check
abort: uncommitted changes

Katsunori FUJIWARA
committed
$ hg update --clean
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg parents --template '{rev}\n'
1
$ hg status -A
C b
$ cat b
a
$ cd ..