File pre_checkin.sh of Package ceph-test
318
1
2
3
set -f
4
5
function packages_files {
6
local spec_file=$1
7
local exclude_pkg=$2
8
local in_files=false
9
local result=""
10
11
while IFS='' read -r line || [[ -n "$line" ]]; do
12
13
case $line in
14
"%files "*)
15
pkg=`echo "$line" | sed 's/%files.* \(\w\+\)/\1/g'`
16
if [[ $pkg == $exclude_pkg ]]; then
17
in_files=false
18
continue
19
fi
20
in_files=true
21
continue
22
;;
23
"%post"* | "%pre"* | "%preun"* | "%postun"* | "%changelog")
24
in_files=false
25
continue
26
;;
27
esac
28
29
result=""
30
changed=true
31
while [[ $in_files == true ]] && [[ $changed == true ]]; do
32
changed=false
33
case $line in
34
"%if"* | "" | "%defattr"* | "%endif"* | "%else"* | "#"* | "%docdir"*)
35
break
36
;;
37
"%dir"*)
38
break # for now we'll ignore %dir entries
39
;;
40
*)
41
result=`echo "$line" | sed -e 's/%config \(.*\)/\1/g' \
42
-e 's/%config(.*) \(.*\)/\1/g' \
43
-e 's/%attr(.*) \(.*\)/\1/g' \
44
-e 's/%exclude \(.*\)/\1/g'`
45
if [[ ! $line == $result ]]; then
46
changed=true
47
line=$result
48
continue
49
fi
50
;;
51
esac
52
53
echo "$result"
54
done
55
done < $spec_file
56
}
57
58
function get_package_summary {
59
local spec_file=$1
60
local pkg_name=$2
61
local in_package=false
62
63
while IFS='' read -r line || [[ -n "$line" ]]; do
64
65
case $line in
66
"%package "*)
67
pkg=`echo "$line" | sed 's/%package.* \(\w\+\)/\1/g'`
68
if [[ ! $pkg == $pkg_name ]]; then
69
in_package=false
70
else
71
in_package=true
72
fi
73
;;
74
"%prep"* | "%build"* | "%install"*)
75
in_package=false
76
;;
77
"Summary:"*)
78
if [[ $in_package == true ]]; then
79
echo $line
80
break
81
fi
82
;;
83
esac
84
done < $spec_file
85
}
86
87
function get_package_requires {
88
local spec_file=$1
89
local pkg_name=$2
90
local in_package=false
91
92
while IFS='' read -r line || [[ -n "$line" ]]; do
93
94
case $line in
95
"%package "*)
96
pkg=`echo "$line" | sed 's/%package.* \(\w\+\)/\1/g'`
97
if [[ ! $pkg == $pkg_name ]]; then
98
in_package=false
99
else
100
in_package=true
101
fi
102
;;
103
"%prep"* | "%build"* | "%install"*)
104
in_package=false
105
;;
106
"Requires:"*)
107
if [[ $in_package == true ]]; then
108
echo $line
109
fi
110
;;
111
esac
112
done < $spec_file
113
}
114
115
function get_package_description {
116
local spec_file=$1
117
local pkg_name=$2
118
local in_desc=false
119
120
while IFS='' read -r line || [[ -n "$line" ]]; do
121
122
case $line in
123
"%description "*)
124
pkg=`echo "$line" | sed 's/%description.* \(\w\+\)/\1/g'`
125
if [[ ! $pkg == $pkg_name ]]; then
126
in_desc=false
127
else
128
in_desc=true
129
fi
130
continue
131
;;
132
"%prep"* | "%build"* | "%install"* | "%package"* | "%if"* | "%endif"*)
133
in_desc=false
134
continue
135
;;
136
esac
137
138
if [[ $in_desc == true ]]; then
139
echo "$line"
140
fi
141
done < $spec_file
142
}
143
144
function transform_spec_file {
145
local spec_file=$1
146
local include_pkg=$2
147
local rm_files=$3
148
local summary=$4
149
local description=$5
150
local requires=$6
151
local in_package=false
152
local in_files=false
153
local in_desc=false
154
155
while IFS='' read -r line || [[ -n "$line" ]]; do
156
157
case $line in
158
"%bcond_with ceph_test_package"*)
159
line="%bcond_without ceph_test_package"
160
;;
161
"Name:"*)
162
line="Name: $include_pkg"
163
;;
164
"Summary:"*)
165
if [[ $in_package == false ]]; then
166
line="$summary"
167
fi
168
;;
169
"Source0:"*)
170
line=`echo $line | sed 's/%{name}/ceph/g'`
171
;;
172
"ExclusiveArch:"*)
173
line="ExclusiveArch: x86_64"
174
;;
175
"%autosetup -p1")
176
line="%autosetup -p1 -n ceph-%version"
177
;;
178
"Requires:"*)
179
if [[ $in_package == false ]]; then
180
line=""
181
fi
182
;;
183
"Requires(post):"*)
184
if [[ $in_package == false ]]; then
185
IFS=''
186
for r in "$requires"; do
187
echo "$r"
188
done
189
fi
190
;;
191
"%description"*)
192
if [[ $in_package == false ]]; then
193
in_desc=true
194
echo "$line"
195
echo "$description"
196
echo ""
197
continue
198
fi
199
;;
200
"%package "*)
201
in_package=true
202
continue
203
;;
204
"%prep"* | "%build"* | "%install"*)
205
in_package=false
206
in_desc=false
207
;;
208
"%files "*)
209
pkg=`echo "$line" | sed 's/%files.* \(\w\+\)/\1/g'`
210
if [[ $pkg == $include_pkg ]]; then
211
in_files=false
212
else
213
in_files=true
214
continue
215
fi
216
;;
217
"%changelog"*)
218
in_files=false
219
;;
220
"%clean"*)
221
in_package=false
222
IFS=''
223
for rf in "$rm_files"; do
224
echo "$rf"
225
done
226
echo ""
227
echo "dirs=\`find %{buildroot} -type d -empty\`"
228
echo "while [[ -n \$dirs ]]; do"
229
echo " for d in \$dirs; do"
230
echo " rm -rf \$d"
231
echo " done"
232
echo "dirs=\`find %{buildroot} -type d -empty\`"
233
echo "done"
234
echo ""
235
;;
236
"#"* | "%"*)
237
in_desc=false
238
;;
239
esac
240
241
if [[ $in_package == false ]] && [[ $in_files == false ]] && [[ $in_desc == false ]]; then
242
echo $line
243
else
244
if [[ $line == "%if"* ]] || [[ $line == "%endif"* ]]; then
245
echo $line
246
fi
247
fi
248
249
done < $spec_file
250
}
251
252
function generate_rm_exclude_files {
253
local exclude_list=$1
254
local buildroot=$2
255
256
for f in $exclude_list; do
257
echo "rm -rf $buildroot$f"
258
done
259
}
260
261
function insert_line_before {
262
local FILE=$1
263
local line_to_insert=$2
264
local match_regex=$3
265
sed -i "/${match_regex}/i $line_to_insert" $FILE
266
}
267
268
function copy_changes_file {
269
local dest_pkg=$1
270
271
cp ceph.changes ${dest_pkg}.changes
272
}
273
274
function set_build_constraints {
275
local FILE=$1
276
shift
277
sed -i -e '/#!BuildConstraint/d' $FILE
278
for constraint in "$@"; do
279
sed -i -e "1s/^/#!BuildConstraint: $constraint\n/" $FILE
280
done
281
}
282
283
PACKAGE="ceph-test"
284
SPEC_FILE="ceph.spec"
285
286
source ./pre_checkin.env
287
if [ -z "$CEPH_BUILD_DISK_SIZE_GB" -o \
288
-z "$CEPH_BUILD_MEMORY_SIZE_GB" -o \
289
-z "$CEPH_TEST_BUILD_DISK_SIZE_GB" -o \
290
-z "$CEPH_TEST_BUILD_MEMORY_SIZE_GB" ]; then
291
echo "ERROR: build constraints not set (see README-constraints.txt)";
292
exit 1
293
fi
294
295
files=`packages_files $SPEC_FILE $PACKAGE`
296
if [[ "$?" == "1" ]]; then
297
echo "ERROR: "
298
echo $files
299
exit 0
300
fi
301
rm_files=`generate_rm_exclude_files "$files" "%{buildroot}"`
302
summ=`get_package_summary $SPEC_FILE $PACKAGE`
303
desc=`get_package_description $SPEC_FILE $PACKAGE`
304
reqs=`get_package_requires $SPEC_FILE $PACKAGE`
305
sed -i -e 's/%bcond_without ceph_test_package/%bcond_with ceph_test_package/' $SPEC_FILE
306
transform_spec_file $SPEC_FILE $PACKAGE "$rm_files" "$summ" "$desc" "$reqs" > $PACKAGE.spec
307
insert_line_before "$PACKAGE.spec" "Source99: README-packaging.txt" "_insert_obs_source_lines_here"
308
insert_line_before "$PACKAGE.spec" "Source98: README-checkin.txt" "^Source99:"
309
insert_line_before "$PACKAGE.spec" "Source97: README-ceph-test.txt" "^Source98:"
310
insert_line_before "$PACKAGE.spec" "Source96: README-constraints.txt" "^Source97:"
311
insert_line_before "$PACKAGE.spec" "Source95: pre_checkin.env" "^Source96:"
312
insert_line_before "$PACKAGE.spec" "Source94: pre_checkin.sh" "^Source95:"
313
insert_line_before "$PACKAGE.spec" "Source93: checkin.sh" "^Source94:"
314
insert_line_before "$PACKAGE.spec" "Source92: ceph-rpmlintrc" "^Source93:"
315
copy_changes_file $PACKAGE
316
set_build_constraints $SPEC_FILE "hardware:disk:size unit=G ${CEPH_BUILD_DISK_SIZE_GB}" "hardware:memory:size unit=G ${CEPH_BUILD_MEMORY_SIZE_GB}"
317
set_build_constraints "$PACKAGE.spec" "hardware:disk:size unit=G ${CEPH_TEST_BUILD_DISK_SIZE_GB}" "hardware:memory:size unit=G ${CEPH_TEST_BUILD_MEMORY_SIZE_GB}"
318