test-symlinks.t
137 lines
| 2.5 KiB
| text/troff
|
Tads3Lexer
/ tests / test-symlinks.t
Nicolas Dumazet
|
r11798 | Test bug regarding symlinks that showed up in hg 0.7 | ||
Author: Matthew Elder <sseses@gmail.com> | ||||
$ "$TESTDIR/hghave" symlink || exit 80 | ||||
make and initialize repo | ||||
$ hg init test; cd test; | ||||
make a file and a symlink | ||||
$ touch foo; ln -s foo bar; | ||||
import with addremove -- symlink walking should _not_ screwup. | ||||
$ hg addremove | ||||
adding bar | ||||
adding foo | ||||
commit -- the symlink should _not_ appear added to dir state | ||||
$ hg commit -m 'initial' | ||||
add a new file so hg will let me commit again | ||||
$ touch bomb | ||||
again, symlink should _not_ show up on dir state | ||||
$ hg addremove | ||||
adding bomb | ||||
Assert screamed here before, should go by without consequence | ||||
$ hg commit -m 'is there a bug?' | ||||
$ cd .. ; rm -r test | ||||
$ hg init test; cd test; | ||||
$ mkdir dir | ||||
$ touch a.c dir/a.o dir/b.o | ||||
test what happens if we want to trick hg | ||||
$ hg commit -A -m 0 | ||||
adding a.c | ||||
adding dir/a.o | ||||
adding dir/b.o | ||||
$ echo "relglob:*.o" > .hgignore | ||||
$ rm a.c | ||||
$ rm dir/a.o | ||||
$ rm dir/b.o | ||||
$ mkdir dir/a.o | ||||
$ ln -s nonexist dir/b.o | ||||
$ mkfifo a.c | ||||
it should show a.c, dir/a.o and dir/b.o deleted | ||||
$ hg status | ||||
M dir/b.o | ||||
! a.c | ||||
! dir/a.o | ||||
? .hgignore | ||||
$ hg status a.c | ||||
a.c: unsupported file type (type is fifo) | ||||
! a.c | ||||
test absolute path through symlink outside repo | ||||
$ cd .. | ||||
$ p=`pwd` | ||||
$ hg init x | ||||
$ ln -s x y | ||||
$ cd x | ||||
$ touch f | ||||
$ hg add f | ||||
$ hg status "$p"/y/f | ||||
A f | ||||
try symlink outside repo to file inside | ||||
$ ln -s x/f ../z | ||||
this should fail | ||||
$ hg status ../z && { echo hg mistakenly exited with status 0; exit 1; } || : | ||||
abort: ../z not under root | ||||
$ cd .. ; rm -r test | ||||
$ hg init test; cd test; | ||||
try cloning symlink in a subdir | ||||
1. commit a symlink | ||||
$ mkdir -p a/b/c | ||||
$ cd a/b/c | ||||
$ ln -s /path/to/symlink/source demo | ||||
$ cd ../../.. | ||||
$ hg stat | ||||
? a/b/c/demo | ||||
$ hg commit -A -m 'add symlink in a/b/c subdir' | ||||
adding a/b/c/demo | ||||
2. clone it | ||||
$ cd .. | ||||
$ hg clone test testclone | ||||
updating to branch default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
git symlink diff | ||||
$ cd testclone | ||||
$ hg diff --git -r null:tip | ||||
diff --git a/a/b/c/demo b/a/b/c/demo | ||||
new file mode 120000 | ||||
--- /dev/null | ||||
+++ b/a/b/c/demo | ||||
@@ -0,0 +1,1 @@ | ||||
+/path/to/symlink/source | ||||
\ No newline at end of file | ||||
$ hg export --git tip > ../sl.diff | ||||
import git symlink diff | ||||
$ hg rm a/b/c/demo | ||||
$ hg commit -m'remove link' | ||||
$ hg import ../sl.diff | ||||
applying ../sl.diff | ||||
$ hg diff --git -r 1:tip | ||||
diff --git a/a/b/c/demo b/a/b/c/demo | ||||
new file mode 120000 | ||||
--- /dev/null | ||||
+++ b/a/b/c/demo | ||||
@@ -0,0 +1,1 @@ | ||||
+/path/to/symlink/source | ||||
\ No newline at end of file | ||||