rev |
line source |
al@603
|
1 #!/bin/sh -v
|
pankso@449
|
2 #
|
pankso@230
|
3 # Tiny CGI search engine for SliTaz packages on http://pkgs.slitaz.org/
|
pankso@230
|
4 # Christophe Lincoln <pankso@slitaz.org>
|
al@284
|
5 # Aleksej Bobylev <al.bobylev@gmail.com>
|
pankso@230
|
6 #
|
al@284
|
7
|
al@603
|
8 date_start="$(date -u +%s)"
|
al@603
|
9
|
slaxemulator@336
|
10 renice -n 19 $$
|
slaxemulator@336
|
11
|
al@603
|
12
|
al@284
|
13 # Parse query string
|
al@603
|
14
|
slaxemulator@320
|
15 . /etc/slitaz/slitaz.conf
|
pankso@266
|
16 . /usr/lib/slitaz/httphelper.sh
|
al@603
|
17 cache='/var/cache/pkgs'
|
al@603
|
18 mkdir -p "$cache"
|
al@603
|
19
|
al@603
|
20 _() { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
|
al@603
|
21 _n() { local T="$1"; shift; printf "$(gettext "$T")" "$@"; }
|
al@603
|
22 _p() { local S="$1" P="$2" N="$3"; shift 3; printf "$(ngettext "$S" "$P" "$N")" "$@"; }
|
al@603
|
23
|
al@603
|
24
|
pascal@456
|
25 [ -n "$MIRROR_URL" ] || MIRROR_URL="http://mirror.slitaz.org"
|
al@284
|
26
|
al@603
|
27
|
al@284
|
28 # User preferred language
|
al@284
|
29 # parameter $1 have priority; without parameter $1 - browser language only
|
al@284
|
30 # if we don't support any of user languages (or only en), then return C locale
|
al@603
|
31
|
al@284
|
32 user_lang() {
|
al@603
|
33 unset LANG
|
al@603
|
34 IFS=','
|
al@603
|
35 for lang in $1 $HTTP_ACCEPT_LANGUAGE; do
|
al@603
|
36 lang=${lang%;*}; lang=${lang# }; lang=${lang%-*}; lang=${lang%_*}
|
al@284
|
37 case "$lang" in
|
al@603
|
38 de) LANG='de_DE';;
|
al@603
|
39 en) LANG='en_US';;
|
al@603
|
40 es) LANG='es_ES';;
|
al@603
|
41 fr) LANG='fr_FR';;
|
al@603
|
42 it) LANG='it_IT';;
|
al@603
|
43 pl) LANG='pl_PL';;
|
al@603
|
44 pt) LANG='pt_BR';;
|
al@603
|
45 ru) LANG='ru_RU';;
|
al@603
|
46 sv) LANG='sv_SE';;
|
al@603
|
47 uk) LANG='uk_UA';;
|
al@603
|
48 zh) LANG='zh_TW';;
|
al@284
|
49 esac
|
al@603
|
50 [ -n "$LANG" ] && break
|
al@284
|
51 done
|
al@284
|
52 unset IFS
|
al@603
|
53 echo "${LANG:-C}"
|
al@284
|
54 }
|
al@284
|
55
|
al@284
|
56
|
al@293
|
57 # Part of query to indicate current debug mode
|
al@603
|
58
|
al@293
|
59 ifdebug() {
|
al@293
|
60 ifdebug="$(GET debug)"
|
al@603
|
61 [ -n "$ifdebug" ] && ifdebug="$1$ifdebug"
|
al@293
|
62 echo "$ifdebug"
|
al@284
|
63 }
|
al@284
|
64
|
al@603
|
65
|
al@293
|
66 # GET or POST variable
|
al@603
|
67
|
al@293
|
68 GETPOST() {
|
al@293
|
69 echo "$(POST $1)$(GET $1)"
|
al@293
|
70 }
|
al@293
|
71
|
al@603
|
72
|
al@603
|
73 # Nice URL replacer - to copy URL from address bar
|
slaxemulator@320
|
74 # TODO: deal with POST method of form submitting
|
al@603
|
75
|
slaxemulator@320
|
76 nice_url() {
|
slaxemulator@320
|
77 # if user submitted a form
|
al@603
|
78 if [ "$REQUEST_METHOD" == 'POST' -o -n "$(GET submit)" ]; then
|
slaxemulator@320
|
79 OBJECT="$(GETPOST object)"
|
slaxemulator@320
|
80 SEARCH="$(GETPOST query)"
|
slaxemulator@320
|
81 case $OBJECT in
|
slaxemulator@320
|
82 Package) NICE="package=$SEARCH";;
|
slaxemulator@320
|
83 Desc) NICE="desc=$SEARCH";;
|
slaxemulator@320
|
84 Tags) NICE="tags=$SEARCH";;
|
slaxemulator@336
|
85 Arch) NICE="arch=$SEARCH";;
|
slaxemulator@336
|
86 Bugs) NICE="bugs=$SEARCH";;
|
slaxemulator@320
|
87 Receipt) NICE="receipt=$SEARCH";;
|
slaxemulator@320
|
88 Depends) NICE="depends=$SEARCH";;
|
slaxemulator@320
|
89 BuildDepends) NICE="builddepends=$SEARCH";;
|
slaxemulator@320
|
90 File) NICE="file=$SEARCH";;
|
slaxemulator@320
|
91 File_list) NICE="filelist=$SEARCH";;
|
slaxemulator@320
|
92 FileOverlap) NICE="fileoverlap=$SEARCH";;
|
al@603
|
93 Category) NICE="category=$SEARCH";;
|
al@603
|
94 Maintainer) NICE="maintainer=$SEARCH";;
|
al@603
|
95 License) NICE="license=$SEARCH";;
|
slaxemulator@320
|
96 esac
|
al@603
|
97
|
slaxemulator@320
|
98 # version, if needed
|
slaxemulator@320
|
99 version="$(GETPOST version)"
|
al@603
|
100 if [ -n "$version" -a "$version" != 'cooking' -a "$version" != 'c' ]; then
|
al@603
|
101 NICE="$NICE&version=${version:0:1}"
|
slaxemulator@320
|
102 fi
|
al@603
|
103
|
slaxemulator@320
|
104 # lang, if needed
|
slaxemulator@320
|
105 query_lang="$(GETPOST lang)"
|
slaxemulator@320
|
106 pref_lang="$(user_lang)"
|
al@603
|
107 browser_lang="${pref_lang%_*}"
|
al@603
|
108 if [ -n "$query_lang" ]; then
|
al@603
|
109 COOKIE="lang=$query_lang"
|
al@603
|
110 else
|
al@603
|
111 COOKIE=''
|
slaxemulator@320
|
112 fi
|
al@603
|
113
|
slaxemulator@320
|
114 # verbose, if needed
|
slaxemulator@320
|
115 verboseq="$(GETPOST verbose)"
|
al@603
|
116 if [ -n "$verboseq" -a "$verboseq" != '0' ]; then
|
al@603
|
117 NICE="$NICE&verbose=1"
|
slaxemulator@320
|
118 fi
|
al@603
|
119
|
slaxemulator@320
|
120 # debug, if needed
|
slaxemulator@320
|
121 debugq="$(GET debug)"
|
al@603
|
122 if [ -n "$debugq" -a "$debugq" == 'debug' ]; then
|
al@603
|
123 NICE="$NICE&debug"
|
slaxemulator@320
|
124 fi
|
al@603
|
125
|
slaxemulator@320
|
126 # redirect
|
al@603
|
127 if [ -z "$COOKIE" ]; then
|
al@603
|
128 header "HTTP/1.1 301 Moved Permanently" "Location: ?$NICE"
|
al@603
|
129 else
|
al@603
|
130 header "HTTP/1.1 301 Moved Permanently" "Set-Cookie: $COOKIE" "Location: ?$NICE"
|
al@603
|
131 fi
|
slaxemulator@320
|
132 exit 0
|
al@293
|
133 fi
|
slaxemulator@320
|
134 }
|
al@284
|
135
|
al@603
|
136
|
slaxemulator@320
|
137 nice_url
|
al@284
|
138
|
al@261
|
139
|
al@603
|
140
|
pankso@268
|
141
|
al@261
|
142 # Internationalization
|
al@261
|
143 . /usr/bin/gettext.sh
|
al@284
|
144 export TEXTDOMAIN='tazpkg-web'
|
al@603
|
145 # Translate actions once
|
al@603
|
146 a_co="$(_ 'Cooker')"
|
al@603
|
147 a_dl="$(_ 'Download')"
|
al@603
|
148 a_rc="$(_ 'Receipt')"
|
pankso@239
|
149
|
al@603
|
150
|
al@603
|
151
|
al@603
|
152
|
al@603
|
153 # Cache icons to fast search
|
al@603
|
154 # Find the latest update in the "icons" folder
|
al@603
|
155 iconslast="$cache/icons.$(date -u +%s -r /var/www/pkgs/icons/$(ls -t /var/www/pkgs/icons | head -n1))"
|
al@603
|
156
|
al@603
|
157 if [ ! -f "$iconslast" ]; then
|
al@603
|
158 find "$cache" -name 'icons.*' -delete
|
al@603
|
159
|
al@603
|
160 (
|
al@603
|
161 cat icons/packages.icons
|
al@603
|
162 awk '{printf "%s\tcli\n",$1}' icons/packages-cli.icons
|
al@603
|
163 awk '{printf "%s\tfont\n",$1}' icons/packages-font.icons
|
al@603
|
164 awk '{printf "%s\ti18n\n",$1}' icons/packages-i18n.icons
|
al@603
|
165 awk '{printf "%s\tthm\n",$1}' icons/packages-thm.icons
|
al@603
|
166 ls icons/*.png | awk -F/ '{sub(/\.png/,"",$2);printf "%s\t%s\n", $2, $2}'
|
al@603
|
167 ) | sort > "$iconslast"
|
al@603
|
168 fi
|
al@603
|
169
|
al@603
|
170
|
al@603
|
171
|
al@603
|
172 unset SEARCH SLITAZ_VERSION
|
al@284
|
173 VERBOSE=0
|
al@603
|
174 s='selected'
|
al@284
|
175 for i in $(echo $QUERY_STRING | sed 's/[?&]/ /g'); do
|
al@284
|
176 case "$(echo $i | tr [A-Z] [a-z])" in
|
al@284
|
177 query=*|search=*) [ ${i#*=} == Search ] || SEARCH=${i#*=};;
|
al@284
|
178 object=*) OBJECT=${i#*=};;
|
al@284
|
179 verbose=*) VERBOSE=${i#*=};;
|
al@284
|
180 lang=*) LANG=${i#*=};;
|
al@603
|
181 file=*) SEARCH=${i#*=}; OBJECT='File'; sel_file=$s;;
|
al@603
|
182 desc=*) SEARCH=${i#*=}; OBJECT='Desc'; sel_desc=$s;;
|
al@603
|
183 tags=*) SEARCH=${i#*=}; OBJECT='Tags'; sel_tags=$s;;
|
al@603
|
184 arch=*) SEARCH=${i#*=}; OBJECT='Arch'; sel_arch=$s;;
|
al@603
|
185 bugs=*) SEARCH=${i#*=}; OBJECT='Bugs'; sel_bugs=$s;;
|
al@603
|
186 receipt=*) SEARCH=${i#*=}; OBJECT='Receipt'; sel_rcpt=$s;;
|
al@603
|
187 filelist=*) SEARCH=${i#*=}; OBJECT='File_list'; sel_flst=$s;;
|
al@603
|
188 package=*) SEARCH=${i#*=}; OBJECT='Package';;
|
al@603
|
189 depends=*) SEARCH=${i#*=}; OBJECT='Depends'; sel_deps=$s;;
|
al@603
|
190 builddepends=*) SEARCH=${i#*=}; OBJECT='BuildDepends'; sel_bdps=$s;;
|
al@603
|
191 fileoverlap=*) SEARCH=${i#*=}; OBJECT='FileOverlap'; sel_over=$s;;
|
al@603
|
192 category=*) SEARCH=${i#*=}; OBJECT='Category'; sel_catg=$s;;
|
al@603
|
193 maintainer=*) SEARCH=${i#*=}; OBJECT='Maintainer'; sel_mtnr=$s;;
|
al@603
|
194 license=*) SEARCH=${i#*=}; OBJECT='License'; sel_lcns=$s;;
|
al@603
|
195 version=1*) SLITAZ_VERSION='1.0'; sel_1=$s;;
|
al@603
|
196 version=2*) SLITAZ_VERSION='2.0'; sel_2=$s;;
|
al@603
|
197 version=3*) SLITAZ_VERSION='3.0'; sel_3=$s;;
|
al@603
|
198 version=s*|version=4*) SLITAZ_VERSION='stable'; sel_s=$s;;
|
al@603
|
199 version=u*) SLITAZ_VERSION='undigest'; sel_u=$s;;
|
al@603
|
200 version=b*) SLITAZ_VERSION='backports'; sel_b=$s;;
|
al@603
|
201 version=t*) SLITAZ_VERSION='tiny'; sel_t=$s;;
|
al@284
|
202 esac
|
al@284
|
203 done
|
al@603
|
204 [ -z "$SLITAZ_VERSION" ] && SLITAZ_VERSION='cooking'
|
al@603
|
205 SEARCH="${SEARCH//%20/ }"
|
al@284
|
206
|
al@293
|
207 #
|
pankso@268
|
208 # Content negotiation for Gettext
|
al@293
|
209 #
|
al@603
|
210
|
al@603
|
211 LANG=$(user_lang $(COOKIE lang))
|
al@603
|
212 lang="${LANG%_*}"
|
pankso@278
|
213 export LANG LC_ALL=$LANG
|
pankso@230
|
214
|
al@284
|
215
|
pankso@452
|
216 #
|
pankso@452
|
217 # Unescape query and set vars
|
pankso@452
|
218 #
|
al@603
|
219
|
al@603
|
220 SEARCH="$(echo $SEARCH | sed 's|%2B|+|g; s|%3A|:|g; s|%2F|/|g')"
|
al@603
|
221
|
pankso@452
|
222 SLITAZ_HOME="/home/slitaz"
|
al@603
|
223 if [ "$SLITAZ_VERSION" == 'cooking' ]; then
|
al@603
|
224 WOK="$SLITAZ_HOME/wok"
|
pankso@451
|
225 else
|
al@603
|
226 WOK="$SLITAZ_HOME/wok-$SLITAZ_VERSION"
|
pankso@451
|
227 fi
|
al@603
|
228
|
al@603
|
229 pkgsrepo="$SLITAZ_HOME/$SLITAZ_VERSION/packages"
|
al@603
|
230 repoid="$(cat "$pkgsrepo/ID")"
|
al@603
|
231 filelist="$pkgsrepo/files.list.lzma"
|
al@603
|
232 pkglist="$pkgsrepo/packages.txt"
|
al@603
|
233 equiv="$pkgsrepo/packages.equiv"
|
al@603
|
234 pinfo="$pkgsrepo/packages.info"
|
al@603
|
235
|
al@603
|
236
|
al@603
|
237
|
pankso@230
|
238
|
pankso@230
|
239 # Search form
|
al@284
|
240 # TODO: add hint 'You are can search for depends loop, if textfield is empty'...
|
al@284
|
241 # add progress ticker while page is not complete
|
al@603
|
242
|
al@603
|
243 search_form() {
|
al@603
|
244 [ -z "$SEARCH$(GET info)" ] && autofocus='autofocus'
|
al@603
|
245
|
al@603
|
246 cat <<EOT
|
pankso@230
|
247
|
al@293
|
248 <div class="form">
|
al@603
|
249 <form id="s_form" name="s_form" method="post" action="$(ifdebug '?')">
|
al@293
|
250 <span class="small">
|
al@293
|
251 <select name="object">
|
al@603
|
252 <option value="Package">$( _ 'Package name')</option>
|
al@603
|
253 <option $sel_desc value="Desc">$( _ 'Description')</option>
|
al@603
|
254 <option $sel_tags value="Tags">$( _ 'Tag')</option>
|
al@603
|
255 <option $sel_arch value="Arch">$( _ 'Architecture')</option>
|
al@603
|
256 <option $sel_bugs value="Bugs">$( _ 'Bugs')</option>
|
al@603
|
257 <option $sel_rcpt value="Receipt">$( _ 'Receipt')</option>
|
al@603
|
258 <option $sel_deps value="Depends">$( _ 'Dependencies')</option>
|
al@603
|
259 <option $sel_bdps value="BuildDepends">$( _ 'Build dependencies')</option>
|
al@603
|
260 <option $sel_file value="File">$( _ 'File')</option>
|
al@603
|
261 <option $sel_flst value="File_list">$( _ 'File list')</option>
|
al@603
|
262 <option $sel_over value="FileOverlap">$( _ 'Common files')</option>
|
al@603
|
263 <option $sel_catg value="Category">$( _ 'Category')</option>
|
al@603
|
264 <option $sel_mtnr value="Maintainer">$( _ 'Maintainer')</option>
|
al@603
|
265 <option $sel_lcns value="License">$( _ 'License')</option>
|
al@293
|
266 </select>
|
al@293
|
267 </span>
|
al@293
|
268 <span class="stretch">
|
al@603
|
269 <input $autofocus type="search" name="query" id="query" value="$SEARCH$(GET info)"
|
al@603
|
270 autocorrect="off" autocapitalize="off" autocomplete="on" spellcheck="false"
|
al@603
|
271 results="5" autosave="pkgsearch"/>
|
al@293
|
272 </span>
|
al@293
|
273 <span class="small">
|
al@603
|
274 <select name="version" title="$(_ 'SliTaz version')">
|
al@603
|
275 <option value="cooking">$( _ 'cooking')</option>
|
al@603
|
276 <option $sel_s value="stable">4.0</option>
|
al@603
|
277 <option $sel_3 value="3.0">3.0</option>
|
al@603
|
278 <option $sel_2 value="2.0">2.0</option>
|
al@603
|
279 <option $sel_1 value="1.0">1.0</option>
|
al@603
|
280 <option $sel_t value="tiny">$( _ 'tiny')</option>
|
al@603
|
281 <option $sel_u value="undigest">$( _ 'undigest')</option>
|
al@603
|
282 <option $sel_b value="backports">$( _ 'backports')</option>
|
al@293
|
283 </select>
|
al@293
|
284 </span>
|
al@293
|
285 <span class="small">
|
al@603
|
286 <button type="submit">$(_ 'Search')</button>
|
al@293
|
287 </span>
|
pankso@230
|
288 </form>
|
al@293
|
289 </div>
|
al@603
|
290 EOT
|
pankso@230
|
291 }
|
pankso@230
|
292
|
al@603
|
293
|
al@261
|
294 # xHTML5 Header.
|
al@603
|
295
|
pankso@231
|
296 xhtml_header() {
|
al@261
|
297 . lib/header.sh
|
pankso@230
|
298 }
|
pankso@230
|
299
|
al@603
|
300
|
al@603
|
301 # FIXME: unused function
|
al@603
|
302
|
al@603
|
303 cat_files_list() {
|
al@603
|
304 local tmp="/tmp/files.list.$(basename ${1%/packages})"
|
al@603
|
305 if [ ! -s "$tmp" -o "$1/files.list.lzma" -nt "$tmp" ]; then
|
al@603
|
306 unlzma < "$1/files.list.lzma" > "$tmp.$$" && mv "$tmp.$$" "$tmp"
|
slaxemulator@336
|
307 fi
|
slaxemulator@336
|
308 case "$2" in
|
al@603
|
309 lines)
|
al@603
|
310 if [ ! -s "$tmp.lines" -o "$tmp" -nt "$tmp.lines" ]; then
|
al@603
|
311 wc -l < "$tmp" > "$tmp.lines.$$" &&
|
al@603
|
312 mv "$tmp.lines.$$" "$tmp.lines"
|
al@603
|
313 fi
|
al@603
|
314 cat "$tmp.lines"
|
al@603
|
315 ;;
|
al@603
|
316 *)
|
al@603
|
317 cat "$tmp";;
|
slaxemulator@336
|
318 esac
|
slaxemulator@336
|
319 }
|
slaxemulator@336
|
320
|
al@603
|
321
|
al@603
|
322
|
al@603
|
323
|
pankso@230
|
324 # xHTML Footer.
|
al@603
|
325
|
pankso@231
|
326 xhtml_footer() {
|
al@603
|
327 # Number of packages in the current repo
|
al@603
|
328 if [ ! -f "$cache/stat.p.$SLITAZ_VERSION.$repoid" ]; then
|
al@603
|
329 rm $cache/stat.p.$SLITAZ_VERSION.*
|
al@603
|
330 ls "$WOK/" | wc -l > "$cache/stat.p.$SLITAZ_VERSION.$repoid"
|
al@603
|
331 fi
|
al@603
|
332
|
al@603
|
333 # Number of files in the current repo
|
al@603
|
334 if [ ! -f "$cache/stat.f.$SLITAZ_VERSION.$repoid" ]; then
|
al@603
|
335 rm $cache/stat.f.$SLITAZ_VERSION.*
|
al@603
|
336 unlzma < "$filelist" | wc -l > "$cache/stat.f.$SLITAZ_VERSION.$repoid"
|
al@603
|
337 fi
|
al@603
|
338
|
al@603
|
339 PKGS=$( cat "$cache/stat.p.$SLITAZ_VERSION.$repoid")
|
al@603
|
340 FILES=$(cat "$cache/stat.f.$SLITAZ_VERSION.$repoid")
|
al@603
|
341 echo -n '<div class="summary">'
|
al@603
|
342 _p '%s package' '%s packages' "$PKGS" \
|
al@603
|
343 "$PKGS"
|
al@603
|
344 _p ' and %s file in %s database' ' and %s files in %s database' "$FILES" \
|
al@603
|
345 "$FILES" "$SLITAZ_VERSION"
|
al@603
|
346 cat <<EOT
|
al@603
|
347 </div>
|
al@603
|
348 </main>
|
al@603
|
349
|
al@603
|
350 <footer>
|
al@603
|
351 EOT
|
al@603
|
352
|
al@603
|
353 local lang="${LANG%_*}"
|
al@603
|
354 if [ -e "lib/footer.$lang.sh" ]; then
|
al@603
|
355 . lib/footer.$lang.sh
|
al@603
|
356 else
|
al@603
|
357 . lib/footer.sh
|
al@603
|
358 fi
|
al@603
|
359
|
al@603
|
360 echo -n '<div class="summary">'
|
al@603
|
361 gen_time=$(( $(date -u +%s) - $date_start ))
|
al@603
|
362 _p 'Page generated in %s second.' 'Page generated in %s seconds.' "$gen_time" \
|
al@603
|
363 "$gen_time"
|
al@603
|
364
|
al@603
|
365 cat <<EOT
|
al@603
|
366 </div>
|
al@603
|
367 <img src="style/qr.png" alt="#" onmouseover="this.title = location.href"
|
al@603
|
368 onclick="this.src = QRCodePNG(location.href, this)"/>
|
al@603
|
369 </footer>
|
al@603
|
370
|
al@603
|
371 <script>
|
al@603
|
372 function QRCodePNG(str, obj) {
|
al@603
|
373 try {
|
al@603
|
374 obj.height = obj.width += 300;
|
al@603
|
375 return QRCode.generatePNG(str, {ecclevel: 'H'});
|
al@603
|
376 }
|
al@603
|
377 catch (any) {
|
al@603
|
378 var element = document.createElement("script");
|
al@603
|
379 element.src = "style/qrcode.min.js";
|
al@603
|
380 element.type ="text/javascript";
|
al@603
|
381 element.onload = function() {
|
al@603
|
382 obj.src = QRCode.generatePNG(str, {ecclevel: 'H'});
|
al@603
|
383 };
|
al@603
|
384 document.body.appendChild(element);
|
al@603
|
385 }
|
pankso@230
|
386 }
|
pankso@230
|
387
|
al@603
|
388 document.getElementById('ticker').style.visibility='hidden';
|
al@603
|
389 </script>
|
al@603
|
390 </body>
|
al@603
|
391 </html>
|
al@603
|
392 EOT
|
al@603
|
393
|
al@603
|
394 }
|
al@603
|
395
|
al@603
|
396
|
al@603
|
397
|
al@603
|
398
|
al@603
|
399 # TODO: to remove
|
al@603
|
400
|
al@603
|
401 installed_size() {
|
al@284
|
402 if [ $VERBOSE -gt 0 ]; then
|
slaxemulator@320
|
403 inst=$(grep -A 3 "^$1\$" $pkgslist | grep installed)
|
al@284
|
404 # size=$(echo $inst | cut -d'(' -f2 | cut -d' ' -f1)
|
al@284
|
405 echo $inst | sed 's/.*(\(.*\).*/(\1)/'
|
al@284
|
406 # echo $size
|
al@284
|
407 # | sed 's/.*(\(.*\) installed.*/(\1) /'
|
al@284
|
408 fi
|
pankso@230
|
409 }
|
pankso@230
|
410
|
al@603
|
411
|
al@603
|
412
|
al@603
|
413
|
al@603
|
414 # Package icon
|
al@603
|
415
|
al@603
|
416 package_icon() {
|
al@603
|
417 local icon='pkg'
|
al@603
|
418
|
al@603
|
419 case "$1" in
|
al@603
|
420 *-dev) icon='dev';;
|
al@603
|
421 linux-*|linux64-*) icon='linux';;
|
al@603
|
422 xorg-*) icon='xorg';;
|
al@603
|
423 *) icon=$(awk -F$'\t' -vp="$1" '$1==p{print $2;exit}' "$iconslast");;
|
al@293
|
424 esac
|
al@603
|
425 echo "icons$2/${icon:-pkg}.png"
|
al@293
|
426 }
|
al@293
|
427
|
al@603
|
428
|
al@603
|
429
|
al@603
|
430
|
al@293
|
431 package_entry() {
|
al@603
|
432
|
al@603
|
433 # Level for packages tree
|
al@603
|
434 if [ -n "$1" ]; then
|
al@603
|
435 echo "<tr class=\"l$1\">"
|
al@293
|
436 else
|
al@603
|
437 echo '<tr>'
|
al@603
|
438 fi
|
al@603
|
439
|
al@603
|
440 PACKAGE_URL="$MIRROR_URL/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
|
al@603
|
441
|
al@603
|
442 case "$SLITAZ_VERSION" in
|
al@603
|
443 cooking)
|
al@603
|
444 COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>";;
|
pascal@462
|
445 stable|undigest|backports)
|
al@603
|
446 COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>";;
|
al@603
|
447 *)
|
al@603
|
448 COOKER='';;
|
al@603
|
449 esac
|
al@603
|
450
|
al@603
|
451 cat <<EOT
|
al@603
|
452 <td class="first"><a href="?info=$PACKAGE&version=$SLITAZ_VERSION"><img
|
al@603
|
453 src="$(package_icon $PACKAGE)"/></a></td>
|
al@603
|
454 <td><b>$PACKAGE</b><br/>$SHORT_DESC</td>
|
al@603
|
455 <td class="last">
|
al@603
|
456 <a class="dl" href="$PACKAGE_URL" title="$a_dl">$a_dl</a>
|
al@603
|
457 <a class="rc" href="?receipt=$PACKAGE&version=$SLITAZ_VERSION" title="$a_rc">$a_rc</a>
|
al@603
|
458 $COOKER
|
al@603
|
459 </td>
|
al@293
|
460 </tr>
|
al@293
|
461 EOT
|
al@293
|
462 }
|
slaxemulator@336
|
463
|
al@603
|
464
|
al@603
|
465 package_entries() {
|
al@603
|
466 # Input: $1 = [ desc | category | tags | name ]
|
al@603
|
467 # $2 = query
|
al@603
|
468
|
al@603
|
469 awk -F$'\t' -vtype="$1" -vquery="$2" -vmurl="$MIRROR_URL" -vver="$SLITAZ_VERSION" \
|
al@603
|
470 -vaco="$a_co" -vadl="$a_dl" -varc="$a_rc" -viconslast="$iconslast" '
|
al@603
|
471 BEGIN {
|
al@603
|
472 IGNORECASE = 1;
|
al@603
|
473 print "<table class=\"list\">";
|
al@603
|
474 }
|
al@603
|
475
|
al@603
|
476 function cooker() {
|
al@603
|
477 if (ver!="cooking" && ver!="stable" && ver!="undigest" && ver!="backports") return;
|
al@603
|
478
|
al@603
|
479 printf "\t<a href=\"http://cook.slitaz.org/";
|
al@603
|
480 if (ver=="stable" || ver=="undigest" || ver=="backports") printf "%s/", ver;
|
al@603
|
481 printf "cooker.cgi?pkg=%s\" class=\"co\" title=\"%s\">%s</a>", $1, aco, aco;
|
al@603
|
482 }
|
al@603
|
483
|
al@603
|
484 function icon(pkg) {
|
al@603
|
485 i="";
|
al@603
|
486 if (pkg ~ /-dev$/) { return "dev"; }
|
al@603
|
487 if (pkg ~ /^linux(64)?-/) { return "linux"; }
|
al@603
|
488 if (pkg ~ /^xorg-/) { return "xorg"; }
|
al@603
|
489 "awk -vp=\"" pkg "\" \"BEGIN{FS=\\\"\t\\\"}\\\$1==p{print \\\$2;exit}\" " iconslast | getline i;
|
al@603
|
490 if (i) { return i; }
|
al@603
|
491 return "pkg";
|
al@603
|
492 }
|
al@603
|
493
|
al@603
|
494 function addver() {
|
al@603
|
495 if (ver=="c" || ver=="cooking") return "";
|
al@603
|
496 return ("&version=" ver);
|
al@603
|
497 }
|
al@603
|
498
|
al@603
|
499 function tabline() {
|
al@603
|
500 markname = $1; if (type=="name") gsub(query, "<mark>&</mark>", markname);
|
al@603
|
501 markdesc = $4; if (type=="desc") gsub(query, "<mark>&</mark>", markdesc);
|
al@603
|
502 printf "<tr>\n\t<td class=\"first\">"
|
al@603
|
503 printf "<a href=\"?info=%s%s\">", $1, addver();
|
al@603
|
504 printf "<img src=\"icons/%s.png\"/></a></td>\n", icon($1);
|
al@603
|
505 printf "\t<td><b>%s</b><br/>%s</td>\n", markname, markdesc;
|
al@603
|
506 printf "\t<td class=\"last\">\n";
|
al@603
|
507 printf "\t<a class=\"dl\" href=\"%s\" ", murl "/packages/" ver "/" $1 "-" $2 ".tazpkg";
|
al@603
|
508 printf "title=\"%s\">%s</a>\n", adl, adl;
|
al@603
|
509 printf "\t<a class=\"rc\" href=\"?receipt=%s%s\" ", $1, addver();
|
al@603
|
510 printf "title=\"%s\">%s</a>\n", arc, arc;
|
al@603
|
511 cooker();
|
al@603
|
512 printf "</td>\n</tr>\n"
|
al@603
|
513 }
|
al@603
|
514
|
al@603
|
515
|
al@603
|
516 {
|
al@603
|
517 if (type=="name" && match($1, query)) tabline();
|
al@603
|
518 if (type=="category" && $3==query) tabline();
|
al@603
|
519 if (type=="desc" && match($4, query)) tabline();
|
al@603
|
520 if (type=="tags" && match(" "$6" ", " "query" ")) tabline();
|
al@603
|
521 }
|
al@603
|
522
|
al@603
|
523 END { print "</table>"; }
|
al@603
|
524 ' "$pinfo";
|
al@603
|
525 }
|
al@603
|
526
|
al@603
|
527
|
al@603
|
528
|
al@603
|
529
|
al@293
|
530 package_entry_inline() {
|
al@603
|
531 # if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
|
al@603
|
532 # cat << _EOT_
|
al@603
|
533 #<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE) : $SHORT_DESC
|
al@603
|
534 #_EOT_
|
al@603
|
535 # else
|
slaxemulator@336
|
536 PACKAGE_URL="$MIRROR_URL/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
|
al@293
|
537 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
|
pascal@456
|
538 case "$SLITAZ_VERSION" in
|
al@603
|
539 cooking)
|
al@603
|
540 COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">$a_co</a>";;
|
al@603
|
541 stable|undigest|backports)
|
al@603
|
542 COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">$a_co</a>";;
|
al@603
|
543 *)
|
al@603
|
544 COOKER='';;
|
pascal@456
|
545 esac
|
al@603
|
546 cat <<EOT
|
pascal@456
|
547 $PACKAGE_HREF $(installed_size $PACKAGE) : $SHORT_DESC \
|
al@603
|
548 <a href="?receipt=$PACKAGE&version=$SLITAZ_VERSION">$a_rc</a> $COOKER
|
al@603
|
549 EOT
|
al@603
|
550 # fi
|
pankso@230
|
551 }
|
pankso@230
|
552
|
al@603
|
553
|
pankso@230
|
554 # Show loop in depends/build_depends chains
|
al@603
|
555
|
al@603
|
556 show_loops() {
|
pankso@230
|
557 awk '
|
pankso@230
|
558 function chkloop(pkg, i, n)
|
pankso@230
|
559 {
|
pankso@230
|
560 if (n < 8)
|
pankso@230
|
561 for (i = 1; i <= split(deps[pkg],curdep," "); i++) {
|
pankso@230
|
562 if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) {
|
pankso@230
|
563 split(deps[pkg],curdep," ")
|
pankso@230
|
564 p = curdep[i] " " p
|
pankso@230
|
565 return 1
|
pankso@230
|
566 }
|
pankso@230
|
567 }
|
pankso@230
|
568 return 0
|
pankso@230
|
569 }
|
pankso@230
|
570 {
|
pankso@230
|
571 for (i = 2; i <= NF; i++)
|
pankso@230
|
572 deps[$1] = deps[$1] " " $i
|
pankso@230
|
573 }
|
pankso@230
|
574 END {
|
pankso@230
|
575 for (pkg in deps) {
|
pankso@230
|
576 base = pkg
|
pankso@230
|
577 p = ""
|
pankso@230
|
578 if (chkloop(pkg, 0, 0))
|
pankso@230
|
579 print pkg " " p
|
pankso@230
|
580 #print pkg " : " p "..."
|
pankso@230
|
581 }
|
pankso@230
|
582 }' | while read line; do
|
pankso@230
|
583 set -- $line
|
pankso@230
|
584 case " $last " in
|
pankso@230
|
585 *\ $1\ *) continue
|
pankso@230
|
586 esac
|
pankso@230
|
587 last="$line"
|
pankso@230
|
588 pkg=$1
|
pankso@230
|
589 shift
|
al@284
|
590 echo "<strong>$pkg </strong>: $@ ..."
|
pankso@230
|
591 done
|
pankso@230
|
592 }
|
pankso@230
|
593
|
al@603
|
594
|
pankso@230
|
595 # recursive dependencies scan
|
al@603
|
596
|
al@603
|
597 dep_scan() {
|
al@603
|
598 for i in $1; do
|
al@603
|
599 case " $ALL_DEPS " in
|
al@603
|
600 *\ $i\ *)
|
al@603
|
601 continue;;
|
al@603
|
602 esac
|
al@603
|
603 ALL_DEPS="$ALL_DEPS $i"
|
al@603
|
604 if [ -n "$2" ]; then
|
al@603
|
605 echo -n "$2"
|
al@603
|
606 (
|
al@603
|
607 . $WOK/$i/receipt
|
al@603
|
608 package_entry_inline
|
al@603
|
609 )
|
al@603
|
610 fi
|
al@603
|
611 [ -f $WOK/$i/receipt ] || continue
|
al@603
|
612 unset BUILD_DEPENDS DEPENDS WANTED
|
pankso@230
|
613 . $WOK/$i/receipt
|
al@603
|
614 if [ -n "$3" ]; then
|
al@603
|
615 [ -n "$BUILD_DEPENDS$WANTED" ] &&
|
al@603
|
616 dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3
|
al@603
|
617 else
|
al@603
|
618 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
|
al@603
|
619 fi
|
al@603
|
620 done
|
pankso@230
|
621 }
|
pankso@230
|
622
|
al@603
|
623
|
pankso@230
|
624 # recursive reverse dependencies scan
|
al@603
|
625
|
al@603
|
626 rdep_scan() {
|
pankso@230
|
627 SEARCH=$1
|
pankso@230
|
628 case "$SEARCH" in
|
al@261
|
629 glibc-base|gcc-lib-base)
|
al@603
|
630 _ '"glibc-base" and "gcc-lib-base" are implicit dependencies, <b>every</b> package is supposed to depend on them.'
|
pankso@230
|
631 return;;
|
pankso@230
|
632 esac
|
pankso@230
|
633 for i in $WOK/* ; do
|
slaxemulator@336
|
634 unset BUILD_DEPENDS DEPENDS WANTED
|
pankso@230
|
635 . $i/receipt
|
pankso@230
|
636 if [ -n "$2" ]; then
|
pankso@230
|
637 echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)"
|
pankso@230
|
638 else
|
pankso@230
|
639 echo "$(basename $i) $(echo $DEPENDS)"
|
pankso@230
|
640 fi
|
pankso@230
|
641 done | awk -v search=$SEARCH '
|
pankso@230
|
642 function show_deps(deps, all_deps, pkg, space)
|
pankso@230
|
643 {
|
pankso@230
|
644 if (all_deps[pkg] == 1) return
|
pankso@230
|
645 all_deps[pkg] = 1
|
pankso@230
|
646 if (space != "") printf "%s%s\n",space,pkg
|
pankso@230
|
647 for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
|
pankso@230
|
648 show_deps(deps, all_deps, mydeps[i],"////" space)
|
pankso@230
|
649 }
|
pankso@230
|
650 }
|
pankso@230
|
651
|
pankso@230
|
652 {
|
pankso@230
|
653 all_deps[$1] = 0
|
pankso@230
|
654 for (i = 2; i <= NF; i++)
|
pankso@230
|
655 deps[$i] = deps[$i] " " $1
|
pankso@230
|
656 }
|
pankso@230
|
657
|
pankso@230
|
658 END {
|
pankso@230
|
659 show_deps(deps, all_deps, search, "")
|
pankso@230
|
660 }
|
pankso@230
|
661 ' | while read pkg; do
|
pankso@230
|
662 . $WOK/${pkg##*/}/receipt
|
pankso@230
|
663 cat << _EOT_
|
al@293
|
664 $(echo ${pkg%/*} | sed 's|/| |g') $(package_entry_inline)
|
pankso@230
|
665 _EOT_
|
pankso@230
|
666 done
|
pankso@230
|
667 }
|
pankso@230
|
668
|
pankso@230
|
669
|
al@603
|
670
|
al@603
|
671
|
al@603
|
672 # Check non-empty argument
|
al@603
|
673
|
al@603
|
674 check_n() {
|
al@603
|
675 if [ -z "$1" ]; then
|
al@603
|
676 cat <<EOT
|
al@603
|
677 <div class="err">$(_ 'Please specify name of the package.')</div>
|
al@603
|
678 <p> <br/> </p>
|
al@603
|
679 EOT
|
al@603
|
680 return 1
|
al@603
|
681 fi
|
pankso@230
|
682 }
|
pankso@230
|
683
|
al@603
|
684
|
al@603
|
685 # Check package existence
|
al@603
|
686
|
al@603
|
687 package_exist() {
|
al@603
|
688 check_n "$1"
|
al@603
|
689
|
al@603
|
690 if [ ! -f "$WOK/$1/receipt" ]; then
|
al@603
|
691 cat <<EOT
|
al@603
|
692 <div class="err">$(_ 'Package "%s" was not found' "$SEARCH")</div>
|
al@603
|
693 <p> <br/> </p>
|
al@603
|
694 EOT
|
al@603
|
695 return 1
|
al@603
|
696 fi
|
al@603
|
697
|
al@603
|
698 return 0
|
pankso@230
|
699 }
|
pankso@230
|
700
|
al@603
|
701
|
al@603
|
702
|
al@603
|
703
|
al@603
|
704 # Display < > &
|
al@603
|
705
|
al@603
|
706 htmlize() {
|
al@603
|
707 sed -e 's|&|\&|g; s|<|\<|g; s|>|\>|g'
|
al@603
|
708 }
|
al@603
|
709
|
al@603
|
710
|
al@603
|
711
|
al@603
|
712
|
al@293
|
713 display_packages_and_files() {
|
al@603
|
714 unset last
|
al@603
|
715 while read pkg file; do
|
al@603
|
716 pkg=${pkg%:}
|
al@603
|
717 if [ "$pkg" != "$last" ]; then
|
al@603
|
718 . "$WOK/$pkg/receipt"
|
al@236
|
719
|
al@603
|
720 package_entry_inline
|
al@603
|
721 last="$pkg"
|
al@603
|
722 fi
|
al@603
|
723 echo " $file"
|
al@603
|
724 done
|
pankso@230
|
725 }
|
pankso@230
|
726
|
al@603
|
727
|
al@293
|
728 # Syntax highlighting for receipt file - stolen from tazpanel:
|
al@293
|
729 # '/var/www/tazpanel/lib/libtazpanel' and developed
|
al@603
|
730
|
al@293
|
731 syntax_highlighter() {
|
pascal@459
|
732 . $1
|
pascal@457
|
733 sed -e "s|\&|\&|g; s|<|\<|g; s|>|\>|g; s| | |g" \
|
al@293
|
734 -e "s|@|\@|g; s|~|\~|g" \
|
al@293
|
735 -e "#literals" \
|
al@293
|
736 -e "s|'\([^']*\)'|@l\0~|g" \
|
al@293
|
737 -e 's|"\([^"]*\)"|@l\0~|g' \
|
al@293
|
738 -e 's|"\([^"]*\)\\|@l\0~|g' \
|
al@293
|
739 -e 's|\([^"]*\)\"$|@l\0~|g' \
|
al@293
|
740 -e "#paths" \
|
al@293
|
741 -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+\)\([ )]\)|\1@p\2~\3|g' \
|
al@293
|
742 -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+$\)|\1@p\2~|g' \
|
al@293
|
743 -e 's|\(\$[a-zA-Z0-9_\.-]\+\)\(/[\$a-zA-Z0-9_/\.\*-]\+\)\([ )]*\)|@p\1\2~\3|g' \
|
al@293
|
744 -e "#functions" \
|
al@293
|
745 -e 's|^\([^()]*\)\(()\)|@f\0~|g' \
|
al@293
|
746 -e "#single line comments" \
|
al@293
|
747 -e 's|^\([ ]*\)#\([^#]*$\)|@c\0~|g' \
|
al@293
|
748 -e "#parameters" \
|
al@293
|
749 -e 's|\( \)\(-[a-z0-9]\+\)\( *\)|\1@r\2~\3|g' \
|
al@293
|
750 -e 's|\( \)\(--[a-z0-9\-]\+\)\([= ]\)|\1@r\2~\3|g' \
|
al@293
|
751 -e "#variables" \
|
al@293
|
752 -e "s|^\([^=@#' \-]*\)\(=\)|@v\1~\2|g" \
|
al@293
|
753 -e 's|\([ ^@-]*\)\([a-zA-Z0-9]\+\)\(=\)|\1@v\2~\3|g' \
|
al@293
|
754 -e "s#\(\$[a-zA-Z0-9_]\+\)#@v\0~#g" \
|
al@293
|
755 -e "#urls" \
|
al@293
|
756 -e s"#\"\(http:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
|
al@293
|
757 -e s"#\"\(ftp:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
|
al@293
|
758 -e "#commands" \
|
al@293
|
759 -e s"#^\( \+\)\([^'= @\-]\+\)#\1@m\2~#"g \
|
al@293
|
760 -e "#simple commands" \
|
al@293
|
761 -e s"#\([{}\]$\)#@s\0~#"g \
|
al@293
|
762 -e s"#\( \)\(\&\&\)\( *\)#\1@s\2~\3#"g \
|
al@293
|
763 -e s"#\(|\)#@s\0~#"g \
|
al@293
|
764 -e s"#\(\<\)#@s\0~#"g \
|
al@293
|
765 -e s"#\(\>\&\)#@s\0~#"g \
|
al@293
|
766 -e s"#\(\>\)#@s\0~#"g \
|
al@293
|
767 -e s"#\(\[\)#@s\0~#"g \
|
al@293
|
768 -e s"#\(\]\)#@s\0~#"g \
|
al@293
|
769 \
|
al@293
|
770 -e "s|´|'|g; s|›|</span>|g" \
|
al@293
|
771 -e "s|@c|<span class='r-comment'>|g" \
|
al@293
|
772 -e "s|@l|<span class='r-literal'>|g" \
|
al@293
|
773 -e "s|@v|<span class='r-var'>|g" \
|
al@293
|
774 -e "s|@f|<span class='r-func'>|g" \
|
al@293
|
775 -e "s|@u|class='r-url' target='_blank'|g" \
|
al@293
|
776 -e "s|@m|<span class='r-com'>|g" \
|
al@293
|
777 -e "s|@s|<span class='r-scom'>|g" \
|
al@293
|
778 -e "s|@p|<span class='r-path'>|g" \
|
al@293
|
779 -e "s|@r|<span class='r-param'>|g" \
|
pascal@459
|
780 -e "s|~|</span>|g" < "$1" | add_url_links
|
pascal@459
|
781 }
|
pascal@459
|
782
|
al@603
|
783
|
pascal@459
|
784 # Create some clickable links
|
al@603
|
785
|
pascal@459
|
786 add_url_links() {
|
pascal@459
|
787 local tarball_url
|
al@603
|
788 sedit=''
|
pascal@461
|
789 case "$SLITAZ_VERSION" in
|
al@603
|
790 cooking)
|
al@603
|
791 [ -n "$VERSION" ] &&
|
al@603
|
792 sedit="$sedit -e 's|\\(>VERSION<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">\\2</a>|}'"
|
al@603
|
793 ;;
|
al@603
|
794 stable|undigest|backports)
|
al@603
|
795 [ -n "$VERSION" ] &&
|
al@603
|
796 sedit="$sedit -e 's|\\(>VERSION<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">\\2</a>|}'"
|
al@603
|
797 ;;
|
pascal@461
|
798 esac
|
pascal@460
|
799 #[ -n "$WEB_SITE" ] && sedit="$sedit -e '/WEB_SITE/{s|\\($WEB_SITE\\)|<a class='r-url' target='_blank' href=\"\\1\">\\1</a>|}'"
|
al@603
|
800
|
al@603
|
801 [ -n "$WGET_URL" ] &&
|
al@603
|
802 sedit="$sedit -e 's|\\(>WGET_URL<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"${WGET_URL//|/\\|}\">\\2</a>|}'"
|
al@603
|
803
|
al@603
|
804 [ -n "$MAINTAINER" ] &&
|
al@603
|
805 sedit="$sedit -e '/MAINTAINER/{s|\\(${MAINTAINER/@/@}\\)|<a class='r-url' target='_blank' href=\"?maintainer=\\1\\&version=$SLITAZ_VERSION\">\\1</a>|}'"
|
al@603
|
806
|
al@603
|
807 [ -n "$CATEGORY" ] &&
|
al@603
|
808 sedit="$sedit -e '/CATEGORY/{s|\\($CATEGORY\\)|<a class='r-url' target='_blank' href=\"?category=\\1\\&version=$SLITAZ_VERSION\">\\1</a>|}'"
|
al@603
|
809
|
al@603
|
810 [ -f "$WOK/$PACKAGE/description.txt" ] &&
|
al@603
|
811 sedit="$sedit -e '/SHORT_DESC/{s|\\($SHORT_DESC\\)|<a class='r-url' target='_blank' href=\"?desc=$PACKAGE\\&version=$SLITAZ_VERSION\">\\1</a>|}'"
|
al@603
|
812
|
pascal@459
|
813 tarball_url=sources/packages-$SLITAZ_VERSION/${TARBALL:0:1}/$TARBALL
|
pascal@459
|
814 [ -f /var/www/slitaz/mirror/$tarball_url ] || case "$tarball_url" in
|
pascal@459
|
815 *.gz) tarball_url=${tarball_url%gz}lzma ;;
|
pascal@459
|
816 *.tgz) tarball_url=${tarball_url%tgz}tar.lzma ;;
|
pascal@459
|
817 *.bz2) tarball_url=${tarball_url%bz2}lzma ;;
|
pascal@459
|
818 esac
|
pascal@459
|
819 [ -f /var/www/slitaz/mirror/$tarball_url ] && sedit="$sedit -e 's|\\(>TARBALL<[^\"]*\"\\)\\([^\"]*\\)|\\1<a class='r-url' target='_blank' href=\"http://mirror.slitaz.org/$tarball_url\">\\2</a>|'"
|
al@603
|
820
|
al@603
|
821 if [ -n "$EXTRA_SOURCE_FILES" ]; then
|
al@603
|
822 for i in $(echo $EXTRA_SOURCE_FILES) ; do
|
al@603
|
823 p="sources/packages-$SLITAZ_VERSION/${i:0:1}/$i"
|
al@603
|
824 [ -f "/var/www/slitaz/mirror/$p" ] || continue
|
al@603
|
825 #FIXME
|
al@603
|
826 sedit="$sedit -e 's|\\([\" >]\\)$i\\([\" <\\]\\)|\\1<a class='r-url' target='_blank' href=\"http://mirror.slitaz.org/$p\">$i</a>\\2|'"
|
al@603
|
827 sedit="$sedit -e 's|^$i\\([\" <\\]\\)|<a class='r-url' target='_blank' href=\"http://mirror.slitaz.org/$p\">$i</a>\\1|'"
|
al@603
|
828 done
|
al@603
|
829 fi
|
pascal@460
|
830 if [ -n "$DEPENDS$BUILD_DEPENDS$SUGGESTED$PROVIDE$WANTED" ]; then
|
pascal@460
|
831 for i in $(echo $DEPENDS $BUILD_DEPENDS $SUGGESTED $PROVIDE $WANTED) ; do
|
pascal@460
|
832 sedit="$sedit -e 's|\\([\" >]\\)$i\\([\" <\\]\\)|\\1<a class='r-url' target='_blank' href=\\\"?receipt=$i\\&version=$SLITAZ_VERSION\\\">$i</a>\\2|'"
|
pascal@463
|
833 sedit="$sedit -e 's|^$i\\([\" <\\]\\)|<a class='r-url' target='_blank' href=\\\"?receipt=$i\\&version=$SLITAZ_VERSION\\\">$i</a>\\1|'"
|
pascal@459
|
834 done
|
pascal@459
|
835 fi
|
pascal@466
|
836 if [ -n "$LICENSE" ]; then
|
pascal@466
|
837 for i in $LICENSE ; do
|
pascal@466
|
838 sedit="$sedit -e '/LICENSE/{s|\\($i\\)|<a class='r-url' target='_blank' href=\"?license=\\1\\&version=$SLITAZ_VERSION\">\\1</a>|}'"
|
pascal@466
|
839 done
|
pascal@466
|
840 fi
|
pascal@459
|
841 if [ -n "$HOST_ARCH" ]; then
|
pascal@459
|
842 for i in $HOST_ARCH ; do
|
pascal@459
|
843 sedit="$sedit -e '/HOST_ARCH/{s|\\([\" ]\\)$i\\([\" ]\\)|\\1<a class='r-url' target='_blank' href=\\\"?arch=$i\\&version=$SLITAZ_VERSION\\\">$i</a>\\2|}'"
|
pascal@459
|
844 done
|
pascal@459
|
845 fi
|
pascal@459
|
846 if [ -n "$TAGS" ]; then
|
pascal@459
|
847 for i in $TAGS ; do
|
pascal@459
|
848 sedit="$sedit -e '/TAGS/{s|\\([\" ]\\)$i\\([\" ]\\)|\\1<a class='r-url' target='_blank' href=\\\"?tags=$i\\&version=$SLITAZ_VERSION\\\">$i</a>\\2|}'"
|
pascal@459
|
849 done
|
pascal@459
|
850 fi
|
pascal@459
|
851 eval sed $sedit \
|
pascal@459
|
852 -e "'s|genpkg_rules|<a class='r-url' target='_blank' href=\"?filelist=$PACKAGE\\&version=$SLITAZ_VERSION\">&</a>|'"
|
al@293
|
853 }
|
al@293
|
854
|
al@603
|
855
|
pascal@458
|
856 display_cloud() {
|
pascal@458
|
857 arg=$1
|
al@603
|
858 if [ "$SLITAZ_VERSION" == 'c' -o "$SLITAZ_VERSION" == 'cooking' ]; then
|
al@603
|
859 addver=''
|
al@603
|
860 else
|
al@603
|
861 addver="&version=$SLITAZ_VERSION"
|
al@603
|
862 fi
|
pascal@458
|
863 awk '
|
pascal@458
|
864 {
|
pascal@458
|
865 for (i = 1; $i != ""; i++)
|
pascal@458
|
866 count[$i]++
|
pascal@458
|
867 }
|
pascal@458
|
868 END {
|
pascal@458
|
869 min=10000
|
pascal@458
|
870 max=0
|
pascal@459
|
871 cnt=0
|
pascal@458
|
872 for (i in count) {
|
pascal@458
|
873 if (count[i] < min) min = count[i]
|
pascal@458
|
874 if (count[i] > max) max = count[i]
|
pascal@459
|
875 cnt++
|
pascal@458
|
876 }
|
pascal@458
|
877 for (i in count)
|
pascal@458
|
878 print count[i] " " min " " max " " i
|
pascal@459
|
879 print cnt
|
pascal@463
|
880 }' | sed 's/[<>]//g' | sort -k 4 | {
|
pascal@461
|
881 while read cnt min max tag ; do
|
pascal@459
|
882 if [ -z "$min" ]; then
|
al@603
|
883 count="$cnt"
|
pascal@459
|
884 continue
|
pascal@459
|
885 fi
|
pascal@458
|
886 pct=$(((($cnt-$min)*100)/($max-$min)))
|
pascal@458
|
887 pct=$(((10000 - ((100 - $pct)**2))/100))
|
pascal@458
|
888 pct=$(((10000 - ((100 - $pct)**2))/100))
|
pascal@458
|
889 cat <<EOT
|
al@603
|
890 <span class="tagn">$cnt</span><a href="?$arg=$tag$addver" class="taga tag$(($pct/10))">$tag</a>
|
pascal@458
|
891 EOT
|
pascal@458
|
892 done
|
al@603
|
893 echo -n '<hr/><p class="lang">'
|
al@603
|
894 case $arg in
|
al@603
|
895 arch) _p '%s architecture' '%s architectures' "$count" "$count";;
|
al@603
|
896 maintainer) _p '%s maintainer' '%s maintainers' "$count" "$count";;
|
al@603
|
897 license) _p '%s license' '%s licenses' "$count" "$count";;
|
al@603
|
898 category) _p '%s category' '%s categories' "$count" "$count";;
|
al@603
|
899 tags) _p '%s tag' '%s tags' "$count" "$count";;
|
al@603
|
900 esac
|
al@603
|
901 echo '</p>'
|
pascal@461
|
902 }
|
pascal@458
|
903 }
|
al@293
|
904
|
al@603
|
905
|
al@293
|
906 #
|
al@293
|
907 # page begins
|
al@293
|
908 #
|
al@603
|
909
|
al@603
|
910 header "HTTP/1.1 200 OK" "Content-type: text/html; charset=UTF-8"
|
al@284
|
911 xhtml_header
|
al@284
|
912
|
al@603
|
913
|
pankso@266
|
914 #
|
al@293
|
915 # language selector, if needed
|
al@293
|
916 #
|
al@603
|
917
|
al@603
|
918 cat <<EOT
|
al@293
|
919 <!-- Languages -->
|
al@603
|
920 <div class="lang"><a class="locale2" href="http://www.slitaz.org/i18n.php"
|
al@603
|
921 target="_blank"></a><select form="s_form" name="lang" onchange="this.form.submit();">
|
al@293
|
922 EOT
|
al@603
|
923
|
al@603
|
924 for i in en de es fr it pl pt ru sv uk zh; do
|
al@603
|
925 case $i in
|
al@603
|
926 en) c='us'; l='English';;
|
al@603
|
927 de) c='de'; l='Deutsch';;
|
al@603
|
928 es) c='es'; l='Español';;
|
al@603
|
929 fr) c='fr'; l='Français';;
|
al@603
|
930 it) c='it'; l='Italiano';;
|
al@603
|
931 pl) c='pl'; l='Polski';;
|
al@603
|
932 pt) c='br'; l='Português';;
|
al@603
|
933 ru) c='ru'; l='Русский';;
|
al@603
|
934 sv) c='se'; l='Svenska';;
|
al@603
|
935 uk) c='ua'; l='Українська';;
|
al@603
|
936 zh) c='tw'; l='中文';;
|
al@603
|
937 esac
|
al@603
|
938
|
al@603
|
939 echo -n "<option class=\"$c\" value=\"$i\""
|
al@603
|
940 [ "$i" == "${LANG%_*}" ] && echo -n " selected"
|
al@603
|
941 echo ">$l</option>"
|
al@603
|
942 done
|
al@603
|
943 echo '</select></div>'
|
al@603
|
944
|
al@603
|
945 cat <<EOT
|
al@603
|
946 <!-- Content -->
|
al@603
|
947 <main>
|
al@293
|
948 EOT
|
al@293
|
949
|
al@293
|
950
|
al@293
|
951 #
|
pankso@266
|
952 # Handle GET requests
|
pankso@266
|
953 #
|
al@603
|
954
|
pankso@266
|
955 case " $(GET) " in
|
al@284
|
956 *\ debug\ *|*\ debug*)
|
al@603
|
957 cat <<EOT
|
al@284
|
958 <h2>Debug info</h2>
|
al@603
|
959
|
al@284
|
960 <pre>$(httpinfo)</pre>
|
al@603
|
961
|
al@284
|
962 <pre>LANG=$LANG;
|
al@284
|
963 OBJECT=$OBJECT;
|
al@284
|
964 SEARCH=$SEARCH;
|
al@284
|
965 SLITAZ_VERSION=$SLITAZ_VERSION;
|
al@284
|
966 WOK=$WOK;
|
al@293
|
967 GET=$(GET);
|
al@284
|
968 </pre>
|
al@284
|
969 EOT
|
al@284
|
970 ;;
|
pankso@266
|
971 esac
|
pankso@266
|
972
|
al@603
|
973
|
al@603
|
974
|
al@603
|
975
|
pankso@230
|
976 # Display search form and result if requested.
|
al@603
|
977
|
al@603
|
978 cat <<EOT
|
al@603
|
979 <div id="ticker"><!-- progress/ --><img src="loader.gif" alt="."/></div>
|
al@293
|
980 EOT
|
al@284
|
981 search_form
|
al@284
|
982
|
al@293
|
983
|
al@603
|
984
|
al@603
|
985
|
al@603
|
986 # Show links for "info" page
|
al@603
|
987
|
al@603
|
988 show_info_links() {
|
al@603
|
989 if [ -n "$1" ]; then
|
al@603
|
990 echo -n "<tr><td class=\"first\"><b>$2</b></td><td>"
|
al@603
|
991
|
al@603
|
992 echo $1 | tr ' ' $'\n' | awk -vt="$3" -vv="$SLITAZ_VERSION" '{
|
al@603
|
993 printf "<a href=\"?%s=%s", t, gensub(/\+/, "%2B", "g", $1);
|
al@603
|
994 printf "&version=%s\">%s</a> ", v, $1;
|
al@603
|
995 }'
|
al@603
|
996 echo "</td></tr>"
|
al@603
|
997 fi
|
al@603
|
998 }
|
al@603
|
999
|
al@603
|
1000 # Source for categories names to translate
|
al@603
|
1001
|
al@603
|
1002 noop() {
|
al@603
|
1003 _ 'base-system'; _ 'x-window'; _ 'utilities'; _ 'network'; _ 'graphics';
|
al@603
|
1004 _ 'multimedia'; _ 'office'; _ 'development'; _ 'system-tools'; _ 'security';
|
al@603
|
1005 _ 'games'; _ 'misc'; _ 'meta'; _ 'non-free'
|
al@603
|
1006 }
|
al@603
|
1007
|
al@603
|
1008 case " $(GET) " in
|
al@603
|
1009 *\ info\ *)
|
al@603
|
1010 . "$WOK/$(GET info)/receipt"
|
al@603
|
1011
|
al@603
|
1012 cat <<EOT
|
al@603
|
1013 <table class="info">
|
al@603
|
1014 <tr>
|
al@603
|
1015 <td class="first"><b>$(_ 'Name')</b></td>
|
al@603
|
1016 <td>$PACKAGE
|
al@603
|
1017 <div class="appImg" style="background: url($(package_icon $PACKAGE 2))"></div>
|
al@603
|
1018 </td>
|
al@603
|
1019 </tr>
|
al@603
|
1020 EOT
|
al@603
|
1021 [ -n "$VERSION" ] && cat <<EOT
|
al@603
|
1022 <tr>
|
al@603
|
1023 <td class="first"><b>$(_ 'Version')</b></td>
|
al@603
|
1024 <td>$VERSION</td>
|
al@603
|
1025 </tr>
|
al@603
|
1026 EOT
|
al@603
|
1027 cat <<EOT
|
al@603
|
1028 <tr>
|
al@603
|
1029 <td class="first"><b>$(_ 'Category')</b></td>
|
al@603
|
1030 <td><a href="?category=$CATEGORY&version=$SLITAZ_VERSION">$(_n "$CATEGORY")</a></td>
|
al@603
|
1031 </tr>
|
al@603
|
1032
|
al@603
|
1033 <tr>
|
al@603
|
1034 <td class="first"><b>$(_ 'Description')</b></td>
|
al@603
|
1035 <td>$(echo "$SHORT_DESC" | htmlize)</td>
|
al@603
|
1036 </tr>
|
al@603
|
1037 EOT
|
al@603
|
1038 [ -n "$MAINTAINER" ] && cat <<EOT
|
al@603
|
1039 <tr>
|
al@603
|
1040 <td class="first"><b>$(_ 'Maintainer')</b></td>
|
al@603
|
1041 <td><a href="?maintainer=$MAINTAINER&version=$SLITAZ_VERSION">$MAINTAINER</a></td>
|
al@603
|
1042 </tr>
|
al@603
|
1043 EOT
|
al@603
|
1044 [ -n "$LICENSE" ] && cat <<EOT
|
al@603
|
1045 <tr>
|
al@603
|
1046 <td class="first"><b>$(_ 'License')</b></td>
|
al@603
|
1047 <td>$(for license in $LICENSE; do
|
al@603
|
1048 echo "<a href=\"?license=$license&version=$SLITAZ_VERSION\">$license</a> "
|
al@603
|
1049 done)</td>
|
al@603
|
1050 </tr>
|
al@603
|
1051 EOT
|
al@603
|
1052 cat <<EOT
|
al@603
|
1053 <tr>
|
al@603
|
1054 <td class="first"><b>$(_ 'Website')</b></td>
|
al@603
|
1055 <td><a href="$WEB_SITE" target="_blank">$WEB_SITE</a></td>
|
al@603
|
1056 </tr>
|
al@603
|
1057 EOT
|
al@603
|
1058 show_info_links "$TAGS" "$(_ 'Tags')" 'tags'
|
al@603
|
1059
|
al@603
|
1060 if [ -n "$PACKED_SIZE" ]; then
|
al@603
|
1061 cat <<EOT
|
al@603
|
1062 <tr>
|
al@603
|
1063 <td class="first"><b>$(_ 'Sizes')</b></td>
|
al@603
|
1064 <td>${PACKED_SIZE/.0/}/${UNPACKED_SIZE/.0/}</td>
|
al@603
|
1065 </tr>
|
al@603
|
1066 EOT
|
al@603
|
1067 elif [ -f "$pinfo" ]; then
|
al@603
|
1068 cat <<EOT
|
al@603
|
1069 <tr>
|
al@603
|
1070 <td class="first"><b>$(_ 'Sizes')</b></td>
|
al@603
|
1071 <td>$(awk -F$'\t' -vp=$PACKAGE '$1==p{print $7}' "$pinfo" | tr ' ' '/')</td>
|
al@603
|
1072 </tr>
|
al@603
|
1073 EOT
|
al@603
|
1074 fi
|
al@603
|
1075
|
al@603
|
1076 show_info_links "$DEPENDS" "$(_ 'Depends')" 'info'
|
al@603
|
1077
|
al@603
|
1078 show_info_links "$PROVIDE" "$(_ 'Provide')" 'info'
|
al@603
|
1079
|
al@603
|
1080 show_info_links "$SUGGESTED" "$(_ 'Suggested')" 'info'
|
al@603
|
1081 cat <<EOT
|
al@603
|
1082 </table>
|
al@603
|
1083
|
al@603
|
1084 EOT
|
al@603
|
1085
|
al@603
|
1086 # Actions / screenshot
|
al@603
|
1087 pkg=${PACKAGE//+/%2B}
|
al@603
|
1088 pkg_url="$MIRROR_URL/packages/$SLITAZ_VERSION/$pkg-$VERSION$EXTRA_VERSION.tazpkg"
|
al@603
|
1089 case "$SLITAZ_VERSION" in
|
al@603
|
1090 cooking)
|
al@603
|
1091 COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">$(_ 'Show cooking log')</a>";;
|
al@603
|
1092 stable|undigest|backports)
|
al@603
|
1093 COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">$(_ 'Show cooking log')</a>";;
|
al@603
|
1094 *)
|
al@603
|
1095 COOKER="$(_ 'N/A')";;
|
al@603
|
1096 esac
|
al@603
|
1097 cat <<EOT
|
al@603
|
1098 <table class="info">
|
al@603
|
1099 <tr>
|
al@603
|
1100 <td>
|
al@603
|
1101 <span class="dl"></span>
|
al@603
|
1102 <a href="$pkg_url">$(_ 'Download package')</a>
|
al@603
|
1103 </td>
|
al@603
|
1104 <td rowspan="5" class="first">
|
al@603
|
1105 <a href="http://screenshots.debian.net/package/$pkg" target="_blank"><img
|
al@603
|
1106 src="http://screenshots.debian.net/thumbnail/$pkg"/></a>
|
al@603
|
1107 </td>
|
al@603
|
1108 </tr>
|
al@603
|
1109 <tr>
|
al@603
|
1110 <td>
|
al@603
|
1111 <span class="rc"></span>
|
al@603
|
1112 <a href="?receipt=$pkg&version=$SLITAZ_VERSION">$(_ 'Show receipt')</a>
|
al@603
|
1113 </td>
|
al@603
|
1114 </tr>
|
al@603
|
1115 <tr>
|
al@603
|
1116 <td>
|
al@603
|
1117 <span class="co"></span>
|
al@603
|
1118 $COOKER
|
al@603
|
1119 </td>
|
al@603
|
1120 </tr>
|
al@603
|
1121 <tr>
|
al@603
|
1122 <td>
|
al@603
|
1123 <span class="dl"></span>
|
al@603
|
1124 <a href="http://127.0.0.1:82/user/pkgs.cgi?do=Install&pkg=$pkg" target="_blank">$(_ 'Install package')</a>
|
al@603
|
1125 </td>
|
al@603
|
1126 </tr>
|
al@603
|
1127 <tr>
|
al@603
|
1128 <td>
|
al@603
|
1129 <span class="dl"></span>
|
al@603
|
1130 <a href="${pkg_url/http/tazpkg}">$(_ 'Download and open (experimental)')</a>
|
al@603
|
1131 </td>
|
al@603
|
1132 </tr>
|
al@603
|
1133 </table>
|
al@603
|
1134 EOT
|
al@603
|
1135
|
al@603
|
1136 # Description
|
al@603
|
1137 if [ -f "$WOK/$PACKAGE/description.txt" ]; then
|
al@603
|
1138 cat <<EOT
|
al@603
|
1139 <h3>$(_ 'Description')</h3>
|
al@603
|
1140 <table><tr><td>$(./sundown < "$WOK/$PACKAGE/description.txt")</td></tr></table>
|
al@603
|
1141 EOT
|
al@603
|
1142 fi
|
al@603
|
1143
|
al@603
|
1144 # Config files
|
al@603
|
1145 if [ -n "$CONFIG_FILES" ]; then
|
al@603
|
1146 cat <<EOT
|
al@603
|
1147 <div class="conf">
|
al@603
|
1148 <h3>$(_ 'Configuration files')</h3>
|
al@603
|
1149 <ul>
|
al@603
|
1150 EOT
|
al@603
|
1151 for file in $CONFIG_FILES; do
|
al@603
|
1152 cat <<EOT
|
al@603
|
1153 <li><a href="ftp://cook.slitaz.org/$PACKAGE/taz/$PACKAGE-$VERSION$EXTRAVERSION/fs$file" target="_blank">$file</a></li>
|
al@603
|
1154 EOT
|
al@603
|
1155 done
|
al@603
|
1156 cat <<EOT
|
al@603
|
1157 </ul>
|
al@603
|
1158 </div>
|
al@603
|
1159 EOT
|
al@603
|
1160 fi
|
al@603
|
1161
|
al@603
|
1162 ;;
|
al@603
|
1163 esac
|
al@603
|
1164
|
al@603
|
1165
|
al@603
|
1166
|
al@603
|
1167
|
al@284
|
1168 case "$OBJECT" in
|
al@284
|
1169
|
al@284
|
1170
|
al@284
|
1171 ### Depends loops; [Reverse] Dependency tree [(SUGGESTED)]
|
al@284
|
1172 Depends)
|
al@284
|
1173 if [ -z "$SEARCH" ]; then
|
al@603
|
1174 cat <<EOT
|
al@603
|
1175 <h3>$(_ 'Loop dependence')</h3>
|
al@603
|
1176 <pre class="hard">
|
al@603
|
1177 EOT
|
al@284
|
1178 for i in $WOK/*/receipt; do
|
al@284
|
1179 PACKAGE=
|
al@284
|
1180 DEPENDS=
|
al@284
|
1181 . $i
|
al@284
|
1182 echo "$PACKAGE $(echo $DEPENDS)"
|
al@284
|
1183 done | show_loops
|
al@603
|
1184 echo '</pre>'
|
al@603
|
1185
|
al@284
|
1186 elif package_exist $SEARCH ; then
|
al@603
|
1187 cat <<EOT
|
al@603
|
1188 <h3>$(_ 'Dependency tree for package "%s"' "$SEARCH")</h3>
|
al@603
|
1189 <pre class="hard">
|
al@603
|
1190 EOT
|
slaxemulator@336
|
1191 unset ALL_DEPS
|
al@603
|
1192 dep_scan $SEARCH ''
|
slaxemulator@336
|
1193 unset SUGGESTED
|
al@284
|
1194 . $WOK/$SEARCH/receipt
|
al@603
|
1195 echo '</pre>'
|
al@603
|
1196
|
al@284
|
1197 if [ -n "$SUGGESTED" ]; then
|
al@603
|
1198 cat <<EOT
|
al@603
|
1199 <h3>$(_ 'Dependency tree for package "%" (SUGGESTED)' "$SEARCH")</h3>
|
al@603
|
1200 <pre class="hard">
|
al@603
|
1201 EOT
|
al@603
|
1202 unset ALL_DEPS
|
al@603
|
1203 dep_scan "$SUGGESTED" ' '
|
al@603
|
1204 echo '</pre>'
|
al@603
|
1205 fi
|
pankso@230
|
1206
|
al@603
|
1207 cat <<EOT
|
al@603
|
1208 <h3>$(_ 'Reverse dependency tree for package "%s"' "$SEARCH")</h3>
|
al@603
|
1209 <pre class="hard">
|
al@603
|
1210 EOT
|
slaxemulator@336
|
1211 unset ALL_DEPS
|
al@284
|
1212 rdep_scan $SEARCH
|
al@603
|
1213 echo '</pre>'
|
al@284
|
1214 fi
|
al@284
|
1215 ;;
|
al@284
|
1216
|
al@284
|
1217
|
al@603
|
1218
|
al@603
|
1219
|
al@284
|
1220 ### Build depends loops; [Reverse] Build dependency tree
|
al@603
|
1221
|
al@284
|
1222 BuildDepends)
|
al@284
|
1223 if [ -z "$SEARCH" ]; then
|
al@603
|
1224 cat <<EOT
|
al@603
|
1225 <h3>$(_ 'Loop dependence of build')</h3>
|
al@603
|
1226 <pre class="hard">
|
al@603
|
1227 EOT
|
al@284
|
1228 for i in $WOK/*/receipt; do
|
al@284
|
1229 PACKAGE=
|
al@284
|
1230 WANTED=
|
al@284
|
1231 BUILD_DEPENDS=
|
al@284
|
1232 . $i
|
al@284
|
1233 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
|
al@284
|
1234 done | show_loops
|
al@603
|
1235 echo '</pre>'
|
al@603
|
1236
|
al@284
|
1237 elif package_exist $SEARCH ; then
|
al@603
|
1238 cat <<EOT
|
al@603
|
1239 <h3>$(_ 'Package "%s" requires next packages to be built' "$SEARCH")</h3>
|
al@603
|
1240 <pre class="hard">
|
al@603
|
1241 EOT
|
al@603
|
1242 unset ALL_DEPS
|
al@603
|
1243 dep_scan $SEARCH '' build
|
al@603
|
1244 echo '</pre>'
|
pankso@230
|
1245
|
al@603
|
1246 cat <<EOT
|
al@603
|
1247 <h3>$(_ 'Next packages requires package "%s" to be built' "$SEARCH")</h3>
|
al@603
|
1248 <pre class="hard">
|
al@603
|
1249 EOT
|
slaxemulator@336
|
1250 unset ALL_DEPS
|
al@284
|
1251 rdep_scan $SEARCH build
|
al@603
|
1252 echo '</pre>'
|
al@284
|
1253 fi
|
al@284
|
1254 ;;
|
al@284
|
1255
|
al@284
|
1256
|
al@603
|
1257
|
al@603
|
1258
|
al@284
|
1259 ### Common files
|
al@603
|
1260
|
al@284
|
1261 FileOverlap)
|
pascal@318
|
1262 if package_exist $SEARCH; then
|
al@603
|
1263 cat <<EOT
|
pankso@230
|
1264
|
al@603
|
1265 <h3>$(_ 'Next packages may overwrite files of package "%s"' "$SEARCH")</h3>
|
al@603
|
1266 <pre class="hard">
|
al@603
|
1267 EOT
|
pascal@457
|
1268 ( unlzma < $filelist | grep ^$SEARCH: ;
|
pascal@457
|
1269 unlzma < $filelist | grep -v ^$SEARCH: ) | awk '
|
pankso@230
|
1270 BEGIN { pkg=""; last="x" }
|
pankso@230
|
1271 {
|
pankso@230
|
1272 if ($2 == "") next
|
al@603
|
1273 if (index($2, last) == 1 && substr($2, 1+length(last), 1) == "/")
|
pankso@230
|
1274 delete file[last]
|
pankso@230
|
1275 last=$2
|
pankso@230
|
1276 if (pkg == "") pkg=$1
|
pankso@230
|
1277 if ($1 == pkg) file[$2]=$1
|
pankso@230
|
1278 else if (file[$2] == pkg) print
|
pankso@230
|
1279 }
|
pankso@230
|
1280 ' | display_packages_and_files
|
al@603
|
1281 echo '</pre>'
|
al@284
|
1282 fi
|
al@284
|
1283 ;;
|
al@284
|
1284
|
al@284
|
1285
|
al@603
|
1286
|
al@603
|
1287
|
al@284
|
1288 ### File search
|
al@603
|
1289
|
al@284
|
1290 File)
|
al@284
|
1291 if [ -n "$SEARCH" ]; then
|
al@603
|
1292 cat <<EOT
|
pankso@230
|
1293
|
al@603
|
1294 <h3>$(_ 'File names matching the "%s"' "$SEARCH")</h3>
|
al@603
|
1295 <table class="list">
|
al@603
|
1296 EOT
|
slaxemulator@336
|
1297 unset last
|
al@603
|
1298 unlzma < $filelist | grep -i "$SEARCH" | \
|
al@603
|
1299 while read pkg file; do
|
al@603
|
1300 echo "$file" | grep -qi "$SEARCH" || continue
|
pankso@230
|
1301 if [ "$last" != "${pkg%:}" ]; then
|
al@603
|
1302 [ -n "$last" ] && cat <<EOT
|
al@603
|
1303 </td></tr>
|
al@603
|
1304 EOT
|
pankso@230
|
1305 last=${pkg%:}
|
pankso@230
|
1306 (
|
pankso@230
|
1307 . $WOK/$last/receipt
|
al@603
|
1308 package_entry
|
al@603
|
1309 cat <<EOT
|
al@603
|
1310 <tr><td colspan="3" class="pre">
|
al@293
|
1311 EOT
|
pankso@230
|
1312 )
|
pankso@230
|
1313 fi
|
al@603
|
1314 echo -n "$file" | awk -vquery="$SEARCH" 'BEGIN{IGNORECASE=1}gsub(query, "<mark>&</mark>")'
|
al@603
|
1315 echo "<br/>"
|
pankso@230
|
1316 done
|
al@603
|
1317 cat <<EOT
|
al@293
|
1318 </td></tr>
|
al@293
|
1319 </table>
|
al@603
|
1320 EOT
|
al@284
|
1321 fi
|
al@284
|
1322 ;;
|
al@284
|
1323
|
al@284
|
1324
|
al@603
|
1325
|
al@603
|
1326
|
al@284
|
1327 ### List of files
|
al@603
|
1328
|
al@284
|
1329 File_list)
|
al@284
|
1330 if package_exist $SEARCH; then
|
al@603
|
1331 cat <<EOT
|
pankso@230
|
1332
|
al@603
|
1333 <h3>$(_ 'List of files in the package "%s"' "$SEARCH")</h3>
|
al@603
|
1334 <pre class="hard">
|
al@603
|
1335 EOT
|
slaxemulator@336
|
1336 unset last
|
pascal@457
|
1337 unlzma < $filelist \
|
al@603
|
1338 | grep ^$SEARCH: | sed 's|.*: | |' | sort
|
al@603
|
1339 cat <<EOT
|
pankso@230
|
1340 </pre>
|
al@603
|
1341 <pre class="hard">
|
al@603
|
1342 EOT
|
pascal@457
|
1343 filenb=$(unlzma < $filelist | grep ^$SEARCH: | wc -l)
|
al@603
|
1344 _p '%s file' '%s files' "$filenb" "$filenb"
|
al@603
|
1345 cat <<EOT
|
al@284
|
1346 \
|
slaxemulator@320
|
1347 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $pkglist)
|
al@284
|
1348 </pre>
|
al@603
|
1349 EOT
|
al@284
|
1350 fi
|
al@284
|
1351 ;;
|
al@284
|
1352
|
al@284
|
1353
|
al@603
|
1354
|
al@603
|
1355
|
al@284
|
1356 ### Package description
|
al@603
|
1357
|
al@284
|
1358 Desc)
|
al@603
|
1359 if [ -z "$SEARCH" ]; then
|
al@603
|
1360 cat <<EOT
|
al@603
|
1361 <div class="err">$(_ 'Please specify name of the package.')</div>
|
al@603
|
1362 <p> <br/> </p>
|
al@603
|
1363 EOT
|
al@603
|
1364 xhtml_footer
|
al@603
|
1365 exit 0
|
al@603
|
1366 fi
|
pankso@230
|
1367
|
al@603
|
1368 cat <<EOT
|
al@603
|
1369 <h3>$(_ 'Descriptions matching the "%s"' "$SEARCH")</h3>
|
al@603
|
1370 EOT
|
al@603
|
1371 if [ -f "$pinfo" ]; then
|
al@603
|
1372 package_entries desc "$SEARCH"
|
al@284
|
1373 else
|
al@603
|
1374 echo '<table class="list">'
|
slaxemulator@336
|
1375 unset last
|
al@603
|
1376 # FIXME packages.desc should not be used (at least this way)
|
al@603
|
1377 grep -i "$SEARCH" "$pkgsrepo/packages.desc" | \
|
al@284
|
1378 sort | while read pkg extras ; do
|
al@603
|
1379 . "$WOK/$pkg/receipt"
|
al@284
|
1380 package_entry
|
al@284
|
1381 done
|
al@603
|
1382 echo '</table>'
|
al@284
|
1383 fi
|
al@284
|
1384 ;;
|
al@284
|
1385
|
al@603
|
1386
|
al@603
|
1387
|
al@603
|
1388
|
slaxemulator@336
|
1389 Bugs)
|
al@603
|
1390 cat <<EOT
|
slaxemulator@336
|
1391
|
al@603
|
1392 <h3>$(_ 'Known bugs in the packages')</h3>
|
al@603
|
1393
|
al@603
|
1394 <table class="bugs list">
|
al@603
|
1395 EOT
|
slaxemulator@336
|
1396 unset last
|
slaxemulator@336
|
1397 grep ^BUGS= $WOK/*/receipt | \
|
slaxemulator@336
|
1398 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
slaxemulator@336
|
1399 unset BUGS
|
al@603
|
1400 . "$WOK/$pkg/receipt"
|
al@603
|
1401 package_entry
|
al@603
|
1402 echo -n '<tr><td> </td><td colspan="2">'
|
al@603
|
1403 echo -n "$BUGS" | htmlize
|
al@603
|
1404 echo '</td></tr>'
|
slaxemulator@336
|
1405 done
|
al@603
|
1406 echo '</table>'
|
slaxemulator@336
|
1407 ;;
|
slaxemulator@336
|
1408
|
slaxemulator@336
|
1409
|
al@603
|
1410
|
al@603
|
1411
|
slaxemulator@336
|
1412 ### Arch
|
al@603
|
1413
|
slaxemulator@336
|
1414 Arch)
|
al@603
|
1415 if [ -n "$SEARCH" ]; then
|
al@603
|
1416 cat <<EOT
|
slaxemulator@336
|
1417
|
al@603
|
1418 <h3>$(_ 'The list of packages of architecture "%s"' "$SEARCH")</h3>
|
al@603
|
1419 <pre class="hard">
|
al@603
|
1420 EOT
|
al@603
|
1421 unset last
|
al@603
|
1422 grep ^HOST_ARCH= $WOK/*/receipt | grep -i "$SEARCH" | \
|
al@603
|
1423 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
al@603
|
1424 unset HOST_ARCH
|
al@603
|
1425 . "$WOK/$pkg/receipt"
|
al@603
|
1426 echo " $HOST_ARCH " | grep -iq " $SEARCH " &&
|
al@603
|
1427 package_entry_inline
|
al@603
|
1428 done
|
al@603
|
1429 cat <<EOT
|
slaxemulator@336
|
1430 </pre>
|
al@603
|
1431 EOT
|
al@603
|
1432 else
|
al@603
|
1433 # Display arch cloud
|
al@603
|
1434 grep -l ^HOST_ARCH= $WOK/*/receipt | while read file; do
|
al@603
|
1435 HOST_ARCH=
|
al@603
|
1436 . $file
|
al@603
|
1437 echo $HOST_ARCH
|
al@603
|
1438 done | display_cloud arch
|
al@603
|
1439 fi
|
slaxemulator@336
|
1440 ;;
|
al@284
|
1441
|
al@603
|
1442
|
al@603
|
1443
|
al@603
|
1444
|
pascal@458
|
1445 ### Maintainer
|
al@603
|
1446
|
pascal@458
|
1447 Maintainer)
|
pascal@458
|
1448 if [ -n "$SEARCH" ]; then
|
al@603
|
1449 cat <<EOT
|
pascal@458
|
1450
|
al@603
|
1451 <h3>$(_n 'The list of packages that <%s> maintains' "$SEARCH" | htmlize)</h3>
|
al@603
|
1452 <table class="list">
|
al@603
|
1453 EOT
|
pascal@458
|
1454 unset last
|
pascal@458
|
1455 grep ^MAINTAINER= $WOK/*/receipt | grep -i "$SEARCH" | \
|
pascal@458
|
1456 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
al@603
|
1457 . "$WOK/$pkg/receipt"
|
pascal@458
|
1458 package_entry
|
pascal@458
|
1459 done
|
al@603
|
1460 cat <<EOT
|
pascal@458
|
1461 </table>
|
al@603
|
1462 EOT
|
pascal@458
|
1463 else
|
pascal@458
|
1464 # Display maintainer cloud
|
pascal@458
|
1465 grep -l ^MAINTAINER= $WOK/*/receipt | while read file; do
|
pascal@458
|
1466 MAINTAINER=
|
pascal@458
|
1467 . $file
|
pascal@458
|
1468 echo $MAINTAINER
|
pascal@458
|
1469 done | display_cloud maintainer
|
pascal@458
|
1470 fi
|
pascal@458
|
1471 ;;
|
pascal@458
|
1472
|
al@603
|
1473
|
al@603
|
1474
|
al@603
|
1475
|
pascal@458
|
1476 ### License
|
al@603
|
1477
|
pascal@458
|
1478 License)
|
pascal@458
|
1479 if [ -n "$SEARCH" ]; then
|
al@603
|
1480 cat <<EOT
|
al@603
|
1481 <h3>$(_ 'Packages with "%s" license' "$SEARCH")</h3>
|
al@603
|
1482 <table class="list">
|
al@603
|
1483 EOT
|
pascal@458
|
1484 unset last
|
pascal@458
|
1485 grep ^LICENSE= $WOK/*/receipt | grep -i "$SEARCH" | \
|
pascal@458
|
1486 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
al@603
|
1487 . "$WOK/$pkg/receipt"
|
pascal@458
|
1488 package_entry
|
pascal@458
|
1489 done
|
al@603
|
1490 echo '</table>'
|
pascal@458
|
1491 else
|
pascal@458
|
1492 # Display license cloud
|
pascal@458
|
1493 grep -l ^LICENSE= $WOK/*/receipt | while read file; do
|
pascal@458
|
1494 LICENSE=
|
pascal@458
|
1495 . $file
|
pascal@458
|
1496 echo $LICENSE
|
pascal@458
|
1497 done | display_cloud license
|
pascal@458
|
1498 fi
|
pascal@458
|
1499 ;;
|
pascal@458
|
1500
|
al@603
|
1501
|
al@603
|
1502
|
al@603
|
1503
|
pascal@458
|
1504 ### Category
|
al@603
|
1505
|
pascal@458
|
1506 Category)
|
pascal@458
|
1507 if [ -n "$SEARCH" ]; then
|
al@603
|
1508 cat <<EOT
|
al@603
|
1509 <h3>$(_ 'Packages of category "%s"' "$SEARCH")</h3>
|
al@603
|
1510 EOT
|
al@603
|
1511 if [ -f "$pinfo" ]; then
|
al@603
|
1512 package_entries category "$SEARCH"
|
al@603
|
1513 else
|
al@603
|
1514 echo '<table class="list">'
|
al@603
|
1515 unset last
|
al@603
|
1516 grep ^CATEGORY= $WOK/*/receipt | grep -i "$SEARCH" | \
|
al@603
|
1517 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
al@603
|
1518 . "$WOK/$pkg/receipt"
|
al@603
|
1519 package_entry
|
al@603
|
1520 done
|
al@603
|
1521 echo '</table>'
|
al@603
|
1522 fi
|
pascal@458
|
1523 else
|
pascal@458
|
1524 # Display category cloud
|
al@603
|
1525 if [ -f "$pinfo" ]; then
|
al@603
|
1526 TAGS="$(awk -F$'\t' '{if($3){print $3}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
|
al@603
|
1527 MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
|
al@603
|
1528 echo "$TAGS" | awk -vMAX="$MAX" -vv="$SLITAZ_VERSION" '{
|
al@603
|
1529 printf "<span class=\"tagn\">%s</span>", $1;
|
al@603
|
1530 printf "<a class=\"taga tag%s\" ", int($1 * 10 / MAX + 1);
|
al@603
|
1531 printf "href=\"?category=%s&version=%s\">%s</a> ", $2, v, $2;
|
al@603
|
1532 }'
|
al@603
|
1533 else
|
al@603
|
1534 grep -l ^CATEGORY= $WOK/*/receipt | \
|
al@603
|
1535 while read file; do
|
al@603
|
1536 CATEGORY=
|
al@603
|
1537 . $file
|
al@603
|
1538 echo $CATEGORY
|
pascal@458
|
1539 done | display_cloud category
|
al@603
|
1540 fi
|
pascal@458
|
1541 fi
|
pascal@458
|
1542 ;;
|
pascal@458
|
1543
|
al@603
|
1544
|
al@603
|
1545
|
al@603
|
1546
|
al@284
|
1547 ### Tags
|
al@603
|
1548
|
al@284
|
1549 Tags)
|
pascal@312
|
1550 if [ -n "$SEARCH" ]; then
|
al@603
|
1551 cat <<EOT
|
al@603
|
1552 <h3>$(_ 'The list of packages tagged "%s"' "$SEARCH")</h3>
|
al@603
|
1553 EOT
|
al@603
|
1554 if [ -f "$pinfo" ]; then
|
al@603
|
1555 package_entries tags "$SEARCH"
|
al@603
|
1556 else
|
al@603
|
1557 echo '<table class="list">'
|
al@603
|
1558 unset last
|
al@603
|
1559 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
|
al@603
|
1560 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
al@603
|
1561 . "$WOK/$pkg/receipt"
|
al@603
|
1562 package_entry
|
al@603
|
1563 done
|
al@603
|
1564 echo '</table>'
|
al@603
|
1565 fi
|
pascal@312
|
1566 else
|
pascal@312
|
1567 # Display tag cloud
|
al@603
|
1568 if [ -f "$pinfo" ]; then
|
al@603
|
1569 TAGS="$(awk -F$'\t' '{if($6){print $6}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
|
al@603
|
1570 MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
|
al@603
|
1571 echo "$TAGS" | awk -vMAX="$MAX" -vv="$SLITAZ_VERSION" '{
|
al@603
|
1572 printf "<span class=\"tagn\">%s</span>", $1;
|
al@603
|
1573 printf "<a class=\"taga tag%s\" ", int($1 * 10 / MAX + 1);
|
al@603
|
1574 printf "href=\"?tags=%s&version=%s\">%s</a> ", $2, v, $2;
|
al@603
|
1575 }'
|
al@603
|
1576 else
|
al@603
|
1577 grep -l ^TAGS= $WOK/*/receipt | \
|
al@603
|
1578 while read file; do
|
al@603
|
1579 TAGS=
|
al@603
|
1580 . $file
|
al@603
|
1581 echo $TAGS
|
pascal@560
|
1582 done | display_cloud tags
|
al@603
|
1583 fi
|
pascal@312
|
1584 fi
|
al@284
|
1585 ;;
|
al@284
|
1586
|
al@284
|
1587
|
al@603
|
1588
|
al@603
|
1589
|
al@293
|
1590 ### Package receipt with syntax highlighter
|
al@603
|
1591
|
al@284
|
1592 Receipt)
|
al@293
|
1593 if package_exist "$SEARCH"; then
|
al@603
|
1594 cat <<EOT
|
pankso@230
|
1595
|
al@603
|
1596 <h3>$(_ 'Receipt for package "%s"' "$SEARCH")</h3>
|
al@603
|
1597 <pre class="hard">
|
al@603
|
1598 EOT
|
al@603
|
1599 if [ -f $WOK/$SEARCH/taz/*/receipt ]; then
|
al@603
|
1600 syntax_highlighter $WOK/$SEARCH/taz/*/receipt
|
al@293
|
1601 else
|
al@603
|
1602 syntax_highlighter $WOK/$SEARCH/receipt
|
al@293
|
1603 fi
|
al@293
|
1604 echo '</pre>'
|
al@293
|
1605 fi
|
al@284
|
1606 ;;
|
al@284
|
1607
|
al@284
|
1608
|
al@603
|
1609
|
al@603
|
1610
|
al@284
|
1611 ### Package
|
al@603
|
1612
|
al@284
|
1613 Package)
|
al@603
|
1614 if check_n "$SEARCH"; then
|
al@603
|
1615 cat <<EOT
|
al@603
|
1616 <h3>$(_ 'Package names matching the "%s"' "$SEARCH")</h3>
|
al@603
|
1617 EOT
|
pankso@230
|
1618
|
al@603
|
1619 if [ -f "$pinfo" ]; then
|
al@603
|
1620 package_entries name "$SEARCH"
|
al@603
|
1621 else
|
al@603
|
1622 echo '<table class="list">'
|
al@603
|
1623 for pkg in $(ls $WOK/ | grep -i "$SEARCH"); do
|
al@603
|
1624 . "$WOK/$pkg/receipt"
|
al@603
|
1625 package_entry
|
al@603
|
1626 done
|
al@603
|
1627 echo '</table>'
|
al@603
|
1628 fi
|
pankso@230
|
1629
|
al@603
|
1630 vpkgs="$(cut -d= -f1 < $equiv | grep -i $SEARCH)"
|
al@603
|
1631 for vpkg in $vpkgs; do
|
al@603
|
1632 cat <<EOT
|
al@603
|
1633
|
al@603
|
1634 <h3>$(_ 'Packages providing the package "%s"' "$vpkg")</h3>
|
al@603
|
1635
|
al@603
|
1636 <table class="list">
|
al@603
|
1637 EOT
|
al@603
|
1638 for pkg in $(grep $vpkg= $equiv | sed "s|$vpkg=||"); do
|
pankso@230
|
1639 . $WOK/${pkg#*:}/receipt
|
pankso@230
|
1640 package_entry
|
pankso@230
|
1641 done
|
al@603
|
1642 echo '</table>'
|
pankso@230
|
1643 done
|
al@284
|
1644 fi
|
al@284
|
1645 ;;
|
al@284
|
1646 esac
|
al@284
|
1647
|
al@284
|
1648 xhtml_footer
|
pankso@230
|
1649
|
pankso@230
|
1650 exit 0
|