tests/test-symlinks.t
changeset 11798 1ab3d8977bdf
parent 10775 c52057614c72
child 11812 6f12f53ae795
equal deleted inserted replaced
11797:66e4e8e8b1e5 11798:1ab3d8977bdf
       
     1 Test bug regarding symlinks that showed up in hg 0.7
       
     2 Author: Matthew Elder <sseses@gmail.com>
       
     3 
       
     4   $ "$TESTDIR/hghave" symlink || exit 80
       
     5 
       
     6 make and initialize repo
       
     7 
       
     8   $ hg init test; cd test;
       
     9 
       
    10 make a file and a symlink
       
    11 
       
    12   $ touch foo; ln -s foo bar;
       
    13 
       
    14 import with addremove -- symlink walking should _not_ screwup.
       
    15 
       
    16   $ hg addremove
       
    17   adding bar
       
    18   adding foo
       
    19 
       
    20 commit -- the symlink should _not_ appear added to dir state
       
    21 
       
    22   $ hg commit -m 'initial'
       
    23 
       
    24 add a new file so hg will let me commit again
       
    25 
       
    26   $ touch bomb
       
    27 
       
    28 again, symlink should _not_ show up on dir state
       
    29 
       
    30   $ hg addremove
       
    31   adding bomb
       
    32 
       
    33 Assert screamed here before, should go by without consequence
       
    34 
       
    35   $ hg commit -m 'is there a bug?'
       
    36 
       
    37   $ cd .. ; rm -r test
       
    38   $ hg init test; cd test;
       
    39 
       
    40   $ mkdir dir
       
    41   $ touch a.c dir/a.o dir/b.o
       
    42 
       
    43 test what happens if we want to trick hg
       
    44 
       
    45   $ hg commit -A -m 0
       
    46   adding a.c
       
    47   adding dir/a.o
       
    48   adding dir/b.o
       
    49   $ echo "relglob:*.o" > .hgignore
       
    50   $ rm a.c
       
    51   $ rm dir/a.o
       
    52   $ rm dir/b.o
       
    53   $ mkdir dir/a.o
       
    54   $ ln -s nonexist dir/b.o
       
    55   $ mkfifo a.c
       
    56 
       
    57 it should show a.c, dir/a.o and dir/b.o deleted
       
    58 
       
    59   $ hg status
       
    60   M dir/b.o
       
    61   ! a.c
       
    62   ! dir/a.o
       
    63   ? .hgignore
       
    64   $ hg status a.c
       
    65   a.c: unsupported file type (type is fifo)
       
    66   ! a.c
       
    67 
       
    68 test absolute path through symlink outside repo
       
    69 
       
    70   $ cd ..
       
    71   $ p=`pwd`
       
    72   $ hg init x
       
    73   $ ln -s x y
       
    74   $ cd x
       
    75   $ touch f
       
    76   $ hg add f
       
    77   $ hg status "$p"/y/f
       
    78   A f
       
    79 
       
    80 try symlink outside repo to file inside
       
    81 
       
    82   $ ln -s x/f ../z
       
    83 
       
    84 this should fail
       
    85 
       
    86   $ hg status ../z && { echo hg mistakenly exited with status 0; exit 1; } || :
       
    87   abort: ../z not under root
       
    88 
       
    89   $ cd .. ; rm -r test
       
    90   $ hg init test; cd test;
       
    91 
       
    92 try cloning symlink in a subdir
       
    93 1. commit a symlink
       
    94 
       
    95   $ mkdir -p a/b/c
       
    96   $ cd a/b/c
       
    97   $ ln -s /path/to/symlink/source demo
       
    98   $ cd ../../..
       
    99   $ hg stat
       
   100   ? a/b/c/demo
       
   101   $ hg commit -A -m 'add symlink in a/b/c subdir'
       
   102   adding a/b/c/demo
       
   103 
       
   104 2. clone it
       
   105 
       
   106   $ cd ..
       
   107   $ hg clone test testclone
       
   108   updating to branch default
       
   109   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   110 
       
   111 git symlink diff
       
   112 
       
   113   $ cd testclone
       
   114   $ hg diff --git -r null:tip
       
   115   diff --git a/a/b/c/demo b/a/b/c/demo
       
   116   new file mode 120000
       
   117   --- /dev/null
       
   118   +++ b/a/b/c/demo
       
   119   @@ -0,0 +1,1 @@
       
   120   +/path/to/symlink/source
       
   121   \ No newline at end of file
       
   122   $ hg export --git tip > ../sl.diff
       
   123 
       
   124 import git symlink diff
       
   125 
       
   126   $ hg rm a/b/c/demo
       
   127   $ hg commit -m'remove link'
       
   128   $ hg import ../sl.diff
       
   129   applying ../sl.diff
       
   130   $ hg diff --git -r 1:tip
       
   131   diff --git a/a/b/c/demo b/a/b/c/demo
       
   132   new file mode 120000
       
   133   --- /dev/null
       
   134   +++ b/a/b/c/demo
       
   135   @@ -0,0 +1,1 @@
       
   136   +/path/to/symlink/source
       
   137   \ No newline at end of file