comparison Scripts/bulk.sh @ 781:ca249bc7e3a7

scripts: add basic bulk.sh
author David Demelier <markand@malikania.fr>
date Sun, 11 Aug 2019 18:12:19 +0200
parents
children ddab65a5b3f5
comparison
equal deleted inserted replaced
780:5f73d478ab71 781:ca249bc7e3a7
1 #!/bin/sh
2 #
3 # bulk.sh -- basic bulk build script
4 #
5 # Copyright (c) 2019 David Demelier <markand@malikania.fr>
6 #
7 # Permission to use, copy, modify, and/or distribute this software for any
8 # purpose with or without fee is hereby granted, provided that the above
9 # copyright notice and this permission notice appear in all copies.
10 #
11 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 #
19
20 alias basename="busybox basename"
21 alias dirname="busybox dirname"
22 alias echo="busybox echo"
23 alias find="busybox find"
24 alias grep="busybox grep"
25 alias realpath="busybox realpath"
26
27 TOP=$(realpath $(dirname $0)/../)
28 PROGNAME=$(basename $0)
29
30 rm -f /tmp/fail.*
31
32 force=0
33 missing=0
34
35 #
36 # build
37 #
38 # Build a package if not already installed.
39 #
40 build()
41 {(
42 name=$(basename $1)
43
44 if [ $force -eq 1 ] || ! vpk info $name > /dev/null 2>&1; then
45 # TODO: dependencies here.
46 echo -n "building $name: "
47
48 cd $TOP/$pkg
49
50 if vpk build > /tmp/fail.$name 2>&1; then
51 rm -f /var/lib/vpk/$name
52 rm -f /tmp/fail.$name
53 echo "ok"
54 yes | vpk install -t none /tmp/vpk/$name*pkg.txz
55 else
56 echo "failed"
57 return 1
58 fi
59 fi
60 )}
61
62 #
63 # build_missing
64 #
65 # Rebuild a package that is installed but not available in /tmp/vpk.
66 #
67 build_missing()
68 {
69 name=$(basename $1)
70 rebuild=0
71
72 # Build if not installed at all.
73 if ! vpk info $name > /dev/null 2>&1; then
74 rebuild=1
75 else
76 version=$(vpk info -m version $name 2> /dev/null)
77 revision=$(vpk info -m revision $name 2> /dev/null)
78 filename="$name#$version-$revision-pkg.txz"
79
80 if [ ! -f /tmp/vpk/$filename ]; then
81 rebuild=1
82 fi
83 fi
84
85 if [ $rebuild -eq 1 ]; then
86 build $1
87 fi
88 }
89
90 usage()
91 {
92 echo "usage: bulk.sh [-fm] [packages...]"
93 exit 1
94 }
95
96 while getopts "fm" arg; do
97 case $arg in
98 f)
99 force=1
100 ;;
101 m)
102 missing=1
103 force=1
104 ;;
105 *)
106 usage
107 ;;
108 esac
109 done
110
111 shift $((OPTIND - 1))
112
113 $TOP/Scripts/list.sh "$@" | while read -r pkg; do
114 if [ $missing -eq 1 ]; then
115 build_missing $pkg
116 else
117 build $pkg
118 fi
119 done