-
Notifications
You must be signed in to change notification settings - Fork 2
/
bosh_prepare
executable file
·98 lines (88 loc) · 1.96 KB
/
bosh_prepare
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
#!/usr/bin/env bash
SRC=$(pwd)/blobs
SHELL=/bin/bash
AWK=awk
read_spec() {
local spec="$1"
$AWK '/^files:/ {
while (getline) {
if ($1 == "-") {
if ($3 ~ /#/) {
url=$3$4;
sub(/#/, "", url)
print $2"@"url;
}
} else {
next;
}
}
}' "$spec"
}
exec_download() {
local output="$1"
local url="$2"
local package=$(dirname "${output}")
local src=$(basename "${output}")
(
cd ${SRC}
if [ ! -s "${output}" ]; then
echo "* Downloading ${url} ..."
mkdir -p "${package}"
curl -L -s "${url}" -o "${output}"
fi
)
}
exec_prepare() {
local prepare="$1"
(
cd ${SRC}
${SHELL} "${prepare}"
)
}
download() {
for script in $(pwd)/packages/*/spec ; do
local base=$(dirname "${script}")
local prepare="${base}/prepare"
if [ -s "${prepare}" ]; then
echo "* Procesing ${prepare} ..."
exec_prepare "$prepare"
else
echo "* Procesing ${script} ..."
for spec in $(read_spec "${script}"); do
local downloadfile=$(echo $spec | cut -d'@' -f 1)
local downloadurl=$(echo $spec | cut -d'@' -f 2)
exec_download "${downloadfile}" "${downloadurl}"
done
fi
done
}
delete() {
(
cd ${SRC}
for b in $(ls ${SRC}/); do
echo "Deleting $b ... "
rm -r $b
done
)
}
# Run!
if [ $# != 1 ]; then
echo "Download source packages for local testing by reading the links "
echo "commented out in the packages/PACKAGE/spec files"
echo
echo "Usage: $(basename $0) download|delete"
exit 1
fi
mkdir -p $SRC
case "$1" in
download)
download
;;
delete)
delete
;;
*)
echo "Usage: $(basename $0) download|delete"
exit 1
;;
esac