1d14afb2aSJulio Merino#!/bin/sh 2d14afb2aSJulio Merino# 3*179fa75eSJohn Baldwin# Copyright (c) 2010 Hudson River Trading LLC 4d14afb2aSJulio Merino# Written by: John H. Baldwin <jhb@FreeBSD.org> 5d14afb2aSJulio Merino# All rights reserved. 6d14afb2aSJulio Merino# 7d14afb2aSJulio Merino# Redistribution and use in source and binary forms, with or without 8d14afb2aSJulio Merino# modification, are permitted provided that the following conditions 9d14afb2aSJulio Merino# are met: 10d14afb2aSJulio Merino# 1. Redistributions of source code must retain the above copyright 11d14afb2aSJulio Merino# notice, this list of conditions and the following disclaimer. 12d14afb2aSJulio Merino# 2. Redistributions in binary form must reproduce the above copyright 13d14afb2aSJulio Merino# notice, this list of conditions and the following disclaimer in the 14d14afb2aSJulio Merino# documentation and/or other materials provided with the distribution. 15d14afb2aSJulio Merino# 16d14afb2aSJulio Merino# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17d14afb2aSJulio Merino# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18d14afb2aSJulio Merino# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19d14afb2aSJulio Merino# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20d14afb2aSJulio Merino# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21d14afb2aSJulio Merino# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22d14afb2aSJulio Merino# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23d14afb2aSJulio Merino# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24d14afb2aSJulio Merino# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25d14afb2aSJulio Merino# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26d14afb2aSJulio Merino# SUCH DAMAGE. 27d14afb2aSJulio Merino# 28d14afb2aSJulio Merino 29d14afb2aSJulio Merino# Various regression tests to test the -A flag to the 'update' command. 30d14afb2aSJulio Merino 31d14afb2aSJulio MerinoFAILED=no 32d14afb2aSJulio MerinoWORKDIR=work 33d14afb2aSJulio Merino 34d14afb2aSJulio Merinousage() 35d14afb2aSJulio Merino{ 36d14afb2aSJulio Merino echo "Usage: always.sh [-s script] [-w workdir]" 37d14afb2aSJulio Merino exit 1 38d14afb2aSJulio Merino} 39d14afb2aSJulio Merino 40d14afb2aSJulio Merino# Allow the user to specify an alternate work directory or script. 41d14afb2aSJulio MerinoCOMMAND=etcupdate 42d14afb2aSJulio Merinowhile getopts "s:w:" option; do 43d14afb2aSJulio Merino case $option in 44d14afb2aSJulio Merino s) 45d14afb2aSJulio Merino COMMAND="sh $OPTARG" 46d14afb2aSJulio Merino ;; 47d14afb2aSJulio Merino w) 48d14afb2aSJulio Merino WORKDIR=$OPTARG 49d14afb2aSJulio Merino ;; 50d14afb2aSJulio Merino *) 51d14afb2aSJulio Merino echo 52d14afb2aSJulio Merino usage 53d14afb2aSJulio Merino ;; 54d14afb2aSJulio Merino esac 55d14afb2aSJulio Merinodone 56d14afb2aSJulio Merinoshift $((OPTIND - 1)) 57d14afb2aSJulio Merinoif [ $# -ne 0 ]; then 58d14afb2aSJulio Merino usage 59d14afb2aSJulio Merinofi 60d14afb2aSJulio Merino 61d14afb2aSJulio MerinoCONFLICTS=$WORKDIR/conflicts 62d14afb2aSJulio MerinoOLD=$WORKDIR/old 63d14afb2aSJulio MerinoNEW=$WORKDIR/current 64d14afb2aSJulio MerinoTEST=$WORKDIR/test 65d14afb2aSJulio Merino 66d14afb2aSJulio Merino# The various states of the comparison of a file between two trees. 67d14afb2aSJulio Merinostates="equal first second difftype difflinks difffiles" 68d14afb2aSJulio Merino 69d14afb2aSJulio Merino# These tests deal with ignoring certain patterns of files. We run 70d14afb2aSJulio Merino# the test multiple times forcing the install of different patterns. 71d14afb2aSJulio Merinobuild_trees() 72d14afb2aSJulio Merino{ 73d14afb2aSJulio Merino local i 74d14afb2aSJulio Merino 75d14afb2aSJulio Merino rm -rf $OLD $NEW $TEST $CONFLICTS 76d14afb2aSJulio Merino 77d14afb2aSJulio Merino for i in $states; do 78d14afb2aSJulio Merino for j in $states; do 79d14afb2aSJulio Merino for k in $states; do 80d14afb2aSJulio Merino mkdir -p $OLD/$i/$j/$k $NEW/$i/$j/$k \ 81d14afb2aSJulio Merino $TEST/$i/$j/$k 82d14afb2aSJulio Merino done 83d14afb2aSJulio Merino done 84d14afb2aSJulio Merino done 85d14afb2aSJulio Merino 86d14afb2aSJulio Merino # What follows are the various warning/conflict cases from the 87d14afb2aSJulio Merino # larger regression tests. These results of many of these 88d14afb2aSJulio Merino # tests should be changed when installation is forced. The 89d14afb2aSJulio Merino # cases when these updates should still fail even when forced 90d14afb2aSJulio Merino # are: 1) it should not force the removal of a modified file 91d14afb2aSJulio Merino # and 2) it should not remove a subdirectory that contains a 92d14afb2aSJulio Merino # modified or added file. 93d14afb2aSJulio Merino 94d14afb2aSJulio Merino # /first/difftype/second: File with different local type 95d14afb2aSJulio Merino # removed. Should generate a warning. 96d14afb2aSJulio Merino mkfifo $OLD/first/difftype/second/fifo 97d14afb2aSJulio Merino mkdir $TEST/first/difftype/second/fifo 98d14afb2aSJulio Merino 99d14afb2aSJulio Merino # /first/difflinks/second: Modified link removed. Should 100d14afb2aSJulio Merino # generate a warning. 101d14afb2aSJulio Merino ln -s "old link" $OLD/first/difflinks/second/link 102d14afb2aSJulio Merino ln -s "test link" $TEST/first/difflinks/second/link 103d14afb2aSJulio Merino 104d14afb2aSJulio Merino # /first/difffiles/second: Modified file removed. Should 105d14afb2aSJulio Merino # generate a warning. 106d14afb2aSJulio Merino echo "foo" > $OLD/first/difffiles/second/file 107d14afb2aSJulio Merino echo "bar" > $TEST/first/difffiles/second/file 108d14afb2aSJulio Merino 109d14afb2aSJulio Merino # /second/second/difftype: Newly added file conflicts with 110d14afb2aSJulio Merino # existing file in test tree of a different type. Should 111d14afb2aSJulio Merino # generate a warning. 112d14afb2aSJulio Merino mkdir $NEW/second/second/difftype/dir 113d14afb2aSJulio Merino mkfifo $TEST/second/second/difftype/dir 114d14afb2aSJulio Merino 115d14afb2aSJulio Merino # /second/second/difflinks: Newly added link conflicts with 116d14afb2aSJulio Merino # existing link in test tree. Should generate a warning. 117d14afb2aSJulio Merino ln -s "new link" $NEW/second/second/difflinks/link 118d14afb2aSJulio Merino ln -s "test link" $TEST/second/second/difflinks/link 119d14afb2aSJulio Merino 120d14afb2aSJulio Merino # /second/second/difffiles: Newly added file conflicts with 121d14afb2aSJulio Merino # existing file in test tree. Should generate a warning. 122d14afb2aSJulio Merino echo "new" > $NEW/second/second/difffiles/file 123d14afb2aSJulio Merino echo "test" > $TEST/second/second/difffiles/file 124d14afb2aSJulio Merino 125d14afb2aSJulio Merino # /difftype/first/first: A removed file has changed type. 126d14afb2aSJulio Merino # This should generate a warning. 127d14afb2aSJulio Merino mkfifo $OLD/difftype/first/first/fifo 128d14afb2aSJulio Merino mkdir $NEW/difftype/first/first/fifo 129d14afb2aSJulio Merino 130d14afb2aSJulio Merino # /difftype/difftype/difftype: All three files (old, new, and 131d14afb2aSJulio Merino # test) are different types from each other. This should 132d14afb2aSJulio Merino # generate a warning. 133d14afb2aSJulio Merino mkfifo $OLD/difftype/difftype/difftype/one 134d14afb2aSJulio Merino mkdir $NEW/difftype/difftype/difftype/one 135d14afb2aSJulio Merino echo "foo" > $TEST/difftype/difftype/difftype/one 136d14afb2aSJulio Merino mkdir $OLD/difftype/difftype/difftype/two 137d14afb2aSJulio Merino echo "baz" > $NEW/difftype/difftype/difftype/two 138d14afb2aSJulio Merino ln -s "bar" $TEST/difftype/difftype/difftype/two 139d14afb2aSJulio Merino 140d14afb2aSJulio Merino # /difftype/difftype/difflinks: A file has changed from a 141d14afb2aSJulio Merino # non-link to a link in both the new and test trees, but the 142d14afb2aSJulio Merino # target of the new and test links differ. This should 143d14afb2aSJulio Merino # generate a new link conflict. 144d14afb2aSJulio Merino mkfifo $OLD/difftype/difftype/difflinks/link 145d14afb2aSJulio Merino ln -s "new" $NEW/difftype/difftype/difflinks/link 146d14afb2aSJulio Merino ln -s "test" $TEST/difftype/difftype/difflinks/link 147d14afb2aSJulio Merino 148d14afb2aSJulio Merino # /difftype/difftype/difffile: A file has changed from a 149d14afb2aSJulio Merino # non-regular file to a regular file in both the new and test 150d14afb2aSJulio Merino # trees, but the contents in the new and test files differ. 151d14afb2aSJulio Merino # This should generate a new file conflict. 152d14afb2aSJulio Merino ln -s "old" $OLD/difftype/difftype/difffiles/file 153d14afb2aSJulio Merino echo "foo" > $NEW/difftype/difftype/difffiles/file 154d14afb2aSJulio Merino echo "bar" > $TEST/difftype/difftype/difffiles/file 155d14afb2aSJulio Merino 156d14afb2aSJulio Merino # /difflinks/first/first: A modified link is missing in the 157d14afb2aSJulio Merino # test tree. This should generate a warning. 158d14afb2aSJulio Merino ln -s "old" $OLD/difflinks/first/first/link 159d14afb2aSJulio Merino ln -s "new" $NEW/difflinks/first/first/link 160d14afb2aSJulio Merino 161d14afb2aSJulio Merino # /difflinks/difftype/difftype: An updated link has been 162d14afb2aSJulio Merino # changed to a different file type in the test tree. This 163d14afb2aSJulio Merino # should generate a warning. 164d14afb2aSJulio Merino ln -s "old" $OLD/difflinks/difftype/difftype/link 165d14afb2aSJulio Merino ln -s "new" $NEW/difflinks/difftype/difftype/link 166d14afb2aSJulio Merino echo "test" > $TEST/difflinks/difftype/difftype/link 167d14afb2aSJulio Merino 168d14afb2aSJulio Merino # /difflinks/difflinks/difflinks: An updated link has been 169d14afb2aSJulio Merino # modified in the test tree and doesn't match either the old 170d14afb2aSJulio Merino # or new links. This should generate a warning. 171d14afb2aSJulio Merino ln -s "old" $OLD/difflinks/difflinks/difflinks/link 172d14afb2aSJulio Merino ln -s "new" $NEW/difflinks/difflinks/difflinks/link 173d14afb2aSJulio Merino ln -s "test" $TEST/difflinks/difflinks/difflinks/link 174d14afb2aSJulio Merino 175d14afb2aSJulio Merino # /difffiles/first/first: A removed file has been changed in 176d14afb2aSJulio Merino # the new tree. This should generate a warning. 177d14afb2aSJulio Merino echo "foo" > $OLD/difffiles/first/first/file 178d14afb2aSJulio Merino echo "bar" > $NEW/difffiles/first/first/file 179d14afb2aSJulio Merino 180d14afb2aSJulio Merino # /difffiles/difftype/difftype: An updated regular file has 181d14afb2aSJulio Merino # been changed to a different file type in the test tree. 182d14afb2aSJulio Merino # This should generate a warning. 183d14afb2aSJulio Merino echo "old" > $OLD/difffiles/difftype/difftype/file 184d14afb2aSJulio Merino echo "new" > $NEW/difffiles/difftype/difftype/file 185d14afb2aSJulio Merino mkfifo $TEST/difffiles/difftype/difftype/file 186d14afb2aSJulio Merino 187d14afb2aSJulio Merino # /difffiles/difffiles/difffiles: A modified regular file was 188d14afb2aSJulio Merino # updated in the new tree. The changes should be merged into 189d14afb2aSJulio Merino # to the new file if possible. If the merge fails, a conflict 190d14afb2aSJulio Merino # should be generated. For this test we just include the 191d14afb2aSJulio Merino # conflict case. 192d14afb2aSJulio Merino cat > $OLD/difffiles/difffiles/difffiles/conflict <<EOF 193d14afb2aSJulio Merinothis is an old file 194d14afb2aSJulio MerinoEOF 195d14afb2aSJulio Merino cat > $NEW/difffiles/difffiles/difffiles/conflict <<EOF 196d14afb2aSJulio Merinothis is a new file 197d14afb2aSJulio MerinoEOF 198d14afb2aSJulio Merino cat > $TEST/difffiles/difffiles/difffiles/conflict <<EOF 199d14afb2aSJulio Merinothis is a test file 200d14afb2aSJulio MerinoEOF 201d14afb2aSJulio Merino 202d14afb2aSJulio Merino ## Tests for adding directories 203d14afb2aSJulio Merino mkdir -p $OLD/adddir $NEW/adddir $TEST/adddir 204d14afb2aSJulio Merino 205d14afb2aSJulio Merino # /adddir/conflict: Add a new file in a directory that already 206d14afb2aSJulio Merino # exists as a file. This should generate two warnings. 207d14afb2aSJulio Merino mkdir $NEW/adddir/conflict 208d14afb2aSJulio Merino touch $NEW/adddir/conflict/newfile 209d14afb2aSJulio Merino touch $TEST/adddir/conflict 210d14afb2aSJulio Merino 211d14afb2aSJulio Merino ## Tests for removing directories 212d14afb2aSJulio Merino mkdir -p $OLD/rmdir $NEW/rmdir $TEST/rmdir 213d14afb2aSJulio Merino 214d14afb2aSJulio Merino # /rmdir/extra: Do not remove a directory with an extra local file. 215d14afb2aSJulio Merino # This should generate a warning. 216d14afb2aSJulio Merino for i in $OLD $TEST; do 217d14afb2aSJulio Merino mkdir $i/rmdir/extra 218d14afb2aSJulio Merino done 219d14afb2aSJulio Merino echo "foo" > $TEST/rmdir/extra/localfile.txt 220d14afb2aSJulio Merino 221d14afb2aSJulio Merino # /rmdir/conflict: Do not remove a directory with a conflicted 222d14afb2aSJulio Merino # remove file. This should generate a warning. 223d14afb2aSJulio Merino for i in $OLD $TEST; do 224d14afb2aSJulio Merino mkdir $i/rmdir/conflict 225d14afb2aSJulio Merino done 226d14afb2aSJulio Merino mkfifo $OLD/rmdir/conflict/difftype 227d14afb2aSJulio Merino mkdir $TEST/rmdir/conflict/difftype 228d14afb2aSJulio Merino 229d14afb2aSJulio Merino ## Tests for converting files to directories and vice versa 230d14afb2aSJulio Merino for i in $OLD $NEW $TEST; do 231d14afb2aSJulio Merino for j in already old fromdir todir; do 232d14afb2aSJulio Merino mkdir -p $i/dirchange/$j 233d14afb2aSJulio Merino done 234d14afb2aSJulio Merino done 235d14afb2aSJulio Merino 236d14afb2aSJulio Merino # /dirchange/fromdir/extradir: Convert a directory tree to a 237d14afb2aSJulio Merino # file. The test tree includes an extra file in the directory 238d14afb2aSJulio Merino # that is not present in the old tree. This should generate a 239d14afb2aSJulio Merino # warning. 240d14afb2aSJulio Merino for i in $OLD $TEST; do 241d14afb2aSJulio Merino mkdir $i/dirchange/fromdir/extradir 242d14afb2aSJulio Merino echo "foo" > $i/dirchange/fromdir/extradir/file 243d14afb2aSJulio Merino done 244d14afb2aSJulio Merino mkfifo $TEST/dirchange/fromdir/extradir/fifo 245d14afb2aSJulio Merino ln -s "bar" $NEW/dirchange/fromdir/extradir 246d14afb2aSJulio Merino 247d14afb2aSJulio Merino # /dirchange/fromdir/conflict: Convert a directory tree to a 248d14afb2aSJulio Merino # file. The test tree includes a local change that generates 249d14afb2aSJulio Merino # a warning and prevents the removal of the directory. 250d14afb2aSJulio Merino for i in $OLD $TEST; do 251d14afb2aSJulio Merino mkdir $i/dirchange/fromdir/conflict 252d14afb2aSJulio Merino done 253d14afb2aSJulio Merino echo "foo" > $OLD/dirchange/fromdir/conflict/somefile 254d14afb2aSJulio Merino echo "bar" > $TEST/dirchange/fromdir/conflict/somefile 255d14afb2aSJulio Merino mkfifo $NEW/dirchange/fromdir/conflict 256d14afb2aSJulio Merino 257d14afb2aSJulio Merino # /dirchange/todir/difffile: Convert a file to a directory 258d14afb2aSJulio Merino # tree. The test tree has a locally modified version of the 259d14afb2aSJulio Merino # file so that the conversion fails with a warning. 260d14afb2aSJulio Merino echo "foo" > $OLD/dirchange/todir/difffile 261d14afb2aSJulio Merino mkdir $NEW/dirchange/todir/difffile 262d14afb2aSJulio Merino echo "baz" > $NEW/dirchange/todir/difffile/file 263d14afb2aSJulio Merino echo "bar" > $TEST/dirchange/todir/difffile 264d14afb2aSJulio Merino 265d14afb2aSJulio Merino # /dirchange/todir/difftype: Similar to the previous test, but 266d14afb2aSJulio Merino # the conflict is due to a change in the file type. 267d14afb2aSJulio Merino echo "foo" > $OLD/dirchange/todir/difftype 268d14afb2aSJulio Merino mkdir $NEW/dirchange/todir/difftype 269d14afb2aSJulio Merino echo "baz" > $NEW/dirchange/todir/difftype/file 270d14afb2aSJulio Merino mkfifo $TEST/dirchange/todir/difftype 271d14afb2aSJulio Merino} 272d14afb2aSJulio Merino 273d14afb2aSJulio Merino# $1 - relative path to file that should be missing from TEST 274d14afb2aSJulio Merinomissing() 275d14afb2aSJulio Merino{ 276d14afb2aSJulio Merino if [ -e $TEST/$1 -o -L $TEST/$1 ]; then 277d14afb2aSJulio Merino echo "File $1 should be missing" 278d14afb2aSJulio Merino FAILED=yes 279d14afb2aSJulio Merino fi 280d14afb2aSJulio Merino} 281d14afb2aSJulio Merino 282d14afb2aSJulio Merino# $1 - relative path to file that should be present in TEST 283d14afb2aSJulio Merinopresent() 284d14afb2aSJulio Merino{ 285d14afb2aSJulio Merino if ! [ -e $TEST/$1 -o -L $TEST/$1 ]; then 286d14afb2aSJulio Merino echo "File $1 should be present" 287d14afb2aSJulio Merino FAILED=yes 288d14afb2aSJulio Merino fi 289d14afb2aSJulio Merino} 290d14afb2aSJulio Merino 291d14afb2aSJulio Merino# $1 - relative path to file that should be a fifo in TEST 292d14afb2aSJulio Merinofifo() 293d14afb2aSJulio Merino{ 294d14afb2aSJulio Merino if ! [ -p $TEST/$1 ]; then 295d14afb2aSJulio Merino echo "File $1 should be a FIFO" 296d14afb2aSJulio Merino FAILED=yes 297d14afb2aSJulio Merino fi 298d14afb2aSJulio Merino} 299d14afb2aSJulio Merino 300d14afb2aSJulio Merino# $1 - relative path to file that should be a directory in TEST 301d14afb2aSJulio Merinodir() 302d14afb2aSJulio Merino{ 303d14afb2aSJulio Merino if ! [ -d $TEST/$1 ]; then 304d14afb2aSJulio Merino echo "File $1 should be a directory" 305d14afb2aSJulio Merino FAILED=yes 306d14afb2aSJulio Merino fi 307d14afb2aSJulio Merino} 308d14afb2aSJulio Merino 309d14afb2aSJulio Merino# $1 - relative path to file that should be a symlink in TEST 310d14afb2aSJulio Merino# $2 - optional value of the link 311d14afb2aSJulio Merinolink() 312d14afb2aSJulio Merino{ 313d14afb2aSJulio Merino local val 314d14afb2aSJulio Merino 315d14afb2aSJulio Merino if ! [ -L $TEST/$1 ]; then 316d14afb2aSJulio Merino echo "File $1 should be a link" 317d14afb2aSJulio Merino FAILED=yes 318d14afb2aSJulio Merino elif [ $# -gt 1 ]; then 319d14afb2aSJulio Merino val=`readlink $TEST/$1` 320d14afb2aSJulio Merino if [ "$val" != "$2" ]; then 321d14afb2aSJulio Merino echo "Link $1 should link to \"$2\"" 322d14afb2aSJulio Merino FAILED=yes 323d14afb2aSJulio Merino fi 324d14afb2aSJulio Merino fi 325d14afb2aSJulio Merino} 326d14afb2aSJulio Merino 327d14afb2aSJulio Merino# $1 - relative path to regular file that should be present in TEST 328d14afb2aSJulio Merino# $2 - optional string that should match file contents 329d14afb2aSJulio Merino# $3 - optional MD5 of the flie contents, overrides $2 if present 330d14afb2aSJulio Merinofile() 331d14afb2aSJulio Merino{ 332d14afb2aSJulio Merino local contents sum 333d14afb2aSJulio Merino 334d14afb2aSJulio Merino if ! [ -f $TEST/$1 ]; then 335d14afb2aSJulio Merino echo "File $1 should be a regular file" 336d14afb2aSJulio Merino FAILED=yes 337d14afb2aSJulio Merino elif [ $# -eq 2 ]; then 338d14afb2aSJulio Merino contents=`cat $TEST/$1` 339d14afb2aSJulio Merino if [ "$contents" != "$2" ]; then 340d14afb2aSJulio Merino echo "File $1 has wrong contents" 341d14afb2aSJulio Merino FAILED=yes 342d14afb2aSJulio Merino fi 343d14afb2aSJulio Merino elif [ $# -eq 3 ]; then 344d14afb2aSJulio Merino sum=`md5 -q $TEST/$1` 345d14afb2aSJulio Merino if [ "$sum" != "$3" ]; then 346d14afb2aSJulio Merino echo "File $1 has wrong contents" 347d14afb2aSJulio Merino FAILED=yes 348d14afb2aSJulio Merino fi 349d14afb2aSJulio Merino fi 350d14afb2aSJulio Merino} 351d14afb2aSJulio Merino 352d14afb2aSJulio Merino# $1 - relative path to a regular file that should have a conflict 353d14afb2aSJulio Merino# $2 - optional MD5 of the conflict file contents 354d14afb2aSJulio Merinoconflict() 355d14afb2aSJulio Merino{ 356d14afb2aSJulio Merino local sum 357d14afb2aSJulio Merino 358d14afb2aSJulio Merino if ! [ -f $CONFLICTS/$1 ]; then 359d14afb2aSJulio Merino echo "File $1 missing conflict" 360d14afb2aSJulio Merino FAILED=yes 361d14afb2aSJulio Merino elif [ $# -gt 1 ]; then 362d14afb2aSJulio Merino sum=`md5 -q $CONFLICTS/$1` 363d14afb2aSJulio Merino if [ "$sum" != "$2" ]; then 364d14afb2aSJulio Merino echo "Conflict $1 has wrong contents" 365d14afb2aSJulio Merino FAILED=yes 366d14afb2aSJulio Merino fi 367d14afb2aSJulio Merino fi 368d14afb2aSJulio Merino} 369d14afb2aSJulio Merino 370d14afb2aSJulio Merino# $1 - relative path to a regular file that should not have a conflict 371d14afb2aSJulio Merinonoconflict() 372d14afb2aSJulio Merino{ 373d14afb2aSJulio Merino if [ -f $CONFLICTS/$1 ]; then 374d14afb2aSJulio Merino echo "File $1 should not have a conflict" 375d14afb2aSJulio Merino FAILED=yes 376d14afb2aSJulio Merino fi 377d14afb2aSJulio Merino} 378d14afb2aSJulio Merino 379d14afb2aSJulio Merinoif [ `id -u` -ne 0 ]; then 380d14afb2aSJulio Merino echo "must be root" 381d14afb2aSJulio Merino exit 0 382d14afb2aSJulio Merinofi 383d14afb2aSJulio Merino 384d14afb2aSJulio Merinoif [ -r /etc/etcupdate.conf ]; then 385d14afb2aSJulio Merino echo "WARNING: /etc/etcupdate.conf settings may break some tests." 386d14afb2aSJulio Merinofi 387d14afb2aSJulio Merino 388d14afb2aSJulio Merino# First run the test ignoring no patterns. 389d14afb2aSJulio Merino 390d14afb2aSJulio Merinobuild_trees 391d14afb2aSJulio Merino 392d14afb2aSJulio Merino$COMMAND -r -d $WORKDIR -D $TEST > $WORKDIR/test.out 393d14afb2aSJulio Merino 394d14afb2aSJulio Merinocat > $WORKDIR/correct.out <<EOF 395d14afb2aSJulio Merino D /dirchange/fromdir/extradir/file 396d14afb2aSJulio Merino C /difffiles/difffiles/difffiles/conflict 397d14afb2aSJulio Merino C /difftype/difftype/difffiles/file 398d14afb2aSJulio Merino C /second/second/difffiles/file 399d14afb2aSJulio MerinoWarnings: 400d14afb2aSJulio Merino Modified regular file remains: /dirchange/fromdir/conflict/somefile 401d14afb2aSJulio Merino Modified regular file remains: /first/difffiles/second/file 402d14afb2aSJulio Merino Modified symbolic link remains: /first/difflinks/second/link 403d14afb2aSJulio Merino Modified directory remains: /first/difftype/second/fifo 404d14afb2aSJulio Merino Modified directory remains: /rmdir/conflict/difftype 405d14afb2aSJulio Merino Non-empty directory remains: /rmdir/extra 406d14afb2aSJulio Merino Non-empty directory remains: /rmdir/conflict 407d14afb2aSJulio Merino Modified mismatch: /difffiles/difftype/difftype/file (regular file vs fifo file) 408d14afb2aSJulio Merino Removed file changed: /difffiles/first/first/file 409d14afb2aSJulio Merino Modified link changed: /difflinks/difflinks/difflinks/link ("old" became "new") 410d14afb2aSJulio Merino Modified mismatch: /difflinks/difftype/difftype/link (symbolic link vs regular file) 411d14afb2aSJulio Merino Removed link changed: /difflinks/first/first/link ("old" became "new") 412d14afb2aSJulio Merino New link conflict: /difftype/difftype/difflinks/link ("new" vs "test") 413d14afb2aSJulio Merino Modified regular file changed: /difftype/difftype/difftype/one (fifo file became directory) 414d14afb2aSJulio Merino Modified symbolic link changed: /difftype/difftype/difftype/two (directory became regular file) 415d14afb2aSJulio Merino Remove mismatch: /difftype/first/first/fifo (fifo file became directory) 416d14afb2aSJulio Merino Modified directory changed: /dirchange/fromdir/conflict (directory became fifo file) 417d14afb2aSJulio Merino Modified directory changed: /dirchange/fromdir/extradir (directory became symbolic link) 418d14afb2aSJulio Merino Modified regular file changed: /dirchange/todir/difffile (regular file became directory) 419d14afb2aSJulio Merino Modified fifo file changed: /dirchange/todir/difftype (regular file became directory) 420d14afb2aSJulio Merino New file mismatch: /adddir/conflict (directory vs regular file) 421d14afb2aSJulio Merino Directory mismatch: $TEST/adddir/conflict (regular file) 422d14afb2aSJulio Merino Directory mismatch: $TEST/dirchange/todir/difffile (regular file) 423d14afb2aSJulio Merino Directory mismatch: $TEST/dirchange/todir/difftype (fifo file) 424d14afb2aSJulio Merino New link conflict: /second/second/difflinks/link ("new link" vs "test link") 425d14afb2aSJulio Merino New file mismatch: /second/second/difftype/dir (directory vs fifo file) 426d14afb2aSJulio MerinoEOF 427d14afb2aSJulio Merino 428d14afb2aSJulio Merinoecho "Differences for regular:" 429d14afb2aSJulio Merinodiff -u -L "correct" $WORKDIR/correct.out -L "test" $WORKDIR/test.out \ 430d14afb2aSJulio Merino || FAILED=yes 431d14afb2aSJulio Merino 432d14afb2aSJulio Merino## /first/difftype/second: 433d14afb2aSJulio Merinopresent /first/difftype/second/fifo 434d14afb2aSJulio Merino 435d14afb2aSJulio Merino## /first/difflinks/second: 436d14afb2aSJulio Merinolink /first/difflinks/second/link "test link" 437d14afb2aSJulio Merino 438d14afb2aSJulio Merino## /first/difffiles/second: 439d14afb2aSJulio Merinofile /first/difffiles/second/file "bar" 440d14afb2aSJulio Merino 441d14afb2aSJulio Merino## /second/second/difftype: 442d14afb2aSJulio Merinofifo /second/second/difftype/dir 443d14afb2aSJulio Merino 444d14afb2aSJulio Merino## /second/second/difflinks: 445d14afb2aSJulio Merinolink /second/second/difflinks/link "test link" 446d14afb2aSJulio Merino 447d14afb2aSJulio Merino## /second/second/difffiles: 448d14afb2aSJulio Merinofile /second/second/difffiles/file "test" 449d14afb2aSJulio Merinoconflict /second/second/difffiles/file 4f2ee8620a251fd53f06bb6112eb6ffa 450d14afb2aSJulio Merino 451d14afb2aSJulio Merino## /difftype/first/first: 452d14afb2aSJulio Merinomissing /difftype/first/first/fifo 453d14afb2aSJulio Merino 454d14afb2aSJulio Merino## /difftype/difftype/difftype: 455d14afb2aSJulio Merinofile /difftype/difftype/difftype/one "foo" 456d14afb2aSJulio Merinolink /difftype/difftype/difftype/two "bar" 457d14afb2aSJulio Merino 458d14afb2aSJulio Merino## /difftype/difftype/difflinks: 459d14afb2aSJulio Merinolink /difftype/difftype/difflinks/link "test" 460d14afb2aSJulio Merino 461d14afb2aSJulio Merino## /difftype/difftype/difffile: 462d14afb2aSJulio Merinoconflict /difftype/difftype/difffiles/file 117f2bcd1f6491f6044e79e5a57a9229 463d14afb2aSJulio Merino 464d14afb2aSJulio Merino## /difflinks/first/first: 465d14afb2aSJulio Merinomissing /difflinks/first/first/link 466d14afb2aSJulio Merino 467d14afb2aSJulio Merino## /difflinks/difftype/difftype: 468d14afb2aSJulio Merinofile /difflinks/difftype/difftype/link "test" 469d14afb2aSJulio Merino 470d14afb2aSJulio Merino## /difflinks/difflinks/difflinks: 471d14afb2aSJulio Merinolink /difflinks/difflinks/difflinks/link "test" 472d14afb2aSJulio Merino 473d14afb2aSJulio Merino## /difffiles/first/first: 474d14afb2aSJulio Merinomissing /difffiles/first/first/file 475d14afb2aSJulio Merino 476d14afb2aSJulio Merino## /difffiles/difftype/difftype: 477d14afb2aSJulio Merinofifo /difffiles/difftype/difftype/file 478d14afb2aSJulio Merino 479d14afb2aSJulio Merino## /difffiles/difffiles/difffiles: 480d14afb2aSJulio Merinofile /difffiles/difffiles/difffiles/conflict "this is a test file" 481d14afb2aSJulio Merinoconflict /difffiles/difffiles/difffiles/conflict \ 482d14afb2aSJulio Merino 8261cfdd89280c4a6c26e4ac86541fe9 483d14afb2aSJulio Merino 484d14afb2aSJulio Merino## /adddir/conflict: 485d14afb2aSJulio Merinofile /adddir/conflict 486d14afb2aSJulio Merino 487d14afb2aSJulio Merino## /rmdir/extra: 488d14afb2aSJulio Merinodir /rmdir/extra 489d14afb2aSJulio Merinofile /rmdir/extra/localfile.txt "foo" 490d14afb2aSJulio Merino 491d14afb2aSJulio Merino## /rmdir/conflict: 492d14afb2aSJulio Merinodir /rmdir/conflict/difftype 493d14afb2aSJulio Merinopresent /rmdir/conflict 494d14afb2aSJulio Merino 495d14afb2aSJulio Merino## /dirchange/fromdir/extradir: 496d14afb2aSJulio Merinomissing /dirchange/fromdir/extradir/file 497d14afb2aSJulio Merinofifo /dirchange/fromdir/extradir/fifo 498d14afb2aSJulio Merino 499d14afb2aSJulio Merino## /dirchange/fromdir/conflict: 500d14afb2aSJulio Merinofile /dirchange/fromdir/conflict/somefile "bar" 501d14afb2aSJulio Merino 502d14afb2aSJulio Merino## /dirchange/todir/difffile: 503d14afb2aSJulio Merinofile /dirchange/todir/difffile "bar" 504d14afb2aSJulio Merino 505d14afb2aSJulio Merino## /dirchange/todir/difftype: 506d14afb2aSJulio Merinofifo /dirchange/todir/difftype 507d14afb2aSJulio Merino 508d14afb2aSJulio Merino# Now test with -A '/first*' -A '/second* /*di*'. This should remove 509d14afb2aSJulio Merino# most of the warnings and conflicts. 510d14afb2aSJulio Merino 511d14afb2aSJulio Merinobuild_trees 512d14afb2aSJulio Merino 513d14afb2aSJulio Merino$COMMAND -r -A '/first*' -A '/second* /*di*' -d $WORKDIR -D $TEST > \ 514d14afb2aSJulio Merino $WORKDIR/test1.out 515d14afb2aSJulio Merino 516d14afb2aSJulio Merinocat > $WORKDIR/correct1.out <<EOF 517d14afb2aSJulio Merino D /dirchange/fromdir/extradir/file 518d14afb2aSJulio Merino U /difffiles/difffiles/difffiles/conflict 519d14afb2aSJulio Merino U /difffiles/difftype/difftype/file 520d14afb2aSJulio Merino A /difffiles/first/first/file 521d14afb2aSJulio Merino U /difflinks/difflinks/difflinks/link 522d14afb2aSJulio Merino U /difflinks/difftype/difftype/link 523d14afb2aSJulio Merino A /difflinks/first/first/link 524d14afb2aSJulio Merino U /difftype/difftype/difffiles/file 525d14afb2aSJulio Merino U /difftype/difftype/difflinks/link 526d14afb2aSJulio Merino D /difftype/difftype/difftype/one 527d14afb2aSJulio Merino U /difftype/difftype/difftype/two 528d14afb2aSJulio Merino U /dirchange/todir/difffile 529d14afb2aSJulio Merino U /dirchange/todir/difftype 530d14afb2aSJulio Merino U /adddir/conflict 531d14afb2aSJulio Merino A /adddir/conflict/newfile 532d14afb2aSJulio Merino A /dirchange/todir/difffile/file 533d14afb2aSJulio Merino A /dirchange/todir/difftype/file 534d14afb2aSJulio Merino U /second/second/difffiles/file 535d14afb2aSJulio Merino U /second/second/difflinks/link 536d14afb2aSJulio Merino D /second/second/difftype/dir 537d14afb2aSJulio MerinoWarnings: 538d14afb2aSJulio Merino Modified regular file remains: /dirchange/fromdir/conflict/somefile 539d14afb2aSJulio Merino Modified regular file remains: /first/difffiles/second/file 540d14afb2aSJulio Merino Modified symbolic link remains: /first/difflinks/second/link 541d14afb2aSJulio Merino Modified directory remains: /first/difftype/second/fifo 542d14afb2aSJulio Merino Modified directory remains: /rmdir/conflict/difftype 543d14afb2aSJulio Merino Non-empty directory remains: /rmdir/extra 544d14afb2aSJulio Merino Non-empty directory remains: /rmdir/conflict 545d14afb2aSJulio Merino Modified directory changed: /dirchange/fromdir/conflict (directory became fifo file) 546d14afb2aSJulio Merino Modified directory changed: /dirchange/fromdir/extradir (directory became symbolic link) 547d14afb2aSJulio MerinoEOF 548d14afb2aSJulio Merino 549d14afb2aSJulio Merinoecho "Differences for -A '/first*' -A '/second* /*di*':" 550d14afb2aSJulio Merinodiff -u -L "correct" $WORKDIR/correct1.out -L "test" $WORKDIR/test1.out \ 551d14afb2aSJulio Merino || FAILED=yes 552d14afb2aSJulio Merino 553d14afb2aSJulio Merino## /first/difftype/second: 554d14afb2aSJulio Merinopresent /first/difftype/second/fifo 555d14afb2aSJulio Merino 556d14afb2aSJulio Merino## /first/difflinks/second: 557d14afb2aSJulio Merinolink /first/difflinks/second/link "test link" 558d14afb2aSJulio Merino 559d14afb2aSJulio Merino## /first/difffiles/second: 560d14afb2aSJulio Merinofile /first/difffiles/second/file "bar" 561d14afb2aSJulio Merino 562d14afb2aSJulio Merino## /second/second/difftype: 563d14afb2aSJulio Merinomissing /second/second/difftype/dir 564d14afb2aSJulio Merino 565d14afb2aSJulio Merino## /second/second/difflinks: 566d14afb2aSJulio Merinolink /second/second/difflinks/link "new link" 567d14afb2aSJulio Merino 568d14afb2aSJulio Merino## /second/second/difffiles: 569d14afb2aSJulio Merinofile /second/second/difffiles/file "new" 570d14afb2aSJulio Merinonoconflict /second/second/difffiles/file 571d14afb2aSJulio Merino 572d14afb2aSJulio Merino## /difftype/first/first: 573d14afb2aSJulio Merinomissing /difftype/first/first/fifo 574d14afb2aSJulio Merino 575d14afb2aSJulio Merino## /difftype/difftype/difftype: 576d14afb2aSJulio Merinomissing /difftype/difftype/difftype/one 577d14afb2aSJulio Merinofile /difftype/difftype/difftype/two "baz" 578d14afb2aSJulio Merino 579d14afb2aSJulio Merino## /difftype/difftype/difflinks: 580d14afb2aSJulio Merinolink /difftype/difftype/difflinks/link "new" 581d14afb2aSJulio Merino 582d14afb2aSJulio Merino## /difftype/difftype/difffile: 583d14afb2aSJulio Merinonoconflict /difftype/difftype/difffiles/file 584d14afb2aSJulio Merinofile /difftype/difftype/difffiles/file "foo" 585d14afb2aSJulio Merino 586d14afb2aSJulio Merino## /difflinks/first/first: 587d14afb2aSJulio Merinolink /difflinks/first/first/link "new" 588d14afb2aSJulio Merino 589d14afb2aSJulio Merino## /difflinks/difftype/difftype: 590d14afb2aSJulio Merinolink /difflinks/difftype/difftype/link "new" 591d14afb2aSJulio Merino 592d14afb2aSJulio Merino## /difflinks/difflinks/difflinks: 593d14afb2aSJulio Merinolink /difflinks/difflinks/difflinks/link "new" 594d14afb2aSJulio Merino 595d14afb2aSJulio Merino## /difffiles/first/first: 596d14afb2aSJulio Merinofile /difffiles/first/first/file "bar" 597d14afb2aSJulio Merino 598d14afb2aSJulio Merino## /difffiles/difftype/difftype: 599d14afb2aSJulio Merinofile /difffiles/difftype/difftype/file "new" 600d14afb2aSJulio Merino 601d14afb2aSJulio Merino## /difffiles/difffiles/difffiles: 602d14afb2aSJulio Merinonoconflict /difffiles/difffiles/difffiles/conflict 603d14afb2aSJulio Merinofile /difffiles/difffiles/difffiles/conflict "this is a new file" 604d14afb2aSJulio Merino 605d14afb2aSJulio Merino## /adddir/conflict: 606d14afb2aSJulio Merinofile /adddir/conflict/newfile 607d14afb2aSJulio Merino 608d14afb2aSJulio Merino## /rmdir/extra: 609d14afb2aSJulio Merinodir /rmdir/extra 610d14afb2aSJulio Merinofile /rmdir/extra/localfile.txt "foo" 611d14afb2aSJulio Merino 612d14afb2aSJulio Merino## /rmdir/conflict: 613d14afb2aSJulio Merinodir /rmdir/conflict/difftype 614d14afb2aSJulio Merinopresent /rmdir/conflict 615d14afb2aSJulio Merino 616d14afb2aSJulio Merino## /dirchange/fromdir/extradir: 617d14afb2aSJulio Merinomissing /dirchange/fromdir/extradir/file 618d14afb2aSJulio Merinofifo /dirchange/fromdir/extradir/fifo 619d14afb2aSJulio Merino 620d14afb2aSJulio Merino## /dirchange/fromdir/conflict: 621d14afb2aSJulio Merinofile /dirchange/fromdir/conflict/somefile "bar" 622d14afb2aSJulio Merino 623d14afb2aSJulio Merino## /dirchange/todir/difffile: 624d14afb2aSJulio Merinofile /dirchange/todir/difffile/file "baz" 625d14afb2aSJulio Merino 626d14afb2aSJulio Merino## /dirchange/todir/difftype: 627d14afb2aSJulio Merinofile /dirchange/todir/difftype/file "baz" 628d14afb2aSJulio Merino 629d14afb2aSJulio Merino[ "${FAILED}" = no ] 630