rev |
line source |
pankso@3512
|
1 #!/bin/sh
|
pankso@3512
|
2 # Tazbb - SliTaz Build Bot.
|
pankso@3512
|
3 # System wide config file: /etc/slitaz/tazbb.conf
|
pankso@3512
|
4 #
|
pankso@3512
|
5 # Tazbb is a tool to automate package building, it can be run manually
|
pankso@3512
|
6 # or via a cron job. On SliTaz build host, tazbb is run in a chroot env.
|
pankso@3512
|
7 #
|
pankso@3512
|
8 # (c) 2009 SliTaz GNU/Linux project - GNU gpl v3
|
pankso@3512
|
9 #
|
pankso@3512
|
10
|
pankso@3512
|
11 # Include config file or exit if no file found.
|
pankso@3512
|
12 if [ -f "./tazbb.conf" ]; then
|
pankso@3512
|
13 . ./tazbb.conf
|
pankso@3512
|
14 elif [ -f "/etc/slitaz/tazbb.conf" ]; then
|
pankso@3512
|
15 . /etc/slitaz/tazbb.conf
|
pankso@3512
|
16 else
|
pankso@3512
|
17 echo -e "\nNo config file found: tazbb.conf...\n" && exit 0
|
pankso@3512
|
18 fi
|
pascal@5823
|
19 LOG_SUFFIX=""
|
pascal@5823
|
20 case "$HG_WOK" in
|
pascal@5823
|
21 *stable) LOG_SUFFIX="&stable=1";;
|
pascal@5823
|
22 esac
|
pankso@3512
|
23
|
pankso@3512
|
24 # Tazbb is only for root.
|
pankso@3512
|
25 if test $(id -u) != 0 ; then
|
pankso@3512
|
26 echo -e "\nYou must be root to run: `basename $0`.\n" && exit 0
|
pankso@3512
|
27 fi
|
pankso@3512
|
28
|
pankso@3537
|
29 # Let tazbb finish is work and make sure needed files exist.
|
pankso@3512
|
30 if [ -f $LOCK_FILE ]; then
|
pankso@3512
|
31 case $1 in
|
pankso@3512
|
32 usage|list-*|*block)
|
pankso@3512
|
33 continue ;;
|
pankso@3512
|
34 *)
|
pankso@3512
|
35 echo -e "\nTazbb is already running and locked...\n"
|
pankso@3512
|
36 exit 0 ;;
|
pankso@3512
|
37 esac
|
pankso@3512
|
38 else
|
pankso@3512
|
39 mkdir -p $DB_DIR $LOG_DIR
|
pankso@3512
|
40 touch $LOCK_FILE $DB_DIR/blocked
|
pankso@3512
|
41 fi
|
pankso@3512
|
42
|
pascal@4236
|
43 # Set KERNEL variable
|
pascal@4236
|
44 if [ -s $BUILD_WOK/linux/receipt ]; then
|
pascal@4236
|
45 . $BUILD_WOK/linux/receipt
|
pascal@4236
|
46 KERNEL=$VERSION
|
pascal@4236
|
47 fi
|
pascal@4236
|
48
|
pankso@3512
|
49 usage()
|
pankso@3512
|
50 {
|
pankso@3512
|
51 echo -e "\nSliTaz developers and build host tool\n
|
pankso@3512
|
52 \033[1mUsage: \033[0m `basename $0` [command] [--option]
|
pankso@3512
|
53 \033[1mCommands: \033[0m\n
|
pascal@4996
|
54 usage Print this short usage and command list.
|
pascal@4996
|
55 list-pkgs List last cooked packages with date.
|
pascal@4996
|
56 report Run in report mode and dont cook anything [--verbose].
|
pascal@4996
|
57 cook Cook, install and log a single package build.
|
pascal@4996
|
58 cook-all Cook all missing, modified or unbuilt packages.
|
pascal@4996
|
59 cook-commit Cook all packages affected by a commit in the last update.
|
pascal@4996
|
60 test-pkgs Execute a test suite on all packages [--verbose].
|
pascal@4996
|
61 [un]block Block or unblock a package to skip or enable building.
|
pascal@4996
|
62 mail Send mail to package maintainer with tazbbmail.
|
pascal@4996
|
63 check-depends Verify DEPENDS value with library needs [--verbose].
|
pascal@4996
|
64 clean-up Remove old packages [--verbose|--dry-run].
|
pascal@4996
|
65 clean-log Remove all generated build log files.\n"
|
pankso@3512
|
66 }
|
pankso@3512
|
67
|
pankso@3512
|
68 status()
|
pankso@3512
|
69 {
|
pankso@3512
|
70 local CHECK=$?
|
pankso@3512
|
71 echo -en "\033[70G"
|
pankso@3512
|
72 if [ $CHECK = 0 ]; then
|
pankso@3512
|
73 echo "Done"
|
pankso@3512
|
74 else
|
pankso@3512
|
75 echo "Failed"
|
pankso@3512
|
76 fi
|
pankso@3512
|
77 return $CHECK
|
pankso@3512
|
78 }
|
pankso@3512
|
79
|
pankso@3512
|
80 top_summary()
|
pankso@3512
|
81 {
|
pankso@3512
|
82 cat > $DB_DIR/summary << _EOT_
|
pankso@3512
|
83 Update : `date`
|
pankso@3512
|
84 Revision : $NEW_REV (<a href="$HG_URL/log/$NEW_REV">changelog</a>)
|
pankso@3512
|
85 _EOT_
|
pankso@3512
|
86 }
|
pankso@3512
|
87
|
pankso@3512
|
88 packages_summary()
|
pankso@3512
|
89 {
|
pankso@3512
|
90 if ! grep -q "^Packages" $DB_DIR/summary; then
|
pankso@3512
|
91 cat >> $DB_DIR/summary << _EOT_
|
pankso@3512
|
92 Packages : `ls $BUILD_WOK | wc -l` in the wok, `cat $DB_DIR/cooklist | wc -l` to cook, \
|
pankso@3512
|
93 `cat $DB_DIR/blocked | wc -l` blocked, `cat $DB_DIR/corrupted | wc -l` corrupted
|
pankso@3512
|
94 _EOT_
|
pankso@3512
|
95 fi
|
pankso@3512
|
96 }
|
pankso@3512
|
97
|
pascal@4996
|
98 VERBOSE=""
|
pascal@4996
|
99
|
pankso@3512
|
100 packages_summary_update()
|
pankso@3512
|
101 {
|
pankso@3512
|
102 sed -i s/"[0-9]* in the wok"/"`ls $BUILD_WOK | wc -l` in the wok"/ \
|
pankso@3512
|
103 $DB_DIR/summary
|
pankso@3512
|
104 sed -i s/"[0-9]* to cook"/"`cat $DB_DIR/cooklist | wc -l` to cook"/ \
|
pankso@3512
|
105 $DB_DIR/summary
|
pankso@3512
|
106 sed -i s/"[0-9]* blocked"/"`cat $DB_DIR/blocked | wc -l` blocked"/ \
|
pankso@3512
|
107 $DB_DIR/summary
|
pankso@3512
|
108 sed -i s/"[0-9]* corrupted"/"`cat $DB_DIR/corrupted | wc -l` corrupted"/ \
|
pankso@3512
|
109 $DB_DIR/summary
|
pankso@3512
|
110 }
|
pankso@3512
|
111
|
pankso@3512
|
112 list_packages()
|
pankso@3512
|
113 {
|
pankso@3512
|
114 cd $PACKAGES_REPOSITORY
|
pankso@3512
|
115 ls -1t *.tazpkg | head -20 | \
|
pankso@3512
|
116 while read file
|
pankso@3512
|
117 do
|
pankso@3512
|
118 echo -n $(stat -c '%y' $PACKAGES_REPOSITORY/$file | cut -d. -f1)
|
pankso@3512
|
119 echo " $file"
|
pankso@3512
|
120 done
|
pankso@3512
|
121 }
|
pankso@3512
|
122
|
pankso@3512
|
123 show_report()
|
pankso@3512
|
124 {
|
pankso@3512
|
125 echo "Cooklist"
|
pankso@3512
|
126 echo "================================================================================"
|
pankso@3512
|
127 cat $DB_DIR/cooklist && echo ""
|
pascal@4447
|
128 echo "Packlist"
|
pascal@4447
|
129 echo "================================================================================"
|
pascal@4447
|
130 cat $DB_DIR/packlist && echo ""
|
pankso@3512
|
131 echo "Blocked"
|
pankso@3512
|
132 echo "================================================================================"
|
pankso@3512
|
133 cat $DB_DIR/blocked && echo ""
|
pankso@3512
|
134 echo ""
|
pankso@3512
|
135 }
|
pankso@3512
|
136
|
pascal@4163
|
137 # URL encoding
|
pascal@4163
|
138 escape()
|
pascal@4163
|
139 {
|
pascal@4163
|
140 echo $1 | sed -e 's/+/%2B/g' -e 's|/|%2F|g' -e 's/:/%3A/g'
|
pascal@4163
|
141 }
|
pascal@4163
|
142
|
pankso@3512
|
143 update_wok()
|
pankso@3512
|
144 {
|
pascal@4447
|
145 local forced
|
pascal@4447
|
146 forced=""
|
pankso@3512
|
147 echo ""
|
pascal@4447
|
148 echo "(updating flavors)" > $DB_DIR/running
|
pascal@4447
|
149 cd $HG_FLAVORS
|
pascal@4447
|
150 LAST_REV=`hg head --template '{rev}\n'`
|
pascal@4447
|
151 hg pull && hg update
|
pascal@4447
|
152 NEW_REV=`hg head --template '{rev}\n'`
|
pascal@4447
|
153 if [ "$NEW_REV" != "$LAST_REV" ]; then
|
pascal@4447
|
154 size=`du -sh $HG_FLAVORS | awk '{ print $1 }'`
|
pascal@4447
|
155 echo -n "Copying Hg flavors to the build flavors ($size)... "
|
pascal@4447
|
156 cp -a $HG_FLAVORS/* $BUILD_FLAVORS
|
pascal@4447
|
157 cp -a $HG_FLAVORS/.hg $BUILD_FLAVORS
|
pascal@4447
|
158 echo -e "Done\n"
|
pascal@4447
|
159 forced="yes"
|
pascal@4447
|
160 fi
|
pankso@3512
|
161 echo "(updating wok)" > $DB_DIR/running
|
pankso@3512
|
162 cd $HG_WOK
|
pankso@3512
|
163 LAST_REV=`hg head --template '{rev}\n'`
|
pankso@3512
|
164 hg pull && hg update
|
pankso@3512
|
165 NEW_REV=`hg head --template '{rev}\n'`
|
pankso@3512
|
166 # Gen a new summary and link last revision for the web interface.
|
pankso@3512
|
167 echo -e "\nHg wok : $HG_WOK ($NEW_REV)"
|
pankso@3512
|
168 echo -e "Build wok : $BUILD_WOK ($LAST_REV)\n"
|
pankso@3512
|
169 top_summary
|
pankso@3512
|
170 # Copy Hg wok if new revision or exit to stop process since nothing
|
pankso@3537
|
171 # have change (--forced can be used).
|
pankso@3512
|
172 if [ "$NEW_REV" != "$LAST_REV" ]; then
|
pankso@3512
|
173 size=`du -sh $HG_WOK | awk '{ print $1 }'`
|
pankso@3512
|
174 echo -n "Copying Hg wok to the build wok ($size)... "
|
pankso@3537
|
175 #rsync -r -n -t $HG_WOK/ $BUILD_WOK/
|
pankso@3512
|
176 cp -a $HG_WOK/* $BUILD_WOK
|
pankso@3512
|
177 cp -a $HG_WOK/.hg $BUILD_WOK
|
pankso@3512
|
178 echo -e "Done\n"
|
pankso@3512
|
179 else
|
pankso@3512
|
180 if [ "$1" = "cook-all" ] || [ "$1" = "cook-commit" ]; then
|
pascal@4447
|
181 if [ "$2" != "--forced" -a -z "$forced" ]; then
|
pankso@3512
|
182 echo -e "Nothing to cook...\n"
|
pankso@3512
|
183 packages_summary
|
pankso@3512
|
184 rm -f $LOCK_FILE && exit 0
|
pankso@3512
|
185 fi
|
pankso@3512
|
186 fi
|
pankso@3512
|
187 fi
|
pankso@3512
|
188 }
|
pankso@3512
|
189
|
pascal@4447
|
190 # Running 'tazbb report' should not pack anything and --verbose option
|
pascal@4447
|
191 # can be used to display more messages.
|
pascal@4447
|
192 check_flavors()
|
pascal@4447
|
193 {
|
pascal@4447
|
194 # Clean up last results.
|
pascal@4447
|
195 rm -f $DB_DIR/packlist && touch $DB_DIR/packlist
|
pascal@4447
|
196 echo ""
|
pascal@4447
|
197 echo "Checking all files in: $HG_FLAVORS"
|
pascal@4447
|
198 echo "================================================================================"
|
pascal@4447
|
199 echo "(checking flavors)" > $DB_DIR/running
|
pascal@4447
|
200 for flavor in $(cd $HG_FLAVORS ; ls)
|
pascal@4447
|
201 do
|
pascal@4447
|
202 [ "$2" = "--verbose" ] && echo "Flavor : $flavor"
|
pascal@4447
|
203 if [ ! -s $PACKAGES_REPOSITORY/$flavor.flavor ]; then
|
pascal@4447
|
204 echo $flavor >> $DB_DIR/packlist
|
pascal@4447
|
205 [ "$1" = "report" ] && echo "Missing : $flavor"
|
pascal@4447
|
206 echo "Missing flavor : $flavor" >> $DB_DIR/report
|
pascal@4447
|
207 continue
|
pascal@4447
|
208 fi
|
pascal@4452
|
209 for i in $(find $HG_FLAVORS/$flavor -type f); do
|
pascal@4447
|
210 [ $PACKAGES_REPOSITORY/$flavor.flavor -nt \
|
pascal@4447
|
211 $i ] && continue
|
pascal@4447
|
212 echo $flavor >> $DB_DIR/packlist
|
pascal@4900
|
213 [ "$1" = "report" ] && echo "Refresh : $flavor for $i"
|
pascal@4447
|
214 echo "Refresh flavor : $flavor" >> $DB_DIR/report
|
pascal@4447
|
215 continue 2
|
pascal@4447
|
216 done
|
pascal@4447
|
217 [ -s $HG_FLAVORS/$flavor/packages.list ] &&
|
pascal@4447
|
218 for i in $(cat $HG_FLAVORS/$flavor/packages.list); do
|
pascal@4902
|
219 if [ ! -d $BUILD_WOK/$i ]; then
|
pascal@4901
|
220 [ "$1" = "report" ] &&
|
pascal@4901
|
221 echo "Fix flavor for $i: $flavor"
|
pascal@4901
|
222 echo "Fix flavor for $i: $flavor" >> $DB_DIR/report
|
pascal@4901
|
223 continue
|
pascal@4901
|
224 fi
|
pascal@4447
|
225 [ $PACKAGES_REPOSITORY/$flavor.flavor -nt \
|
pascal@4447
|
226 $BUILD_WOK/$i/taz ] && continue
|
pascal@4447
|
227 echo $flavor >> $DB_DIR/packlist
|
pascal@4900
|
228 [ "$1" = "report" ] && echo "Repack : $flavor for $i"
|
pascal@4447
|
229 echo "Repack flavor : $flavor" >> $DB_DIR/report
|
pascal@4447
|
230 continue 2
|
pascal@4447
|
231 done
|
pascal@4447
|
232 done
|
pascal@4963
|
233
|
pascal@4963
|
234 # Check for meta flavors
|
pascal@4963
|
235 for flavor in $(cd $HG_FLAVORS ; ls)
|
pascal@4963
|
236 do
|
pascal@4963
|
237 grep -q ^ROOTFS_SELECTION $HG_FLAVORS/$flavor/receipt || continue
|
pascal@4963
|
238 . $HG_FLAVORS/$flavor/receipt
|
pascal@4963
|
239 set -- $ROOTFS_SELECTION
|
pascal@4963
|
240 if [ $PACKAGES_REPOSITORY/$2.flavor -nt \
|
pascal@4963
|
241 $PACKAGES_REPOSITORY/$flavor.flavor ]; then
|
pascal@4963
|
242 echo $flavor >> $DB_DIR/packlist
|
pascal@4963
|
243 [ "$1" = "report" ] && echo "Refresh : $flavor for $2"
|
pascal@4963
|
244 echo "Refresh meta flavor : $flavor" >> $DB_DIR/report
|
pascal@4963
|
245 continue
|
pascal@4963
|
246 fi
|
pascal@4963
|
247 if grep -q ^$2$ $DB_DIR/packlist ; then
|
pascal@4963
|
248 echo $flavor >> $DB_DIR/packlist
|
pascal@4963
|
249 [ "$1" = "report" ] && echo "Repack : $flavor for $2"
|
pascal@4963
|
250 echo "Repack meta flavor : $flavor" >> $DB_DIR/report
|
pascal@4963
|
251 continue
|
pascal@4963
|
252 fi
|
pascal@4963
|
253 done
|
pascal@4447
|
254 }
|
pascal@4447
|
255
|
pascal@4447
|
256 # Here we pack all flavors found in the packlist.
|
pascal@4447
|
257 pack_flavors()
|
pascal@4447
|
258 {
|
pascal@4447
|
259 [ -s $DB_DIR/packlist ] || return
|
pascal@4447
|
260 [ $PACKAGES_REPOSITORY/packages.list -nt /var/lib/tazpkg/packages.list ] &&
|
pascal@4447
|
261 cp -a $PACKAGES_REPOSITORY/packages.list /var/lib/tazpkg/packages.list
|
pascal@4447
|
262 cd $PACKAGES_REPOSITORY
|
pascal@4447
|
263 for flavor in $(cat $DB_DIR/packlist)
|
pascal@4447
|
264 do
|
pascal@4447
|
265 tazlito pack-flavor $flavor
|
pascal@4447
|
266 # Remove flavor from the packlist and empty lines for HTML <pre>.
|
pascal@4447
|
267 sed -i /"^$flavor$"/d $DB_DIR/packlist
|
pascal@4447
|
268 sed -i '/^$/d' $DB_DIR/packlist
|
pascal@4447
|
269 done
|
pascal@4447
|
270 cd - > /dev/null
|
pascal@4447
|
271 }
|
pascal@4447
|
272
|
pankso@3512
|
273 # Running 'tazbb report' should not cook anything and --verbose option
|
pankso@3512
|
274 # can be used to display more messages.
|
pankso@3512
|
275 check_wok()
|
pankso@3512
|
276 {
|
pankso@3512
|
277 # Clean up last results.
|
pankso@3512
|
278 rm -f $DB_DIR/cooklist && touch $DB_DIR/cooklist
|
pankso@3512
|
279 rm -f $DB_DIR/report && touch $DB_DIR/report
|
pankso@3512
|
280 rm -f $DB_DIR/unbuilt && touch $DB_DIR/unbuilt
|
pankso@3512
|
281 echo "Checking all files in: $HG_WOK"
|
pankso@3512
|
282 echo "================================================================================"
|
pankso@3512
|
283 echo "(checking wok)" > $DB_DIR/running
|
pankso@3512
|
284 for pkg in $HG_WOK/*
|
pankso@3512
|
285 do
|
pankso@3512
|
286 EXTRAVERSION=""
|
pankso@3512
|
287 WANTED=""
|
pankso@3512
|
288 . $pkg/receipt
|
pankso@3512
|
289 [ "$2" = "--verbose" ] && echo "Package : $PACKAGE"
|
pankso@3512
|
290 # Skip blocked packages.
|
pankso@3512
|
291 if grep -qs "^$PACKAGE$" $DB_DIR/blocked; then
|
pankso@3512
|
292 echo "Blocked : $PACKAGE ($VERSION)" && continue
|
pankso@3512
|
293 fi
|
pankso@3512
|
294
|
pascal@4447
|
295 # Some packages may compute VERSION at cook time (bristuff)
|
pascal@4447
|
296 if grep -q ^get_version $pkg/receipt; then
|
pankso@3512
|
297 . $BUILD_WOK/$PACKAGE/taz/*/receipt
|
pankso@3512
|
298 fi
|
pankso@3512
|
299
|
pankso@3537
|
300 # First check if package exit. Package naming _must_ be in the form of:
|
pankso@3512
|
301 # $PACKAGE-$VERSION or $PACKAGE-${VERSION}$EXTRAVERSION (Kernel string).
|
pankso@3512
|
302 if [ ! -f $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg ]; then
|
pankso@3512
|
303 [ -z "$EXTRAVERSION" ] && EXTRAVERSION="_$KERNEL"
|
pankso@3512
|
304 if [ ! -f $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg ]; then
|
pankso@3512
|
305 [ "$1" = "report" ] && echo "Missing : $PACKAGE ($VERSION)"
|
pankso@3512
|
306 echo "Missing : $PACKAGE ($VERSION)" >> $DB_DIR/report
|
pankso@3512
|
307 echo "$PACKAGE" >> $DB_DIR/cooklist
|
pankso@3512
|
308 fi
|
pankso@3512
|
309 else
|
pankso@3512
|
310 # Check if package is up-to-date.
|
pascal@5881
|
311 PKG_YEAR=`date -u -r $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}${EXTRAVERSION}.tazpkg '+%Y'`
|
pascal@5881
|
312 PKG_DATE=`date -u -r $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}${EXTRAVERSION}.tazpkg '+%m%d%H%M'`
|
pankso@3512
|
313 for file in `find $pkg -type f`
|
pankso@3512
|
314 do
|
pascal@5881
|
315 FILE_YEAR=`date -u -r $file '+%Y'`
|
pascal@5881
|
316 FILE_DATE=`date -u -r $file '+%m%d%H%M'`
|
pankso@3512
|
317 [ "$2" = "--verbose" ] && echo " -> Checking: $file"
|
pascal@5881
|
318 if [ "$FILE_YEAR" -ge "$PKG_YEAR" -a "$FILE_DATE" -gt "$PKG_DATE" ] && ! grep -q $PACKAGE $DB_DIR/cooklist; then
|
pankso@3512
|
319 [ "$1" = "report" ] && echo "Refresh : $PACKAGE ($VERSION)"
|
pankso@3512
|
320 echo "Refresh : $PACKAGE ($VERSION)" >> $DB_DIR/report
|
pankso@3512
|
321 echo "$PACKAGE" >> $DB_DIR/cooklist
|
pankso@3512
|
322 fi
|
pankso@3512
|
323 done
|
pankso@3512
|
324 fi
|
pankso@3537
|
325 # Now check if package is built and not already in the list.
|
pankso@3512
|
326 if [ ! -d $BUILD_WOK/$PACKAGE/taz ] && ! grep -q $PACKAGE $DB_DIR/cooklist; then
|
pankso@3512
|
327 [ "$1" = "report" ] && echo "Unbuilt : $PACKAGE ($VERSION)"
|
pankso@3512
|
328 echo "Unbuilt : $PACKAGE ($VERSION)" >> $DB_DIR/report
|
pankso@3512
|
329 echo "$PACKAGE" >> $DB_DIR/cooklist
|
pankso@3512
|
330 fi
|
pankso@3512
|
331 # Rebuild unbuilt packages list with link to log file. This list
|
pankso@3537
|
332 # is also generated by cook_inslall to have real time stats.
|
pankso@3512
|
333 if [ ! -d $BUILD_WOK/$PACKAGE/taz ]; then
|
pascal@5823
|
334 echo "<a href=\"log.php?package=$(escape $PACKAGE)$LOG_SUFFIX\">$PACKAGE</a>" \
|
pankso@3512
|
335 >> $DB_DIR/unbuilt
|
pankso@3512
|
336 fi
|
pankso@3512
|
337 done
|
pankso@3512
|
338 packages_summary
|
pankso@3512
|
339 }
|
pankso@3512
|
340
|
pankso@3537
|
341 # Create a new cooklist and summary (dont modify report) so 'tazbb cook-commit'
|
pankso@3512
|
342 # can cook last changes.
|
pankso@3512
|
343 check_commit()
|
pankso@3512
|
344 {
|
pankso@3512
|
345 echo "(checking commit)" > $DB_DIR/running
|
pankso@3512
|
346 cd $HG_WOK
|
pankso@3512
|
347 # Clean up last results.
|
pankso@3512
|
348 rm -f $DB_DIR/cooklist && touch $DB_DIR/cooklist
|
pankso@3512
|
349 # Get the name of modified packages by the revision range. +1 last
|
pankso@3537
|
350 # commit was build by the previous build.
|
pankso@3512
|
351 LAST_REV=$(($LAST_REV+1))
|
pankso@3512
|
352 echo -e "Will cook from revision $LAST_REV to $NEW_REV\n"
|
pankso@3512
|
353 for file in `hg log --rev=$LAST_REV:$NEW_REV --template '{files}\n'`
|
pankso@3512
|
354 do
|
pankso@3512
|
355 pkg=`echo $file | cut -d "/" -f 1`
|
pankso@3512
|
356 if ! grep -q ^$pkg$ $DB_DIR/cooklist; then
|
pankso@3512
|
357 . $pkg/receipt
|
pankso@3512
|
358 echo "Commit : $PACKAGE ($VERSION)" >> $DB_DIR/report
|
pankso@3512
|
359 echo "$PACKAGE" >> $DB_DIR/cooklist
|
pankso@3512
|
360 fi
|
pankso@3512
|
361 done
|
pankso@3512
|
362 packages_summary
|
pankso@3512
|
363 }
|
pankso@3512
|
364
|
pascal@4174
|
365 # Cook one package
|
pascal@4174
|
366 cook_package()
|
pascal@4174
|
367 {
|
pascal@4174
|
368 EXTRAVERSION=""
|
pascal@4174
|
369 DEPENDS=""
|
pascal@4174
|
370 BUILD_DEPENDS=""
|
pascal@4174
|
371 SOURCE=""
|
pascal@4174
|
372 WANTED=""
|
pascal@5823
|
373 echo "(cooking <a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>)" > $DB_DIR/running
|
pascal@4174
|
374 tazwok clean $pkg
|
pascal@4174
|
375 script -c "echo 'install' | tazwok cook $pkg" $LOG_DIR/$pkg.log
|
pascal@4174
|
376 # Install new package (important for new shared libs). Note
|
pascal@4174
|
377 # that tests are done separatly with 'test_packages' and should
|
pascal@4174
|
378 # be done by tazwok.
|
pascal@4174
|
379 if [ -f $BUILD_WOK/$pkg/taz/*/receipt ]; then
|
pascal@5013
|
380 TAZBB_NO_INSTALL=""
|
pascal@4174
|
381 . $BUILD_WOK/$pkg/taz/*/receipt
|
pascal@5013
|
382 [ -n "$TAZBB_NO_INSTALL" ] && return 0
|
pascal@4174
|
383 echo "(installing $PACKAGE-${VERSION}$EXTRAVERSION.tazpkg)" \
|
pascal@4174
|
384 > $DB_DIR/running
|
pascal@4174
|
385 yes | tazpkg install \
|
pascal@4174
|
386 $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg \
|
pascal@4174
|
387 --forced
|
pascal@4174
|
388 return 0
|
pascal@4174
|
389 fi
|
pascal@4174
|
390 return 1
|
pascal@4174
|
391 }
|
pascal@4174
|
392
|
pascal@4174
|
393 # Sort list according WANTED and BUILD_DEPENDS
|
pascal@4174
|
394 sort_cook_list()
|
pascal@4174
|
395 {
|
pascal@4174
|
396 sort | while read pkg; do
|
pascal@4174
|
397 echo -n "$pkg"
|
pascal@4174
|
398 WANTED=""
|
pascal@4174
|
399 BUILD_DEPENDS=""
|
pascal@4174
|
400 . $BUILD_WOK/$pkg/receipt
|
pascal@4185
|
401 MISSING=""
|
pascal@4174
|
402 for i in $WANTED $BUILD_DEPENDS ; do
|
pascal@4174
|
403 if [ ! -f $BUILD_WOK/$i/taz/*/receipt ]; then
|
pascal@4185
|
404 case " $MISSING " in
|
pascal@4185
|
405 *\ $i\ *);;
|
pascal@4185
|
406 *) echo -n " $i";;
|
pascal@4185
|
407 esac
|
pascal@4185
|
408 MISSING="$MISSING $i"
|
pascal@4174
|
409 fi
|
pascal@4174
|
410 done
|
pascal@4174
|
411 echo ""
|
pascal@4185
|
412 done | awk '
|
pascal@4185
|
413 function show(name)
|
pascal@4185
|
414 {
|
pascal@4185
|
415 print name;
|
pascal@4185
|
416 got[name]++;
|
pascal@4185
|
417 if (revdepcnt[name] > 0)
|
pascal@4185
|
418 for (i = split(revdep[name], pkg, " "); i > 0; i--)
|
pascal@4185
|
419 if (--depcnt[pkg[i]] == 0) show(pkg[i]);
|
pascal@4185
|
420 }
|
pascal@4185
|
421
|
pascal@4185
|
422 {
|
pascal@4185
|
423 if ($2 == "") show($1);
|
pascal@4185
|
424 else {
|
pascal@4185
|
425 depcnt[$1] = NF - 1;
|
pascal@4185
|
426 unres = unres " " $1;
|
pascal@4185
|
427 for (i = 2; i <= NF; i++) {
|
pascal@4185
|
428 if (got[$i] > 0) continue;
|
pascal@4185
|
429 revdepcnt[$i]++;
|
pascal@4185
|
430 revdep[$i] = revdep[$i] " " $1;
|
pascal@4174
|
431 }
|
pascal@4174
|
432 }
|
pascal@4185
|
433 }
|
pascal@4185
|
434 END {
|
pascal@4185
|
435 for (i = split(unres, pkg, " "); i > 0; i--)
|
pascal@4185
|
436 if (depcnt[pkg[i]] > 0) print pkg[i];
|
pascal@4185
|
437 }
|
pascal@4174
|
438 '
|
pascal@4174
|
439 }
|
pascal@4174
|
440
|
pankso@3512
|
441 # Here we cook all packages found in the cooklist.
|
pankso@3512
|
442 cook_install()
|
pankso@3512
|
443 {
|
pankso@3512
|
444 echo "" > $DB_DIR/unbuilt
|
pascal@4174
|
445 for pkg in `cat $DB_DIR/cooklist | sort_cook_list`
|
pankso@3512
|
446 do
|
pascal@4174
|
447 if ! cook_package $pkg; then
|
pankso@3512
|
448 # Link to build log.
|
pascal@5823
|
449 echo "<a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>" >> \
|
pankso@3512
|
450 $DB_DIR/unbuilt
|
pankso@3512
|
451 fi
|
pascal@4996
|
452 missing_depends="$(check_depends_pkg $pkg)"
|
pascal@4996
|
453 if [ -n "$missing_depends" ]; then
|
pascal@4996
|
454 cat >> $LOG_DIR/$pkg.log <<EOT
|
pascal@4996
|
455
|
pascal@4996
|
456 Update $pkg receipt for DEPENDS :
|
pascal@4996
|
457 The package $pkg depends on packages $missing_depends
|
pascal@4996
|
458
|
pascal@4996
|
459 EOT
|
pascal@4996
|
460 # Unbuild package
|
pascal@4996
|
461 rm -rf $BUILD_WOK/$pkg/taz
|
pascal@4996
|
462 # Link to build log.
|
pascal@5823
|
463 echo "<a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>" >> \
|
pascal@4996
|
464 $DB_DIR/unbuilt
|
pascal@4996
|
465 fi
|
pankso@3512
|
466 # Remove package from the cooklist and empty lines for HTML <pre>.
|
pankso@3512
|
467 sed -i /"^$pkg$"/d $DB_DIR/cooklist
|
pankso@3512
|
468 sed -i '/^$/d' $DB_DIR/cooklist
|
pankso@3537
|
469 packages_summary_update
|
pankso@3512
|
470 done
|
pankso@3512
|
471 }
|
pankso@3512
|
472
|
pascal@4996
|
473 # Build depends_to_skip list with packages to remove from depends_to_add list
|
pascal@4996
|
474 # These packages are already present in depends_to_add trees
|
pascal@4996
|
475 scan_depends_to_skip()
|
pascal@4996
|
476 {
|
pascal@4996
|
477 local i
|
pascal@4996
|
478 case " $depends_to_skip " in
|
pascal@4996
|
479 *\ $1\ *) return;;
|
pascal@4996
|
480 esac
|
pascal@4996
|
481 [ -d $BUILD_WOK/$1 ] || return
|
pascal@4996
|
482 DEPENDS=""
|
pascal@4996
|
483 . $BUILD_WOK/$1/receipt
|
pascal@4996
|
484 for i in $DEPENDS ; do
|
pascal@4996
|
485 case " $depends_to_add " in
|
pascal@4996
|
486 *\ $i\ *) depends_to_skip="$depends_to_skip $i";;
|
pascal@4996
|
487 esac
|
pascal@4996
|
488 done
|
pascal@4996
|
489 for i in $DEPENDS ; do
|
pascal@4996
|
490 scan_depends_to_skip $i
|
pascal@4996
|
491 done
|
pascal@4996
|
492 }
|
pascal@4996
|
493
|
pascal@4996
|
494 # Reduce depends list by scanning nested depends
|
pascal@4996
|
495 show_missing_depends()
|
pascal@4996
|
496 {
|
pascal@4996
|
497 local i
|
pascal@4996
|
498 depends_to_add=""
|
pascal@4996
|
499 depends_to_skip="$2"
|
pascal@4996
|
500 for i in $1 ; do
|
pascal@4996
|
501 case " $depends_to_add " in
|
pascal@4996
|
502 *\ $i\ *) continue;;
|
pascal@4996
|
503 esac
|
pascal@4996
|
504 depends_to_add="$depends_to_add$i "
|
pascal@4996
|
505 done
|
pascal@4996
|
506 for i in $depends_to_add ; do
|
pascal@4996
|
507 scan_depends_to_skip $i
|
pascal@4996
|
508 done
|
pascal@4996
|
509 for i in $depends_to_add ; do
|
pascal@4996
|
510 case " $depends_to_skip " in
|
pascal@4996
|
511 *\ $i\ *) continue;;
|
pascal@4996
|
512 esac
|
pascal@4996
|
513 echo -n "$i "
|
pascal@4996
|
514 done
|
pascal@4996
|
515 }
|
pascal@4996
|
516
|
pascal@4996
|
517 # Build all_depends variable
|
pascal@4996
|
518 scan_dep()
|
pascal@4996
|
519 {
|
pascal@4996
|
520 local i
|
pascal@4996
|
521 all_depends="$all_depends$PACKAGE "
|
pascal@4996
|
522 for i in $DEPENDS $SUGGESTED ; do
|
pascal@4996
|
523 case " $all_depends " in
|
pascal@4996
|
524 *\ $i\ *) continue;;
|
pascal@4996
|
525 esac
|
pascal@4996
|
526 [ -d $BUILD_WOK/$i ] || {
|
pascal@4996
|
527 all_depends="$all_depends$i "
|
pascal@4996
|
528 continue
|
pascal@4996
|
529 }
|
pascal@4996
|
530 DEPENDS=""
|
pascal@4996
|
531 SUGGESTED=""
|
pascal@4996
|
532 . $BUILD_WOK/$i/receipt
|
pascal@4996
|
533 scan_dep
|
pascal@4996
|
534 done
|
pascal@4996
|
535 }
|
pascal@4996
|
536
|
pascal@4996
|
537 # Check for ELF file
|
pascal@4996
|
538 is_elf()
|
pascal@4996
|
539 {
|
pascal@4996
|
540 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
|
pascal@4996
|
541 }
|
pascal@4996
|
542
|
pascal@4996
|
543 # Print shared library dependencies
|
pascal@4996
|
544 ldd()
|
pascal@4996
|
545 {
|
pascal@4996
|
546 LD_PRELOAD="" LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@4996
|
547 }
|
pascal@4996
|
548
|
pascal@4996
|
549 # scan a file for shared libraries and display according package names
|
pascal@4996
|
550 check_depends_file()
|
pascal@4996
|
551 {
|
pascal@4996
|
552 file=$1
|
pascal@4996
|
553 is_elf $file || continue
|
pascal@4996
|
554 case "$file" in
|
pascal@4996
|
555 *.o|*.ko|*.ko.gz) continue;;
|
pascal@4996
|
556 esac
|
pascal@4996
|
557 [ -s /tmp/files.list.tazbb$$ ] ||
|
pascal@4996
|
558 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma >/tmp/files.list.tazbb$$
|
pascal@4996
|
559 ldd $file | while read lib rem; do
|
pascal@4996
|
560 case "$lib" in
|
pascal@4996
|
561 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@4996
|
562 continue;;
|
pascal@4996
|
563 esac
|
pascal@4996
|
564 for dep in $(grep $lib /tmp/files.list.tazbb$$ | cut -d: -f1); do
|
pascal@4996
|
565 case " $all_depends " in
|
pascal@4996
|
566 *\ $dep\ *) continue 2;;
|
pascal@4996
|
567 esac
|
pascal@4996
|
568 for vdep in $(grep $dep $PACKAGES_REPOSITORY/packages.equiv | cut -d= -f1); do
|
pascal@4996
|
569 case " $all_depends " in
|
pascal@4996
|
570 *\ $vdep\ *) continue 3;;
|
pascal@4996
|
571 esac
|
pascal@4996
|
572 done
|
pascal@4996
|
573 done
|
pascal@4996
|
574 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@4996
|
575 all_depends="$all_depends $dep"
|
pascal@4996
|
576 if [ -n "$VERBOSE" ]; then
|
pascal@4996
|
577 echo "${file#*fs} depends on package $dep for the shared library $lib" 1>&2
|
pascal@4996
|
578 fi
|
pascal@4996
|
579 echo -n "$dep "
|
pascal@4996
|
580 done
|
pascal@4996
|
581 }
|
pascal@4996
|
582
|
pascal@4996
|
583 DEFAULT_DEPENDS="glibc-base"
|
pascal@4996
|
584
|
pascal@4996
|
585 # scan a package for shared libraries and display missing package in DEPENDS
|
pascal@4996
|
586 check_depends_pkg()
|
pascal@4996
|
587 {
|
pascal@4996
|
588 pkg=$1
|
pascal@4996
|
589 echo "(checking depends for $pkg)" > $DB_DIR/running
|
pascal@4996
|
590 tmp=/tmp/tazbb$$
|
pascal@4996
|
591 mkdir $tmp
|
pascal@4996
|
592 package=$(basename $pkg)
|
pascal@4996
|
593 if ! cd ${package%%-*}*/taz/${package%.tazpkg}/.. 2> /dev/null; then
|
pascal@4996
|
594 cd $tmp
|
pascal@4996
|
595 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@4996
|
596 fi
|
pascal@4996
|
597 . */receipt
|
pascal@4996
|
598 all_depends="$DEFAULT_DEPENDS "
|
pascal@4996
|
599 scan_dep
|
pascal@4996
|
600 toadd=$(find */fs -type f | while read file ; do
|
pascal@4996
|
601 check_depends_file $file
|
pascal@4996
|
602 done)
|
pascal@4996
|
603 . */receipt
|
pascal@4996
|
604 rm -rf */
|
pascal@4996
|
605 cd - > /dev/null
|
pascal@4996
|
606 rm -rf $tmp
|
pascal@4996
|
607 show_missing_depends "$toadd" "$DEPENDS $SUGGESTED"
|
pascal@4996
|
608 }
|
pascal@4996
|
609
|
pascal@4996
|
610 check_depends_this_file()
|
pascal@4996
|
611 {
|
pascal@4996
|
612 file=$1
|
pascal@4996
|
613 all_depends="$DEFAULT_DEPENDS "
|
pascal@4996
|
614 scan_dep
|
pascal@4996
|
615 check_depends_file $file
|
pascal@4996
|
616 }
|
pascal@4996
|
617
|
pankso@3512
|
618 # Remove old packages in the build wok and clean pkgs repository. The
|
pankso@3512
|
619 # Hg wok is copied into the build wok so packages removed by hg must be
|
pankso@3512
|
620 # removed. To remove old packages in the repository we look into the
|
pankso@3537
|
621 # build wok and dont remove unbuilt packages. Clean-up will also remove
|
pankso@3512
|
622 # all corrupted packages.
|
pankso@3512
|
623 clean_up()
|
pankso@3512
|
624 {
|
pankso@3512
|
625 touch $DB_DIR/removed
|
pankso@3512
|
626 echo -e "\nCleaning the build wok, old and corrupted packages...\n"
|
pankso@3512
|
627 echo "(cleaning)" > $DB_DIR/running
|
pankso@4208
|
628 for pkg in `ls $BUILD_WOK`
|
pankso@3512
|
629 do
|
pankso@4208
|
630 if [ ! -d $HG_WOK/$pkg ]; then
|
pankso@3512
|
631 case $2 in
|
pankso@3512
|
632 --dry-run)
|
pankso@3512
|
633 echo "Removing directory : $pkg" ;;
|
pankso@3512
|
634 --verbose)
|
pankso@3512
|
635 echo "Removing directory : $pkg"
|
pankso@3512
|
636 rm -rf $BUILD_WOK/$pkg ;;
|
pankso@3512
|
637 *)
|
pankso@3512
|
638 rm -rf $BUILD_WOK/$pkg ;;
|
pankso@3512
|
639 esac
|
pankso@3512
|
640 fi
|
pankso@3512
|
641 done
|
pankso@3512
|
642 # Build a packages list with EXTRAVERSION so we can grep into it.
|
pankso@3512
|
643 rm -f $DB_DIR/packaged && touch $DB_DIR/packaged
|
pankso@3512
|
644 for receipt in $BUILD_WOK/*/taz/*/receipt
|
pankso@3512
|
645 do
|
pankso@3512
|
646 EXTRAVERSION=""
|
pankso@3512
|
647 . $receipt
|
pankso@3512
|
648 echo "$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg" >> $DB_DIR/packaged
|
pankso@3512
|
649 done
|
pankso@3512
|
650 for pkg in `cd $PACKAGES_REPOSITORY && ls *.tazpkg`
|
pankso@3512
|
651 do
|
pankso@3512
|
652 if ! grep -q "^$pkg$" $DB_DIR/packaged; then
|
pankso@3512
|
653 case $2 in
|
pankso@3512
|
654 --dry-run)
|
pankso@3512
|
655 echo "Removing package : $pkg" ;;
|
pankso@3512
|
656 --verbose)
|
pankso@3512
|
657 echo "Removing package : $pkg"
|
pankso@3512
|
658 echo "$pkg" >> $DB_DIR/removed
|
pankso@3512
|
659 rm -f $PACKAGES_REPOSITORY/$pkg ;;
|
pankso@3512
|
660 *)
|
pankso@3512
|
661 echo "$pkg" >> $DB_DIR/removed
|
pankso@3512
|
662 rm -f $PACKAGES_REPOSITORY/$pkg ;;
|
pankso@3512
|
663 esac
|
pankso@3512
|
664 fi
|
pankso@3512
|
665 done
|
pankso@3512
|
666 # Remove all corrupted packages
|
pankso@3512
|
667 for pkg in `cat $DB_DIR/corrupted | awk '{ print $3 }'`
|
pankso@3512
|
668 do
|
pankso@3512
|
669 case $2 in
|
pankso@3512
|
670 --dry-run)
|
pankso@3512
|
671 echo "Removing corrupted: $pkg" ;;
|
pankso@3512
|
672 --verbose)
|
pankso@3512
|
673 echo "Removing corrupted: $pkg"
|
pankso@3512
|
674 echo "$pkg" >> $DB_DIR/removed
|
pankso@3512
|
675 rm -rf $PACKAGES_REPOSITORY/$pkg ;;
|
pankso@3512
|
676 *)
|
pankso@3512
|
677 echo "$pkg" >> $DB_DIR/removed
|
pankso@3512
|
678 rm -rf $PACKAGES_REPOSITORY/$pkg ;;
|
pankso@3512
|
679 esac
|
pankso@3512
|
680 done
|
pankso@3512
|
681 echo ""
|
pankso@3512
|
682 # Keep the 20 last removed packages list.
|
pankso@3512
|
683 cat $DB_DIR/removed | tail -n 20 > /tmp/removed.tail
|
pankso@3512
|
684 mv -f /tmp/removed.tail $DB_DIR/removed
|
pankso@5132
|
685 # Clean packages stuff/ directory
|
pankso@5132
|
686 echo -e "\nCleaning the build wok stuff/ directories...\n"
|
pankso@5132
|
687 for pkg in `ls $BUILD_WOK`
|
pankso@5132
|
688 do
|
pankso@5132
|
689 if [ -d "$BUILD_WOK/$pkg/stuff" ]; then
|
pankso@5132
|
690 cd $BUILD_WOK/$pkg
|
pankso@5132
|
691 for file in `find stuff -type f`
|
pankso@5132
|
692 do
|
pankso@5132
|
693 if [ ! -f "$HG_WOK/$pkg/$file" ]; then
|
pankso@5132
|
694 echo "Removing: $pkg/$file"
|
pankso@5132
|
695 rm $file
|
pankso@5132
|
696 fi
|
pankso@5132
|
697 done
|
pankso@5132
|
698 fi
|
pankso@5132
|
699 done
|
pankso@3512
|
700 }
|
pankso@3512
|
701
|
pankso@3512
|
702 blocked_urls()
|
pankso@3512
|
703 {
|
pankso@3512
|
704 rm -f $DB_DIR/blocked.urls
|
pankso@3512
|
705 for pkg in `cat $DB_DIR/blocked`
|
pankso@3512
|
706 do
|
pankso@3512
|
707 if [ -f $LOG_DIR/$pkg.log ]; then
|
pascal@5823
|
708 echo "<a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>" >> \
|
pankso@3512
|
709 $DB_DIR/blocked.urls
|
pankso@3512
|
710 else
|
pankso@3512
|
711 echo "$pkg" >> $DB_DIR/blocked.urls
|
pankso@3512
|
712 fi
|
pankso@3512
|
713 done
|
pankso@3512
|
714 }
|
pankso@3512
|
715
|
pankso@3512
|
716 # 4k, not a meta or a get-* package and no files = buggy package
|
pankso@3512
|
717 test_packages()
|
pankso@3512
|
718 {
|
pankso@3512
|
719 echo -e "\nTesting all packages in: $PACKAGES_REPOSITORY"
|
pankso@3512
|
720 echo "================================================================================"
|
pankso@3512
|
721 echo "(testing packages)" > $DB_DIR/running
|
pankso@3512
|
722 rm -f $DB_DIR/corrupted && touch $DB_DIR/corrupted
|
pankso@3512
|
723 for pkg in $PACKAGES_REPOSITORY/*.tazpkg
|
pankso@3512
|
724 do
|
pankso@3512
|
725 tmp=/tmp/bb-test.$$
|
pankso@3512
|
726 CATEGORY=""
|
pankso@3512
|
727 if du $pkg | grep -qw '^4' && ! echo `basename $pkg` | grep -q '^get-'; then
|
pankso@3512
|
728 mkdir -p $tmp && cd $tmp
|
pascal@4700
|
729 cpio -i receipt >/dev/null 2>&1 < $pkg
|
pankso@3512
|
730 . ./receipt
|
pankso@3512
|
731 if [ "$CATEGORY" != "meta" ]; then
|
pankso@3512
|
732 [ "$2" = "--verbose" ] && echo "Testing: $PACKAGE"
|
pascal@4850
|
733 cpio -i fs.cpio.gz fs.cpio.lzma >/dev/null 2>&1 < $pkg
|
pascal@4850
|
734 if [ ! -f fs.cpio.gz -a ! -f fs.cpio.lzma ]; then
|
pankso@3516
|
735 echo "Missing filesystem `basename $pkg`"
|
pankso@3512
|
736 if [ -f $LOG_DIR/$PACKAGE.log ];then
|
pascal@5823
|
737 echo "Missing filesystem `basename $pkg` <a href=\"log.php?package=$(escape $PACKAGE)$LOG_SUFFIX\">Log</a>" \
|
pankso@3512
|
738 >> $DB_DIR/corrupted
|
pankso@3512
|
739 else
|
pankso@3516
|
740 echo "Missing filesystem `basename $pkg`" \
|
pankso@3512
|
741 >> $DB_DIR/corrupted
|
pankso@3512
|
742 fi
|
pankso@3512
|
743 else
|
pascal@4850
|
744 ( zcat fs.cpio.gz 2> /dev/null || \
|
pascal@4850
|
745 unlzma -c fs.cpio.lzma ) | \
|
pascal@4850
|
746 cpio -id >/dev/null 2>&1
|
pascal@4395
|
747 files=`find fs -type f -o -type l`
|
pankso@3512
|
748 if [ -z "$files" ]; then
|
pankso@3516
|
749 echo "Empty filesystem `basename $pkg`"
|
pankso@3512
|
750 if [ -f $LOG_DIR/$PACKAGE.log ]; then
|
pascal@5823
|
751 echo "Empty filesystem `basename $pkg` <a href=\"log.php?package=$(escape $PACKAGE)$LOG_SUFFIX\">Log</a>" \
|
pankso@3512
|
752 >> $DB_DIR/corrupted
|
pankso@3512
|
753 else
|
pankso@3516
|
754 echo "Empty filesystem `basename $pkg`" \
|
pankso@3512
|
755 >> $DB_DIR/corrupted
|
pankso@3512
|
756 fi
|
pankso@3512
|
757 fi
|
pankso@3512
|
758 fi
|
pankso@3512
|
759 fi
|
pankso@3512
|
760 cd .. && rm -rf $tmp
|
pankso@3512
|
761 fi
|
pankso@3512
|
762 done
|
pankso@3512
|
763 packages_summary_update
|
pankso@3512
|
764 echo ""
|
pankso@3512
|
765 }
|
pankso@3512
|
766
|
pascal@4447
|
767 # Generate flavor list
|
pascal@4447
|
768 gen_flavor_list()
|
pascal@4447
|
769 {
|
pascal@4447
|
770 cd $PACKAGES_REPOSITORY
|
pascal@4447
|
771 noheader=""
|
pascal@4447
|
772 for i in *.flavor; do
|
pascal@4447
|
773 tazlito show-flavor $i --brief $noheader
|
pascal@4447
|
774 noheader="--noheader"
|
pascal@4447
|
775 done > flavors.list
|
pascal@4447
|
776 cd - > /dev/null
|
pascal@4447
|
777 }
|
pascal@4447
|
778
|
pankso@3512
|
779 case "$1" in
|
pankso@3512
|
780 list-pkgs)
|
pankso@3512
|
781 # List last cooked packages.
|
pankso@3512
|
782 list_packages ;;
|
pankso@3512
|
783 report)
|
pankso@3512
|
784 # Run in report mode. If an update is done we must cook-all to
|
pankso@3512
|
785 # rebuild all updated packages.
|
pankso@3512
|
786 [ "$2" == "--update" ] && update_wok $@ || echo ""
|
pankso@3512
|
787 check_wok $@
|
pascal@4447
|
788 check_flavors $@
|
pankso@3512
|
789 test_packages $@
|
pankso@3512
|
790 show_report ;;
|
pankso@4110
|
791 cook)
|
pankso@4110
|
792 # Cook, install and log a single package build.
|
pankso@4110
|
793 if [ -z $2 ]; then
|
pankso@4110
|
794 echo "Please specify a package on the command line."
|
pankso@4110
|
795 rm -f $LOCK_FILE && exit 0
|
pankso@4110
|
796 fi
|
pankso@4110
|
797 pkg=$2
|
pankso@4110
|
798 echo "Starting to cook and install: $pkg"
|
pascal@4174
|
799 if ! cook_package $pkg; then
|
pankso@4110
|
800 echo "Unable to install: $pkg"
|
pankso@4110
|
801 fi ;;
|
pankso@3512
|
802 cook-all)
|
pankso@3512
|
803 # Update wok, gen report (with cooklist), cook all packages, test,
|
pankso@3512
|
804 # clean, gen new report and lists.
|
pankso@3512
|
805 update_wok $@
|
pankso@3512
|
806 check_wok $@
|
pankso@3512
|
807 cook_install
|
pankso@3512
|
808 test_packages $@
|
pascal@5034
|
809 check_flavors $@
|
pascal@5034
|
810 pack_flavors
|
pankso@3512
|
811 clean_up $@
|
pankso@3512
|
812 check_wok $@
|
pankso@3512
|
813 echo "(generating lists)" > $DB_DIR/running
|
pankso@3512
|
814 tazwok gen-list --text
|
pascal@4447
|
815 check_flavors $@
|
pascal@4447
|
816 gen_flavor_list
|
pankso@3512
|
817 echo "" ;;
|
pankso@3512
|
818 cook-commit)
|
pankso@3512
|
819 # Cook all packages affected by the last commits in the wok.
|
pankso@3529
|
820 # Clean up is done only by cook-all to avoid rebuild of corrupted
|
pankso@3529
|
821 # packages on each commit.
|
pankso@3512
|
822 update_wok $@
|
pankso@3512
|
823 check_commit
|
pankso@3512
|
824 cook_install
|
pankso@3512
|
825 test_packages $@
|
pascal@5034
|
826 check_flavors $@
|
pascal@5034
|
827 pack_flavors
|
pankso@3512
|
828 check_wok $@
|
pascal@5034
|
829 check_flavors $@
|
pankso@3512
|
830 echo "(generating lists)" > $DB_DIR/running
|
pankso@3512
|
831 tazwok gen-list --text
|
pascal@4447
|
832 gen_flavor_list
|
pankso@3512
|
833 echo "" ;;
|
pankso@3512
|
834 block)
|
pankso@3512
|
835 # Add a pkg name to the list of blocked packages.
|
pankso@3512
|
836 echo ""
|
pankso@3512
|
837 if grep -qs "^$2$" $DB_DIR/blocked; then
|
pankso@3512
|
838 echo -e "$2 is already in the blocked packages list."
|
pankso@3512
|
839 else
|
pankso@3512
|
840 echo -n "Adding $2 to : $DB_DIR/blocked... "
|
pankso@3512
|
841 echo "$2" >> $DB_DIR/blocked && echo "Done"
|
pankso@3512
|
842 if grep -q "^$2$" $DB_DIR/cooklist; then
|
pankso@3512
|
843 echo -n "Removing $2 from : $DB_DIR/cooklist... "
|
pankso@3512
|
844 sed -i /"^$2$"/d $DB_DIR/cooklist && echo "Done"
|
pankso@3512
|
845 packages_summary_update
|
pankso@3512
|
846 fi
|
pankso@3512
|
847 fi
|
pankso@3512
|
848 blocked_urls
|
pankso@3512
|
849 echo "" ;;
|
pankso@3512
|
850 unblock)
|
pankso@3512
|
851 # Remove a pkg name from the list of blocked packages.
|
pankso@3512
|
852 echo ""
|
pankso@3512
|
853 if grep -qs "^$2$" $DB_DIR/blocked; then
|
pankso@3512
|
854 echo -n "Removing $2 from : $DB_DIR/blocked... "
|
pankso@3512
|
855 sed -i /"^$2$"/d $DB_DIR/blocked
|
pankso@3512
|
856 sed -i '/^$/d' $DB_DIR/blocked && echo "Done"
|
pankso@3512
|
857 echo -n "Adding $2 to : $DB_DIR/cooklist... "
|
pankso@3512
|
858 echo "$2" >> $DB_DIR/cooklist && echo "Done"
|
pankso@3512
|
859 packages_summary_update
|
pankso@3512
|
860 else
|
pankso@3512
|
861 echo -e "$2 is not in the blocked packages list."
|
pankso@3512
|
862 fi
|
pankso@3512
|
863 blocked_urls
|
pankso@3512
|
864 echo "" ;;
|
pankso@3512
|
865 test-pkgs)
|
pankso@3537
|
866 # Start a test suite on all builded packages.
|
pankso@3512
|
867 test_packages $@ ;;
|
pankso@3512
|
868 test-suite)
|
pankso@3537
|
869 # Start a test suite on all builded package and the wok using
|
pankso@3512
|
870 # the great 'tazwok check'.
|
pankso@3512
|
871 #
|
pankso@3512
|
872 # test_packages > $LOG_DIR/test-suite.log
|
pankso@3512
|
873 # tazwok check >> $LOG_DIR/test-suite.log
|
pankso@3512
|
874 #
|
pankso@3512
|
875 test_packages $@
|
pankso@3512
|
876 script -c "tazwok check" $LOG_DIR/test-suite.log ;;
|
pankso@3590
|
877 mail)
|
pankso@3590
|
878 # Tazbbmail Pythom script wrapper.
|
pankso@3590
|
879 PACKAGE=$2
|
pankso@3590
|
880 tazbbmail $PACKAGE ;;
|
pankso@3512
|
881 clean-up)
|
pankso@3512
|
882 # Remove old packages and generate new packages lists.
|
pankso@3512
|
883 update_wok $@
|
pankso@3512
|
884 clean_up $@
|
pankso@3512
|
885 packages_summary_update
|
pankso@3512
|
886 [ "$2" != "--dry-run" ] && tazwok gen-list --text ;;
|
pankso@3512
|
887 clean-log)
|
pankso@3512
|
888 logs=`ls $LOG_DIR | wc -l`
|
pankso@3512
|
889 echo -n "Cleaning: $LOG_DIR... "
|
pankso@3512
|
890 rm -rf $LOG_DIR/*
|
pankso@3512
|
891 echo "$logs log removed" ;;
|
pascal@4996
|
892 check-depends)
|
pascal@4996
|
893 case "$2" in
|
pascal@4996
|
894 wok)
|
pascal@4996
|
895 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@4996
|
896 missing_depends="$(check_depends_pkg $pkg)"
|
pascal@4996
|
897 [ -n "$missing_depends" ] &&
|
pascal@4996
|
898 echo "The package $pkg depends on $missing_depends."
|
pascal@4996
|
899 done ;;
|
pascal@4996
|
900 package)
|
pascal@4996
|
901 pkg=$3
|
pascal@4996
|
902 VERBOSE=$4
|
pascal@4996
|
903 missing_depends="$(check_depends_pkg $pkg)"
|
pascal@4996
|
904 [ -n "$missing_depends" ] &&
|
pascal@4996
|
905 echo "The package $pkg depends on $missing_depends."
|
pascal@4996
|
906 ;;
|
pascal@4996
|
907 file)
|
pascal@4996
|
908 file=3
|
pascal@4996
|
909 VERBOSE=$4
|
pascal@4996
|
910 missing_depends="$(check_depends_this_file $file)"
|
pascal@4996
|
911 [ -n "$missing_depends" ] &&
|
pascal@4996
|
912 echo "The file $file depends on $missing_depends."
|
pascal@4996
|
913 ;;
|
pascal@4996
|
914 *) cat <<EOT
|
pascal@4996
|
915 check-depends wok check every package in wok.
|
pascal@4996
|
916 check-depends package <pkg> check one package.
|
pascal@4996
|
917 check-depends file <filename> check one file only.
|
pascal@4996
|
918 EOT
|
pascal@4996
|
919 ;;
|
pascal@4996
|
920 esac ;;
|
pankso@3512
|
921 *)
|
pankso@3512
|
922 usage ;;
|
pankso@3512
|
923 esac
|
pankso@3512
|
924
|
pankso@3512
|
925 echo "" > $DB_DIR/running
|
pascal@4996
|
926 rm -f $LOCK_FILE /tmp/files.list.tazbb$$
|
pankso@3512
|
927
|
pankso@3512
|
928 exit 0
|