79e355e6d82e7b75794c6421c81ddcc6ab012e21
[platform/upstream/coreutils.git] / tests / cp / link-preserve
1 #!/bin/sh
2 # ensure that `cp -d' preserves hard-links between command line arguments
3 # ensure that --preserve=links works with -RH and -RL
4
5 if test "$VERBOSE" = yes; then
6   set -x
7   cp --version
8 fi
9
10 . $srcdir/../envvar-check
11 . $srcdir/../lang-default
12
13 pwd=`pwd`
14 tmp=lp.$$
15 trap 'status=$?; cd $pwd; rm -rf $tmp && exit $status' 0
16 trap '(exit $?); exit' 1 2 13 15
17
18 framework_failure=0
19 mkdir $tmp || framework_failure=1
20 cd $tmp || framework_failure=1
21 touch a || framework_failure=1
22 ln a b || framework_failure=1
23 mkdir c || framework_failure=1
24 cp -d a b c || framework_failure=1
25 test -f c/a || framework_failure=1
26 test -f c/b || framework_failure=1
27
28 if test $framework_failure = 1; then
29   echo 'failure in testing framework' 1>&2
30   (exit 1); exit
31 fi
32
33 fail=0
34
35 a_inode=`ls -i c/a|sed 's,c/.*,,'`
36 b_inode=`ls -i c/b|sed 's,c/.*,,'`
37 test "$a_inode" = "$b_inode" || fail=1
38 # --------------------------------------
39
40 rm -rf a b c
41 touch a
42 ln -s a b
43 mkdir c
44 cp --preserve=links -R -H a b c
45 a_inode=`ls -i c/a|sed 's,c/.*,,'`
46 b_inode=`ls -i c/b|sed 's,c/.*,,'`
47 test "$a_inode" = "$b_inode" || fail=1
48 # --------------------------------------
49
50 rm -rf a b c d
51 mkdir d
52 (cd d; touch a; ln -s a b)
53 cp --preserve=links -R -L d c
54 a_inode=`ls -i c/a|sed 's,c/.*,,'`
55 b_inode=`ls -i c/b|sed 's,c/.*,,'`
56 test "$a_inode" = "$b_inode" || fail=1
57 # --------------------------------------
58
59 # Ensure that --no-preserve=links works.
60 rm -rf a b c d
61 mkdir d
62 (cd d; touch a; ln a b)
63 cp -dR --no-preserve=links d c
64 a_inode=`ls -i c/a|sed 's,c/.*,,'`
65 b_inode=`ls -i c/b|sed 's,c/.*,,'`
66 test "$a_inode" = "$b_inode" && fail=1
67 # --------------------------------------
68
69 # Ensure that -d still preserves hard links.
70 rm -rf a b c d
71 touch a; ln a b
72 mkdir c
73 cp -d a b c
74 a_inode=`ls -i c/a|sed 's,c/.*,,'`
75 b_inode=`ls -i c/b|sed 's,c/.*,,'`
76 test "$a_inode" = "$b_inode" || fail=1
77 # --------------------------------------
78
79 # Ensure that --no-preserve=mode works
80 rm -rf a b c d
81 touch a; chmod 731 a
82 umask 077
83 cp -a --no-preserve=mode a b
84 set _ `ls -l b`; shift; mode=$1
85 test "$mode" = "-rwx------" || fail=1
86 umask 022
87 # --------------------------------------
88
89 (exit $fail); exit