tests: adjust memory limits in head-c.sh
[coreutils.git] / tests / cp / preserve-link.sh
blob0dafdb6c0b2ea6d5b1cdae14b5528aa3adebed84
1 #!/bin/sh
2 # Exercise the fix for http://debbugs.gnu.org/8419
4 # Copyright (C) 2011-2016 Free Software Foundation, Inc.
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
20 print_ver_ cp
22 same_inode()
24 local u v
25 u=$(stat --format %i "$1") &&
26 v=$(stat --format %i "$2") && test "$u" = "$v"
29 create_source_tree()
31 rm -Rf s
32 mkdir s || framework_failure_
34 # a missing link in dest will be created
35 touch s/f || framework_failure_
36 ln s/f s/linkm || framework_failure_
38 # an existing link in dest will be maintained
39 ln s/f s/linke || framework_failure_
41 # a separate older file in dest will be overwritten
42 ln s/f s/fileo || framework_failure_
44 # a separate newer file in dest will be overwritten!
45 ln s/f s/fileu || framework_failure_
48 create_target_tree()
50 f=$1 # which of f or linkm to create in t/
52 rm -Rf t
53 mkdir -p t/s/ || framework_failure_
55 # a missing link in dest must be created
56 touch t/s/$f || framework_failure_
58 # an existing link must be maintained
59 ln t/s/$f t/s/linke || framework_failure_
61 # a separate older file in dest will be overwritten
62 touch -d '-1 hour' t/s/fileo || framework_failure_
64 # a separate newer file in dest will be overwritten!
65 touch -d '+1 hour' t/s/fileu || framework_failure_
69 # Note we repeat this, creating either one of
70 # two hard linked files from source in the dest, so as to
71 # test both paths in $(cp) for creating the hard links.
72 # The path taken by cp is dependent on which cp encounters
73 # first in the source, which is non deterministic currently
74 # (I'm guessing that results are sorted by inode and
75 # beauses they're the same here, and due to the sort
76 # being unstable, either can be processed first).
77 create_source_tree
79 for f in f linkm; do
80 create_target_tree $f
82 # Copy all the hard links across. With cp from coreutils-8.12
83 # and prior, it would sometimes mistakenly copy rather than link.
84 cp -au s t || fail=1
86 same_inode t/s/f t/s/linkm || fail=1
87 same_inode t/s/f t/s/linke || fail=1
88 same_inode t/s/f t/s/fileo || fail=1
89 same_inode t/s/f t/s/fileu || fail=1
90 done
92 Exit $fail