##// END OF EJS Templates
tests: better test coverage of merges of flags...
tests: better test coverage of merges of flags This makes existing problems with merges of symlinks and files more obvious and add test coverage for tricky merges without real common ancestors.

File last commit:

r18337:557c8522 default
r18337:557c8522 default
Show More
test-merge-types.t
331 lines | 7.7 KiB | text/troff | Tads3Lexer
/ tests / test-merge-types.t
Mads Kiilerich
tests: use 'hghave execbit' for tests that manipulate x bit in file system
r15442 $ "$TESTDIR/hghave" symlink execbit || exit 80
Mads Kiilerich
tests: use 'hghave symlink' for tests using symlinks
r15441
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 $ tellmeabout() {
> if [ -h $1 ]; then
> echo $1 is a symlink:
> $TESTDIR/readlink.py $1
> elif [ -x $1 ]; then
> echo $1 is an executable file with content:
> cat $1
> else
> echo $1 is a plain file with content:
> cat $1
> fi
> }
$ hg init test1
$ cd test1
Adrian Buehlmann
combine tests
r12279
$ echo a > a
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 $ hg ci -Aqmadd
Adrian Buehlmann
combine tests
r12279 $ chmod +x a
$ hg ci -mexecutable
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 $ hg up -q 0
Adrian Buehlmann
combine tests
r12279 $ rm a
$ ln -s symlink a
$ hg ci -msymlink
created new head
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 Symlink is local parent, executable is other:
Adrian Buehlmann
combine tests
r12279 $ hg merge --debug
searching for copies back to rev 1
resolving manifests
Martin Geisler
merge: make debug output easier to read...
r15625 overwrite: False, partial: False
ancestor: c334dc3be0da, local: 521a1e40188f+, remote: 3574f3e69b1c
Adrian Buehlmann
combine tests
r12279 conflicting flags for a
(n)one, e(x)ec or sym(l)ink? n
a: update permissions -> e
updating: a 1/1 files (100.00%)
Mads Kiilerich
merge: changing the mode of a file is also an update...
r18334 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Adrian Buehlmann
combine tests
r12279 (branch merge, don't forget to commit)
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 $ tellmeabout a
a is a plain file with content:
symlink (no-eol)
Adrian Buehlmann
combine tests
r12279
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 Symlink is other parent, executable is local:
Adrian Buehlmann
combine tests
r12279
$ hg update -C 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg merge --debug
searching for copies back to rev 1
resolving manifests
Martin Geisler
merge: make debug output easier to read...
r15625 overwrite: False, partial: False
ancestor: c334dc3be0da, local: 3574f3e69b1c+, remote: 521a1e40188f
Adrian Buehlmann
combine tests
r12279 conflicting flags for a
(n)one, e(x)ec or sym(l)ink? n
a: remote is newer -> g
updating: a 1/1 files (100.00%)
getting a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 $ tellmeabout a
a is a plain file with content:
symlink (no-eol)
Adrian Buehlmann
combine tests
r12279
Matt Mackall
merge: handle linear update to symlink correctly (issue3316)...
r16255 Update to link without local change should get us a symlink (issue3316):
Mads Kiilerich
tests: fix test markup in test-merge-types.t...
r17110 $ hg up -C 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg st
Matt Mackall
merge: handle linear update to symlink correctly (issue3316)...
r16255
Update to link with local change should cause a merge prompt (issue3200):
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 $ hg up -Cq 0
Matt Mackall
merge: handle linear update to symlink correctly (issue3316)...
r16255 $ echo data > a
$ HGMERGE= hg up -y --debug
searching for copies back to rev 2
resolving manifests
overwrite: False, partial: False
ancestor: c334dc3be0da, local: c334dc3be0da+, remote: 521a1e40188f
a: versions differ -> m
preserving a for resolve of a
updating: a 1/1 files (100.00%)
Thomas Arendsen Hein
test-merge-types: allow different output with existing hgmerge (issue3346)...
r16355 (couldn't find merge tool hgmerge|tool hgmerge can't handle symlinks) (re)
Matt Mackall
merge: handle linear update to symlink correctly (issue3316)...
r16255 picked tool 'internal:prompt' for a (binary False symlink True)
no tool found to merge a
keep (l)ocal or take (o)ther? l
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
$ hg diff --git
diff --git a/a b/a
old mode 120000
new mode 100644
--- a/a
+++ b/a
@@ -1,1 +1,1 @@
-symlink
\ No newline at end of file
+data
Mads Kiilerich
tests: better test coverage of merges of flags...
r18337 Test only 'l' change - happens rarely, except when recovering from situations
where that was what happened.
$ hg init test2
$ cd test2
$ printf base > f
$ hg ci -Aqm0
$ echo file > f
$ echo content >> f
$ hg ci -qm1
$ hg up -qr0
$ rm f
$ ln -s base f
$ hg ci -qm2
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ tellmeabout f
f is a symlink:
f -> file
content
$ hg up -Cqr1
$ hg merge
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ tellmeabout f
f is a plain file with content:
file
content
$ cd ..
Test removed 'x' flag merged with change to symlink
$ hg init test3
$ cd test3
$ echo f > f
$ chmod +x f
$ hg ci -Aqm0
$ chmod -x f
$ hg ci -qm1
$ hg up -qr0
$ rm f
$ ln -s dangling f
$ hg ci -qm2
$ hg merge
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ tellmeabout f
f is a symlink:
f -> dangling
$ hg up -Cqr1
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ tellmeabout f
f is a symlink:
f -> dangling
$ cd ..
Test merge with no common ancestor:
a: just different
b: x vs -, different (cannot calculate x, cannot ask merge tool)
c: x vs -, same (cannot calculate x, merge tool is no good)
d: x vs l, different
e: x vs l, same
f: - vs l, different
g: - vs l, same
h: l vs l, different
(where same means the filelog entry is shared and there thus is an ancestor!)
$ hg init test4
$ cd test4
$ echo 0 > 0
$ hg ci -Aqm0
$ echo 1 > a
$ echo 1 > b
$ chmod +x b
$ echo x > c
$ chmod +x c
$ echo 1 > d
$ chmod +x d
$ printf x > e
$ chmod +x e
$ echo 1 > f
$ printf x > g
$ ln -s 1 h
$ hg ci -qAm1
$ hg up -qr0
$ echo 2 > a
$ echo 2 > b
$ echo x > c
$ ln -s 2 d
$ ln -s x e
$ ln -s 2 f
$ ln -s x g
$ ln -s 2 h
$ hg ci -Aqm2
$ hg merge
conflicting flags for e
(n)one, e(x)ec or sym(l)ink? n
conflicting flags for d
(n)one, e(x)ec or sym(l)ink? n
merging a
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
merging b
warning: conflicts during merge.
merging b incomplete! (edit conflicts, then use 'hg resolve --mark')
merging d
warning: internal:merge cannot merge symlinks for d
merging d incomplete! (edit conflicts, then use 'hg resolve --mark')
merging f
warning: internal:merge cannot merge symlinks for f
merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
merging h
warning: internal:merge cannot merge symlinks for h
merging h incomplete! (edit conflicts, then use 'hg resolve --mark')
2 files updated, 0 files merged, 0 files removed, 5 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
$ hg resolve -l
U a
U b
U d
U f
U h
$ tellmeabout a
a is a plain file with content:
<<<<<<< local
2
=======
1
>>>>>>> other
$ tellmeabout b
b is an executable file with content:
<<<<<<< local
2
=======
1
>>>>>>> other
$ tellmeabout c
c is an executable file with content:
x
$ tellmeabout d
d is a plain file with content:
2 (no-eol)
$ tellmeabout e
e is a plain file with content:
x (no-eol)
$ tellmeabout f
f is a symlink:
f -> 2
$ tellmeabout g
g is a symlink:
g -> x
$ tellmeabout h
h is a symlink:
h -> 2
$ hg up -Cqr1
$ hg merge
conflicting flags for e
(n)one, e(x)ec or sym(l)ink? n
conflicting flags for d
(n)one, e(x)ec or sym(l)ink? n
merging a
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
merging b
warning: conflicts during merge.
merging b incomplete! (edit conflicts, then use 'hg resolve --mark')
merging d
warning: internal:merge cannot merge symlinks for d
merging d incomplete! (edit conflicts, then use 'hg resolve --mark')
merging f
warning: internal:merge cannot merge symlinks for f
merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
merging h
warning: internal:merge cannot merge symlinks for h
merging h incomplete! (edit conflicts, then use 'hg resolve --mark')
1 files updated, 0 files merged, 0 files removed, 5 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
$ tellmeabout a
a is a plain file with content:
<<<<<<< local
1
=======
2
>>>>>>> other
$ tellmeabout b
b is an executable file with content:
<<<<<<< local
1
=======
2
>>>>>>> other
$ tellmeabout c
c is an executable file with content:
x
$ tellmeabout d
d is a plain file with content:
1
$ tellmeabout e
e is a plain file with content:
x (no-eol)
$ tellmeabout f
f is a plain file with content:
1
$ tellmeabout g
g is a plain file with content:
x (no-eol)
$ tellmeabout h
h is a symlink:
h -> 1
$ cd ..