mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
989ebc4f0d
In cbefa73a359814e6784a63f90b78c7afd39bc7d5, I introduced a new bug: when a symlink points to a folder in commit A and to another folder in commit B, while updating from A to B, Mercurial will try to use removedir on this symlink, which will fail. This is a very bad bug, since it basically renders symlinks to folders unusable in repos. Added test case fails without a fix and passes with it.
75 lines
1.9 KiB
Perl
75 lines
1.9 KiB
Perl
Test update logic when there are renames or weird same-name cases between dirs
|
|
and files
|
|
|
|
Update with local changes across a file rename
|
|
|
|
$ hg init r1 && cd r1
|
|
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg ci -m a
|
|
|
|
$ hg mv a b
|
|
$ hg ci -m rename
|
|
|
|
$ echo b > b
|
|
$ hg ci -m change
|
|
|
|
$ hg up -q 0
|
|
|
|
$ echo c > a
|
|
|
|
$ hg up
|
|
merging a and b to b
|
|
warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
|
|
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
|
|
use 'hg resolve' to retry unresolved file merges
|
|
[1]
|
|
|
|
Test update when local untracked directory exists with the same name as a
|
|
tracked file in a commit we are updating to
|
|
$ hg init r2 && cd r2
|
|
$ echo root > root && hg ci -Am root # rev 0
|
|
adding root
|
|
$ echo text > name && hg ci -Am "name is a file" # rev 1
|
|
adding name
|
|
$ hg up 0
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ mkdir name
|
|
$ hg up 1
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
Test update when local untracked directory exists with some files in it and has
|
|
the same name a tracked file in a commit we are updating to. In future this
|
|
should be updated to give an friendlier error message, but now we should just
|
|
make sure that this does not erase untracked data
|
|
$ hg up 0
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ mkdir name
|
|
$ echo text > name/file
|
|
$ hg st
|
|
? name/file
|
|
$ hg up 1
|
|
abort: *: '$TESTTMP/r1/r2/name' (glob)
|
|
[255]
|
|
$ cd ..
|
|
|
|
#if symlink
|
|
|
|
Test update when two commits have symlinks that point to different folders
|
|
$ hg init r3 && cd r3
|
|
$ echo root > root && hg ci -Am root
|
|
adding root
|
|
$ mkdir folder1 && mkdir folder2
|
|
$ ln -s folder1 folder
|
|
$ hg ci -Am "symlink to folder1"
|
|
adding folder
|
|
$ rm folder
|
|
$ ln -s folder2 folder
|
|
$ hg ci -Am "symlink to folder2"
|
|
$ hg up 1
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ cd ..
|
|
|
|
#endif
|