blob: 18afcdea9e12814e6b5d11576e9b6297c41af4d4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
#! /bin/sh
# Copyright (C) 2003 by Wayne Davison <wayned@samba.org>
# This program is distributable under the terms of the GNU GPL see
# COPYING).
# Test rsync handling of exclude/include directives.
# Test some of the more obscure wildcard handling of exclude/include
# processing.
. "$suitedir/rsync.fns"
set -x
HOME="$scratchdir"
CVSIGNORE='*.junk'
export HOME CVSIGNORE
# Build some files/dirs/links to copy
makepath "$fromdir/foo/down/to/you"
makepath "$fromdir/bar/down/to/foo/too"
makepath "$fromdir/mid/for/foo/and/that/is/who"
cat >"$fromdir/.excl" <<EOF
- down
: .excl-temp
!
- .excl
- *.bak
- *.old
- *.junk
EOF
echo kept >"$fromdir/foo/file1"
echo removed >"$fromdir/foo/file2"
echo cvsout >"$fromdir/foo/file2.old"
cat >"$fromdir/foo/.excl" <<EOF
+ .excl
- file1
EOF
cat >"$fromdir/bar/.excl" <<EOF
- home-cvs-exclude
: .excl2
+ to
EOF
echo cvsout >"$fromdir/bar/down/to/home-cvs-exclude"
cat >"$fromdir/bar/down/to/.excl2" <<EOF
- .excl2
EOF
echo keeper >"$fromdir/bar/down/to/foo/file1"
echo cvsout >"$fromdir/bar/down/to/foo/file1.bak"
echo gone >"$fromdir/bar/down/to/foo/file3"
echo lost >"$fromdir/bar/down/to/foo/file4"
echo cvsout >"$fromdir/bar/down/to/foo/file4.junk"
echo smashed >"$fromdir/bar/down/to/foo/to"
cat >"$fromdir/bar/down/to/foo/.excl2" <<EOF
+ *.junk
EOF
# This one should be ineffectual
cat >"$fromdir/mid/.excl2" <<EOF
- extra
EOF
echo cvsout >"$fromdir/mid/one-in-one-out"
echo one-in-one-out >"$fromdir/mid/.cvsignore"
echo cvsin >"$fromdir/mid/one-for-all"
cat >"$fromdir/mid/.excl" <<EOF
:C
EOF
echo cvsin >"$fromdir/mid/for/one-in-one-out"
echo expunged >"$fromdir/mid/for/foo/extra"
echo retained >"$fromdir/mid/for/foo/keep"
ln -s too "$fromdir/bar/down/to/foo/sym"
# Setup our test exclude/include files.
excl="$scratchdir/exclude-from"
cat >"$excl" <<EOF
!
# If the second line of these two lines does anything, it's a bug.
+ **/bar
- /bar
# This should match against the whole path, not just the name.
+ foo**too
# This should float at the end of the path.
- foo/*/
# Test some normal excludes. Competing lines are paired.
+ t[o]/
- to
+ file4
- file[2-9]
- /mid/for/foo/extra
EOF
cat >"$scratchdir/.cvsignore" <<EOF
home-cvs-exclude
EOF
# Create the chk dir with what we expect to be excluded
checkit "$RSYNC -avv \"$fromdir/\" \"$chkdir/\"" "$fromdir" "$chkdir"
sleep 1 # Ensures that the rm commands will tweak the directory times.
rm -r "$chkdir"/foo/down
rm -r "$chkdir"/mid/for/foo/and
rm "$chkdir"/foo/file[235-9]
rm "$chkdir"/bar/down/to/foo/to "$chkdir"/bar/down/to/foo/file[235-9]
rm "$chkdir"/mid/for/foo/extra
# Un-tweak the directory times in our first (weak) exclude test (though
# it's a good test of the --existing option).
$RSYNC -av --existing --include='*/' --exclude='*' "$fromdir/" "$chkdir/"
# Now, test if rsync excludes the same files.
checkit "$RSYNC -avv --exclude-from=\"$excl\" \
--delete \"$fromdir/\" \"$todir/\"" "$chkdir" "$todir"
# Modify the chk dir by removing cvs-ignored files and then tweaking the dir times.
rm "$chkdir"/foo/*.old
rm "$chkdir"/bar/down/to/foo/*.bak
rm "$chkdir"/bar/down/to/foo/*.junk
rm "$chkdir"/bar/down/to/home-cvs-exclude
rm "$chkdir"/mid/one-in-one-out
$RSYNC -av --existing --include='*/' --exclude='*' "$fromdir/" "$chkdir/"
# Now, test if rsync excludes the same files, this time with --cvs-exclude
# and --delete-excluded.
checkit "$RSYNC -avvC --filter=\". $excl\" \
--delete-excluded \"$fromdir/\" \"$todir/\"" "$chkdir" "$todir"
# Modify the chk dir for our merge-exclude test and then tweak the dir times.
rm "$chkdir"/.excl
rm "$chkdir"/foo/file1
rm "$chkdir"/bar/.excl
rm "$chkdir"/bar/down/to/.excl2
rm "$chkdir"/bar/down/to/foo/.excl2
rm "$chkdir"/mid/.excl
cp -p "$fromdir"/bar/down/to/foo/*.junk "$chkdir"/bar/down/to/foo
cp -p "$fromdir"/bar/down/to/foo/to "$chkdir"/bar/down/to/foo
$RSYNC -av --existing --include='*/' --exclude='*' "$fromdir/" "$chkdir/"
# Now, test if rsync excludes the same files, this time with a merge-exclude
# file.
checkit "sed '/!/d' \"$excl\" | $RSYNC -avv -f :_.excl -f ._- \
--delete-excluded \"$fromdir/\" \"$todir/\"" "$chkdir" "$todir"
# The script would have aborted on error, so getting here means we've won.
exit 0
|