rev |
line source |
pankso@230
|
1 #!/bin/sh
|
pankso@230
|
2 # Tiny CGI search engine for SliTaz packages on http://pkgs.slitaz.org/
|
pankso@230
|
3 # Christophe Lincoln <pankso@slitaz.org>
|
al@284
|
4 # Aleksej Bobylev <al.bobylev@gmail.com>
|
pankso@230
|
5 #
|
al@284
|
6
|
al@284
|
7 # Parse query string
|
pankso@266
|
8 . /usr/lib/slitaz/httphelper.sh
|
al@293
|
9 echo -n "0" > $HOME/ifEven
|
al@284
|
10
|
al@284
|
11 # User preferred language
|
al@284
|
12 # parameter $1 have priority; without parameter $1 - browser language only
|
al@284
|
13 # if we don't support any of user languages (or only en), then return C locale
|
al@284
|
14 user_lang() {
|
al@284
|
15 LANG="C"
|
al@284
|
16 IFS=","
|
al@284
|
17 for lang in $1 $HTTP_ACCEPT_LANGUAGE
|
al@284
|
18 do
|
al@284
|
19 lang=${lang%;*} lang=${lang# } lang=${lang%-*} lang=${lang%_*}
|
al@284
|
20 case "$lang" in
|
al@284
|
21 de) LANG="de_DE" ;;
|
al@284
|
22 es) LANG="es_ES" ;;
|
al@284
|
23 fr) LANG="fr_FR" ;;
|
al@284
|
24 it) LANG="it_IT" ;;
|
al@284
|
25 pt) LANG="pt_BR" ;;
|
al@284
|
26 ru) LANG="ru_RU" ;;
|
al@284
|
27 zh) LANG="zh_TW" ;;
|
al@284
|
28 esac
|
al@284
|
29 if echo "de en fr pt ru zh" | fgrep -q "$lang"; then
|
al@284
|
30 break
|
al@284
|
31 fi
|
al@284
|
32 done
|
al@284
|
33 unset IFS
|
al@284
|
34 echo "$LANG"
|
al@284
|
35 }
|
al@284
|
36
|
al@284
|
37 # Short 2-letter lang code from ll_CC
|
al@284
|
38 ll_lang() {
|
al@284
|
39 ll_CC="$1"
|
al@284
|
40 echo ${ll_CC%_*}
|
al@284
|
41 }
|
al@284
|
42
|
al@293
|
43 # Part of query to indicate current debug mode
|
al@293
|
44 ifdebug() {
|
al@293
|
45 ifdebug="$(GET debug)"
|
al@293
|
46 [ ! -z "$ifdebug" ] && ifdebug="$1$ifdebug"
|
al@293
|
47 echo "$ifdebug"
|
al@284
|
48 }
|
al@284
|
49
|
al@293
|
50 # GET or POST variable
|
al@293
|
51 GETPOST() {
|
al@293
|
52 echo "$(POST $1)$(GET $1)"
|
al@293
|
53 }
|
al@293
|
54
|
al@293
|
55 # Nice URL replacer - to copy url from address bar
|
al@293
|
56 if [ "$REQUEST_METHOD" == "POST" -o ! -z $(GET submit) ]; then
|
al@293
|
57 OBJECT=$(GETPOST object)
|
al@293
|
58 SEARCH=$(GETPOST query)
|
al@293
|
59 case "$OBJECT" in
|
al@293
|
60 Package) NICE="package=$SEARCH";;
|
al@293
|
61 Desc) NICE="desc=$SEARCH";;
|
al@293
|
62 Tags) NICE="tags=$SEARCH";;
|
al@293
|
63 Receipt) NICE="receipt=$SEARCH";;
|
al@293
|
64 Depends) NICE="depends=$SEARCH";;
|
al@293
|
65 BuildDepends) NICE="builddepends=$SEARCH";;
|
al@293
|
66 File) NICE="file=$SEARCH";;
|
al@293
|
67 File_list) NICE="filelist=$SEARCH";;
|
al@293
|
68 FileOverlap) NICE="fileoverlap=$SEARCH";;
|
al@293
|
69 esac
|
al@293
|
70 # version, if needed
|
al@293
|
71 version="$(GETPOST version)"
|
al@293
|
72 if [ ! -z "$version" -a "$version" != "cooking" ]; then
|
al@293
|
73 NICE="${NICE}&version=${version:0:1}"
|
al@293
|
74 fi
|
al@293
|
75 # lang, if needed
|
al@293
|
76 query_lang="$(GETPOST lang)"
|
al@293
|
77 pref_lang="$(user_lang)"
|
al@293
|
78 browser_lang="$(ll_lang $pref_lang)"
|
al@293
|
79 if [ ! -z "$query_lang" -a "$query_lang" != "$browser_lang" ]; then
|
al@293
|
80 NICE="${NICE}&lang=$query_lang"
|
al@293
|
81 fi
|
al@293
|
82 # verbose, if needed
|
al@293
|
83 verboseq="$(GETPOST verbose)"
|
al@293
|
84 if [ ! -z "$verboseq" -a "$verboseq" != "0" ]; then
|
al@293
|
85 NICE="${NICE}&verbose=1"
|
al@293
|
86 fi
|
al@293
|
87 # debug, if needed
|
al@293
|
88 debugq="$(GET debug)"
|
al@293
|
89 if [ ! -z "$debugq" -a "$debugq" == "debug" ]; then
|
al@293
|
90 NICE="${NICE}&debug"
|
al@293
|
91 fi
|
al@293
|
92 # redirect
|
al@293
|
93 header "HTTP/1.1 301 Moved Permanently" "Location: $SCRIPT_NAME?$NICE"
|
al@293
|
94 exit 0
|
al@293
|
95 fi
|
al@284
|
96
|
al@284
|
97
|
al@284
|
98
|
al@284
|
99 OBJECT="$(GET object)"
|
al@284
|
100 SEARCH="$(GET query)"
|
al@284
|
101 SLITAZ_VERSION="$(GET version)"
|
al@284
|
102 VERBOSE="$(GET verbose)"
|
al@261
|
103
|
pankso@268
|
104 # Internal variables
|
al@284
|
105 #DATE=$(date +%Y-%m-%d\ %H:%M:%S)
|
pankso@268
|
106
|
al@261
|
107 # Internationalization
|
al@261
|
108 . /usr/bin/gettext.sh
|
al@284
|
109 export TEXTDOMAIN='tazpkg-web'
|
pankso@239
|
110
|
al@284
|
111 SEARCH=""
|
al@284
|
112 VERBOSE=0
|
al@284
|
113 for i in $(echo $QUERY_STRING | sed 's/[?&]/ /g'); do
|
al@284
|
114 # SLITAZ_VERSION=cooking
|
al@284
|
115 case "$(echo $i | tr [A-Z] [a-z])" in
|
al@284
|
116 query=*|search=*) [ ${i#*=} == Search ] || SEARCH=${i#*=};;
|
al@284
|
117 object=*) OBJECT=${i#*=};;
|
al@284
|
118 verbose=*) VERBOSE=${i#*=};;
|
al@284
|
119 lang=*) LANG=${i#*=};;
|
al@284
|
120 file=*) SEARCH=${i#*=}; OBJECT=File;;
|
al@284
|
121 desc=*) SEARCH=${i#*=}; OBJECT=Desc;;
|
al@284
|
122 tags=*) SEARCH=${i#*=}; OBJECT=Tags;;
|
al@284
|
123 receipt=*) SEARCH=${i#*=}; OBJECT=Receipt;;
|
al@284
|
124 filelist=*) SEARCH=${i#*=}; OBJECT=File_list;;
|
al@284
|
125 package=*) SEARCH=${i#*=}; OBJECT=Package;;
|
al@284
|
126 depends=*) SEARCH=${i#*=}; OBJECT=Depends;;
|
al@284
|
127 builddepends=*) SEARCH=${i#*=}; OBJECT=BuildDepends;;
|
al@284
|
128 fileoverlap=*) SEARCH=${i#*=}; OBJECT=FileOverlap;;
|
al@284
|
129 version=[1-9]*) i=${i%%.*}; SLITAZ_VERSION=${i#*=}.0;;
|
al@284
|
130 version=s*|version=4*) SLITAZ_VERSION=stable;;
|
al@284
|
131 version=u*) SLITAZ_VERSION=undigest;;
|
al@284
|
132 version=t*) SLITAZ_VERSION=tiny;;
|
al@284
|
133 esac
|
al@284
|
134 done
|
al@284
|
135 [ -z "$SLITAZ_VERSION" ] && SLITAZ_VERSION=cooking
|
al@284
|
136
|
al@293
|
137 #
|
pankso@268
|
138 # Content negotiation for Gettext
|
al@293
|
139 #
|
al@284
|
140 LANG=$(user_lang $(GET lang))
|
al@284
|
141 lang="$(ll_lang $LANG)"
|
pankso@278
|
142 export LANG LC_ALL=$LANG
|
pankso@230
|
143
|
al@284
|
144
|
al@261
|
145 case "$OBJECT" in
|
al@284
|
146 File) selected_file="selected";;
|
al@284
|
147 Desc) selected_desc="selected";;
|
al@284
|
148 Tags) selected_tags="selected";;
|
al@284
|
149 Receipt) selected_receipt="selected";;
|
al@284
|
150 File_list) selected_file_list="selected";;
|
al@284
|
151 Depends) selected_depends="selected";;
|
al@261
|
152 BuildDepends) selected_build_depends="selected";;
|
al@261
|
153 FileOverlap) selected_overlap="selected";;
|
al@261
|
154 esac
|
pankso@230
|
155
|
al@261
|
156 case "$SLITAZ_VERSION" in
|
al@261
|
157 tiny) selected_tiny="selected";;
|
al@261
|
158 1.0) selected_1="selected";;
|
al@261
|
159 2.0) selected_2="selected";;
|
al@261
|
160 3.0) selected_3="selected";;
|
al@261
|
161 stable) selected_stable="selected";;
|
al@261
|
162 undigest) selected_undigest="selected";;
|
al@261
|
163 esac
|
pankso@230
|
164
|
al@261
|
165 # unescape query
|
al@261
|
166 SEARCH="$(echo $SEARCH | sed 's/%2B/+/g; s/%3A/:/g; s|%2F|/|g')"
|
al@236
|
167
|
pankso@230
|
168 WOK=/home/slitaz/$SLITAZ_VERSION/wok
|
pankso@230
|
169 PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages
|
pankso@230
|
170
|
pankso@230
|
171 # Search form
|
al@284
|
172 # TODO: add hint 'You are can search for depends loop, if textfield is empty'...
|
al@284
|
173 # add progress ticker while page is not complete
|
pankso@230
|
174 search_form()
|
pankso@230
|
175 {
|
pankso@230
|
176 cat << _EOT_
|
pankso@230
|
177
|
al@293
|
178 <div class="form">
|
al@293
|
179 <form id="s_form" method="post" action="$SCRIPT_NAME$(ifdebug '?')">
|
al@284
|
180 <input type="hidden" name="lang" value="$lang" />
|
al@293
|
181 <span class="small">
|
al@293
|
182 <select name="object">
|
al@293
|
183 <option value="Package">$(gettext "Package")</option>
|
al@293
|
184 <option $selected_desc value="Desc">$(gettext "Description")</option>
|
al@293
|
185 <option $selected_tags value="Tags">$(gettext "Tags")</option>
|
al@293
|
186 <option $selected_receipt value="Receipt">$(gettext "Receipt")</option>
|
al@293
|
187 <option $selected_depends value="Depends">$(gettext "Depends")</option>
|
al@293
|
188 <option $selected_build_depends value="BuildDepends">$(gettext "Build depends")</option>
|
al@293
|
189 <option $selected_file value="File">$(gettext "File")</option>
|
al@293
|
190 <option $selected_file_list value="File_list">$(gettext "File list")</option>
|
al@293
|
191 <option $selected_overlap value="FileOverlap">$(gettext "common files")</option>
|
al@293
|
192 </select>
|
al@293
|
193 </span>
|
al@293
|
194 <span class="stretch">
|
al@293
|
195 <input autofocus type="text" name="query" id="query" value="$SEARCH" />
|
al@293
|
196 </span>
|
al@293
|
197 <span class="small">
|
al@293
|
198 <select name="version">
|
al@293
|
199 <option value="cooking">$(gettext "cooking")</option>
|
al@293
|
200 <option $selected_stable value="stable">4.0</option>
|
al@293
|
201 <option $selected_3 value="3.0">3.0</option>
|
al@293
|
202 <option $selected_2 value="2.0">2.0</option>
|
al@293
|
203 <option $selected_1 value="1.0">1.0</option>
|
al@293
|
204 <option $selected_tiny value="tiny">$(gettext "tiny")</option>
|
al@293
|
205 <option $selected_undigest value="undigest">$(gettext "undigest")</option>
|
al@293
|
206 </select>
|
al@293
|
207 </span>
|
al@293
|
208 <span class="small">
|
al@293
|
209 <input type="submit" value="$(gettext 'Search')" />
|
al@293
|
210 </span>
|
pankso@230
|
211 </form>
|
al@293
|
212 </div>
|
pankso@230
|
213 _EOT_
|
pankso@230
|
214 }
|
pankso@230
|
215
|
al@261
|
216 # xHTML5 Header.
|
pankso@231
|
217 xhtml_header() {
|
al@261
|
218 . lib/header.sh
|
pankso@230
|
219 }
|
pankso@230
|
220
|
pankso@230
|
221 # xHTML Footer.
|
al@284
|
222 # TODO: caching the summary for 5 minutes
|
pankso@231
|
223 xhtml_footer() {
|
al@261
|
224 PKGS=$(ls $WOK/ | wc -l)
|
al@261
|
225 FILES=$(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | wc -l)
|
al@284
|
226 . lib/footer.sh
|
pankso@230
|
227 }
|
pankso@230
|
228
|
pankso@230
|
229 installed_size()
|
pankso@230
|
230 {
|
al@284
|
231 if [ $VERBOSE -gt 0 ]; then
|
al@284
|
232 inst=$(grep -A 3 "^$1\$" $PACKAGES_REPOSITORY/packages.txt | grep installed)
|
al@284
|
233 # size=$(echo $inst | cut -d'(' -f2 | cut -d' ' -f1)
|
al@284
|
234 echo $inst | sed 's/.*(\(.*\).*/(\1)/'
|
al@284
|
235 # echo $size
|
al@284
|
236 # | sed 's/.*(\(.*\) installed.*/(\1) /'
|
al@284
|
237 fi
|
pankso@230
|
238 }
|
pankso@230
|
239
|
al@293
|
240 oddeven() {
|
al@293
|
241 ifEven=$(cat $HOME/ifEven)
|
al@293
|
242 [ "$1" == "1" ] && ifEven="0"
|
al@293
|
243 case "$ifEven" in
|
al@293
|
244 "0") ifEven="1"; echo -n " class=\"even\"";;
|
al@293
|
245 "1") ifEven="0";;
|
al@293
|
246 esac
|
al@293
|
247 echo -n "$ifEven" > $HOME/ifEven
|
al@293
|
248 }
|
al@293
|
249
|
al@293
|
250 package_entry() {
|
al@293
|
251 cat << EOT
|
al@293
|
252 <tr$(oddeven $1)>
|
al@293
|
253 EOT
|
al@293
|
254 if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
|
al@293
|
255 cat << _EOT_
|
al@293
|
256 <td class="first"><a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a></td>
|
al@293
|
257 <td class="first">$(installed_size $PACKAGE)</td>
|
al@293
|
258 <td>$SHORT_DESC</td>
|
pankso@230
|
259 _EOT_
|
al@293
|
260 else
|
al@293
|
261 PACKAGE_HREF="<u>$PACKAGE</u>"
|
al@293
|
262 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
|
al@293
|
263 nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
|
al@293
|
264 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
|
al@293
|
265 busybox wget -s $PACKAGE_URL 2> /dev/null &&
|
al@293
|
266 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
|
al@293
|
267 cat << _EOT_
|
al@293
|
268 <td class="first">$PACKAGE_HREF</td>
|
al@293
|
269 <td class="first">$(installed_size $PACKAGE)</td>
|
al@293
|
270 <td>$SHORT_DESC</td>
|
pankso@230
|
271 _EOT_
|
al@293
|
272 fi
|
al@293
|
273 cat << EOT
|
al@293
|
274 </tr>
|
al@293
|
275 EOT
|
al@293
|
276 }
|
al@293
|
277 package_entry_inline() {
|
al@293
|
278 if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
|
al@293
|
279 cat << _EOT_
|
al@293
|
280 <a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE) : $SHORT_DESC
|
al@293
|
281 _EOT_
|
al@293
|
282 else
|
al@293
|
283 PACKAGE_HREF="<u>$PACKAGE</u>"
|
al@293
|
284 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
|
al@293
|
285 nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
|
al@293
|
286 PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
|
al@293
|
287 busybox wget -s $PACKAGE_URL 2> /dev/null &&
|
al@293
|
288 PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
|
al@293
|
289 cat << _EOT_
|
al@293
|
290 $PACKAGE_HREF $(installed_size $PACKAGE) : $SHORT_DESC
|
al@293
|
291 _EOT_
|
al@293
|
292 fi
|
pankso@230
|
293 }
|
pankso@230
|
294
|
pankso@230
|
295 # Show loop in depends/build_depends chains
|
pankso@230
|
296 show_loops()
|
pankso@230
|
297 {
|
pankso@230
|
298 awk '
|
pankso@230
|
299 function chkloop(pkg, i, n)
|
pankso@230
|
300 {
|
pankso@230
|
301 if (n < 8)
|
pankso@230
|
302 for (i = 1; i <= split(deps[pkg],curdep," "); i++) {
|
pankso@230
|
303 if (curdep[i] == base || chkloop(curdep[i], 0, n+1)) {
|
pankso@230
|
304 split(deps[pkg],curdep," ")
|
pankso@230
|
305 p = curdep[i] " " p
|
pankso@230
|
306 return 1
|
pankso@230
|
307 }
|
pankso@230
|
308 }
|
pankso@230
|
309 return 0
|
pankso@230
|
310 }
|
pankso@230
|
311 {
|
pankso@230
|
312 for (i = 2; i <= NF; i++)
|
pankso@230
|
313 deps[$1] = deps[$1] " " $i
|
pankso@230
|
314 }
|
pankso@230
|
315 END {
|
pankso@230
|
316 for (pkg in deps) {
|
pankso@230
|
317 base = pkg
|
pankso@230
|
318 p = ""
|
pankso@230
|
319 if (chkloop(pkg, 0, 0))
|
pankso@230
|
320 print pkg " " p
|
pankso@230
|
321 #print pkg " : " p "..."
|
pankso@230
|
322 }
|
pankso@230
|
323 }' | while read line; do
|
pankso@230
|
324 set -- $line
|
pankso@230
|
325 case " $last " in
|
pankso@230
|
326 *\ $1\ *) continue
|
pankso@230
|
327 esac
|
pankso@230
|
328 last="$line"
|
pankso@230
|
329 pkg=$1
|
pankso@230
|
330 shift
|
al@284
|
331 echo "<strong>$pkg </strong>: $@ ..."
|
pankso@230
|
332 done
|
pankso@230
|
333 }
|
pankso@230
|
334
|
pankso@230
|
335 # recursive dependencies scan
|
pankso@230
|
336 dep_scan()
|
pankso@230
|
337 {
|
pankso@230
|
338 for i in $1; do
|
pankso@230
|
339 case " $ALL_DEPS " in
|
pankso@230
|
340 *\ $i\ *) continue;;
|
pankso@230
|
341 esac
|
pankso@230
|
342 ALL_DEPS="$ALL_DEPS $i"
|
pankso@230
|
343 if [ -n "$2" ]; then
|
pankso@230
|
344 echo -n "$2"
|
pankso@230
|
345 (
|
pankso@230
|
346 . $WOK/$i/receipt
|
al@293
|
347 package_entry_inline
|
pankso@230
|
348 )
|
pankso@230
|
349 fi
|
pankso@230
|
350 [ -f $WOK/$i/receipt ] || continue
|
pankso@230
|
351 DEPENDS=""
|
pankso@230
|
352 BUILD_DEPENDS=""
|
pankso@230
|
353 WANTED=""
|
pankso@230
|
354 . $WOK/$i/receipt
|
pankso@230
|
355 if [ -n "$3" ]; then
|
al@236
|
356 [ -n "$BUILD_DEPENDS$WANTED" ] &&
|
pankso@230
|
357 dep_scan "$WANTED $BUILD_DEPENDS" "$2 " $3
|
pankso@230
|
358 else
|
pankso@230
|
359 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
|
pankso@230
|
360 fi
|
pankso@230
|
361 done
|
pankso@230
|
362 }
|
pankso@230
|
363
|
pankso@230
|
364 # recursive reverse dependencies scan
|
pankso@230
|
365 rdep_scan()
|
pankso@230
|
366 {
|
pankso@230
|
367 SEARCH=$1
|
pankso@230
|
368 case "$SEARCH" in
|
al@261
|
369 glibc-base|gcc-lib-base)
|
al@261
|
370 $(gettext " glibc-base and gcc-lib-base are implicit dependencies,
|
al@261
|
371 <b>every</b> package is supposed to depend on them."); echo
|
pankso@230
|
372 return;;
|
pankso@230
|
373 esac
|
pankso@230
|
374 for i in $WOK/* ; do
|
pankso@230
|
375 DEPENDS=""
|
pankso@230
|
376 BUILD_DEPENDS=""
|
pankso@230
|
377 WANTED=""
|
pankso@230
|
378 . $i/receipt
|
pankso@230
|
379 if [ -n "$2" ]; then
|
pankso@230
|
380 echo "$(basename $i) $(echo $WANTED $BUILD_DEPENDS)"
|
pankso@230
|
381 else
|
pankso@230
|
382 echo "$(basename $i) $(echo $DEPENDS)"
|
pankso@230
|
383 fi
|
pankso@230
|
384 done | awk -v search=$SEARCH '
|
pankso@230
|
385 function show_deps(deps, all_deps, pkg, space)
|
pankso@230
|
386 {
|
pankso@230
|
387 if (all_deps[pkg] == 1) return
|
pankso@230
|
388 all_deps[pkg] = 1
|
pankso@230
|
389 if (space != "") printf "%s%s\n",space,pkg
|
pankso@230
|
390 for (i = 1; i <= split(deps[pkg], mydeps, " "); i++) {
|
pankso@230
|
391 show_deps(deps, all_deps, mydeps[i],"////" space)
|
pankso@230
|
392 }
|
pankso@230
|
393 }
|
pankso@230
|
394
|
pankso@230
|
395 {
|
pankso@230
|
396 all_deps[$1] = 0
|
pankso@230
|
397 for (i = 2; i <= NF; i++)
|
pankso@230
|
398 deps[$i] = deps[$i] " " $1
|
pankso@230
|
399 }
|
pankso@230
|
400
|
pankso@230
|
401 END {
|
pankso@230
|
402 show_deps(deps, all_deps, search, "")
|
pankso@230
|
403 }
|
pankso@230
|
404 ' | while read pkg; do
|
pankso@230
|
405 . $WOK/${pkg##*/}/receipt
|
pankso@230
|
406 cat << _EOT_
|
al@293
|
407 $(echo ${pkg%/*} | sed 's|/| |g') $(package_entry_inline)
|
pankso@230
|
408 _EOT_
|
pankso@230
|
409 done
|
pankso@230
|
410 }
|
pankso@230
|
411
|
pankso@230
|
412 # Check package exists
|
pankso@230
|
413 package_exist()
|
pankso@230
|
414 {
|
pankso@230
|
415 [ -f $WOK/$1/receipt ] && return 0
|
pankso@230
|
416 cat << _EOT_
|
pankso@230
|
417
|
al@261
|
418 <h3>$(eval_gettext "No package \$SEARCH")</h3>
|
pankso@230
|
419 _EOT_
|
pankso@230
|
420 return 1
|
pankso@230
|
421 }
|
pankso@230
|
422
|
pankso@230
|
423 # Display < > &
|
al@293
|
424 htmlize() {
|
pankso@230
|
425 sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g'
|
pankso@230
|
426 }
|
pankso@230
|
427
|
al@293
|
428 display_packages_and_files() {
|
pankso@230
|
429 last=""
|
pankso@230
|
430 while read pkg file; do
|
pankso@230
|
431 pkg=${pkg%:}
|
pankso@230
|
432 if [ "$pkg" != "$last" ]; then
|
pankso@230
|
433 . $WOK/$pkg/receipt
|
al@236
|
434
|
al@293
|
435 package_entry_inline
|
pankso@230
|
436 last=$pkg
|
pankso@230
|
437 fi
|
pankso@230
|
438 echo " $file"
|
pankso@230
|
439 done
|
pankso@230
|
440 }
|
pankso@230
|
441
|
al@293
|
442 # Syntax highlighting for receipt file - stolen from tazpanel:
|
al@293
|
443 # '/var/www/tazpanel/lib/libtazpanel' and developed
|
al@293
|
444 syntax_highlighter() {
|
al@293
|
445 cat "$1" | sed -e "s|\&|\&|g; s|<|\<|g; s|>|\>|g; s| | |g" \
|
al@293
|
446 -e "s|@|\@|g; s|~|\~|g" \
|
al@293
|
447 -e "#literals" \
|
al@293
|
448 -e "s|'\([^']*\)'|@l\0~|g" \
|
al@293
|
449 -e 's|"\([^"]*\)"|@l\0~|g' \
|
al@293
|
450 -e 's|"\([^"]*\)\\|@l\0~|g' \
|
al@293
|
451 -e 's|\([^"]*\)\"$|@l\0~|g' \
|
al@293
|
452 -e "#paths" \
|
al@293
|
453 -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+\)\([ )]\)|\1@p\2~\3|g' \
|
al@293
|
454 -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+$\)|\1@p\2~|g' \
|
al@293
|
455 -e 's|\(\$[a-zA-Z0-9_\.-]\+\)\(/[\$a-zA-Z0-9_/\.\*-]\+\)\([ )]*\)|@p\1\2~\3|g' \
|
al@293
|
456 -e "#functions" \
|
al@293
|
457 -e 's|^\([^()]*\)\(()\)|@f\0~|g' \
|
al@293
|
458 -e "#single line comments" \
|
al@293
|
459 -e 's|^\([ ]*\)#\([^#]*$\)|@c\0~|g' \
|
al@293
|
460 -e "#parameters" \
|
al@293
|
461 -e 's|\( \)\(-[a-z0-9]\+\)\( *\)|\1@r\2~\3|g' \
|
al@293
|
462 -e 's|\( \)\(--[a-z0-9\-]\+\)\([= ]\)|\1@r\2~\3|g' \
|
al@293
|
463 -e "#variables" \
|
al@293
|
464 -e "s|^\([^=@#' \-]*\)\(=\)|@v\1~\2|g" \
|
al@293
|
465 -e 's|\([ ^@-]*\)\([a-zA-Z0-9]\+\)\(=\)|\1@v\2~\3|g' \
|
al@293
|
466 -e "s#\(\$[a-zA-Z0-9_]\+\)#@v\0~#g" \
|
al@293
|
467 -e "#urls" \
|
al@293
|
468 -e s"#\"\(http:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
|
al@293
|
469 -e s"#\"\(ftp:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
|
al@293
|
470 -e "#commands" \
|
al@293
|
471 -e s"#^\( \+\)\([^'= @\-]\+\)#\1@m\2~#"g \
|
al@293
|
472 -e "#simple commands" \
|
al@293
|
473 -e s"#\([{}\]$\)#@s\0~#"g \
|
al@293
|
474 -e s"#\( \)\(\&\&\)\( *\)#\1@s\2~\3#"g \
|
al@293
|
475 -e s"#\(|\)#@s\0~#"g \
|
al@293
|
476 -e s"#\(\<\)#@s\0~#"g \
|
al@293
|
477 -e s"#\(\>\&\)#@s\0~#"g \
|
al@293
|
478 -e s"#\(\>\)#@s\0~#"g \
|
al@293
|
479 -e s"#\(\[\)#@s\0~#"g \
|
al@293
|
480 -e s"#\(\]\)#@s\0~#"g \
|
al@293
|
481 \
|
al@293
|
482 -e "s|´|'|g; s|›|</span>|g" \
|
al@293
|
483 -e "s|@c|<span class='r-comment'>|g" \
|
al@293
|
484 -e "s|@l|<span class='r-literal'>|g" \
|
al@293
|
485 -e "s|@v|<span class='r-var'>|g" \
|
al@293
|
486 -e "s|@f|<span class='r-func'>|g" \
|
al@293
|
487 -e "s|@u|class='r-url' target='_blank'|g" \
|
al@293
|
488 -e "s|@m|<span class='r-com'>|g" \
|
al@293
|
489 -e "s|@s|<span class='r-scom'>|g" \
|
al@293
|
490 -e "s|@p|<span class='r-path'>|g" \
|
al@293
|
491 -e "s|@r|<span class='r-param'>|g" \
|
al@293
|
492 -e "s|~|</span>|g"
|
al@293
|
493 }
|
al@293
|
494
|
al@293
|
495
|
al@293
|
496 #
|
al@293
|
497 # page begins
|
al@293
|
498 #
|
al@293
|
499 header "HTTP/1.1 200 OK" "Content-type: text/html"
|
al@284
|
500 xhtml_header
|
al@284
|
501
|
pankso@266
|
502 #
|
al@293
|
503 # language selector, if needed
|
al@293
|
504 #
|
al@293
|
505 if [ -z "$HTTP_ACCEPT_LANGUAGE" ]; then
|
al@293
|
506 oldlang=$(GETPOST lang)
|
al@293
|
507 if [ -z "$oldlang" ]; then
|
al@293
|
508 oldlang="C"
|
al@293
|
509 [ -z "$QUERY_STRING" ] && QUERY_STRING="lang=C" || QUERY_STRING="${QUERY_STRING}&lang=C"
|
al@293
|
510 fi
|
al@293
|
511 cat << EOT
|
al@293
|
512 <!-- Languages -->
|
al@293
|
513 <div id="lang">
|
al@293
|
514 EOT
|
al@293
|
515 for i in en de fr pt ru zh; do
|
al@293
|
516 cat << EOT
|
al@293
|
517 <a href="$SCRIPT_NAME?$(echo "$QUERY_STRING" | sed s/"lang=$oldlang"/"lang=$i"/)">$(
|
al@293
|
518 case $i in
|
al@293
|
519 en) echo -n "English";;
|
al@293
|
520 de) echo -n "Deutsch";;
|
al@293
|
521 fr) echo -n "Français";;
|
al@293
|
522 pt) echo -n "Português";;
|
al@293
|
523 ru) echo -n "Русский";;
|
al@293
|
524 zh) echo -n "中文";;
|
al@293
|
525 esac)</a>
|
al@293
|
526 EOT
|
al@293
|
527 done
|
al@293
|
528 cat << EOT
|
al@293
|
529 </div>
|
al@293
|
530
|
al@293
|
531 EOT
|
al@293
|
532 fi
|
al@293
|
533
|
al@293
|
534 cat << EOT
|
al@293
|
535 <!-- Content -->
|
al@293
|
536 <div id="content">
|
al@293
|
537 EOT
|
al@293
|
538
|
al@293
|
539 #
|
pankso@266
|
540 # Handle GET requests
|
pankso@266
|
541 #
|
pankso@266
|
542 case " $(GET) " in
|
al@284
|
543 *\ debug\ *|*\ debug*)
|
al@284
|
544 cat << EOT
|
al@284
|
545 <h2>Debug info</h2>
|
al@284
|
546 <pre>$(httpinfo)</pre>
|
al@284
|
547 <pre>LANG=$LANG;
|
al@284
|
548 OBJECT=$OBJECT;
|
al@284
|
549 SEARCH=$SEARCH;
|
al@284
|
550 SLITAZ_VERSION=$SLITAZ_VERSION;
|
al@284
|
551 WOK=$WOK;
|
al@293
|
552 GET=$(GET);
|
al@284
|
553 </pre>
|
al@284
|
554 EOT
|
al@284
|
555 #$(xhtml_footer)
|
al@284
|
556 #EOT
|
al@284
|
557 # exit 0
|
al@284
|
558 ;;
|
pankso@266
|
559 esac
|
pankso@266
|
560
|
pankso@230
|
561 # Display search form and result if requested.
|
al@284
|
562 #xhtml_header
|
al@293
|
563 cat << EOT
|
al@293
|
564 <h2>$(gettext 'Search for packages')</h2>
|
al@293
|
565 <div id="ticker"><img src="style/images/loader.gif" alt="." /></div>
|
al@293
|
566 EOT
|
al@284
|
567 search_form
|
al@284
|
568
|
al@293
|
569
|
al@293
|
570
|
al@284
|
571 case "$OBJECT" in
|
al@284
|
572
|
al@284
|
573
|
al@284
|
574 ### Depends loops; [Reverse] Dependency tree [(SUGGESTED)]
|
al@284
|
575 Depends)
|
al@284
|
576 if [ -z "$SEARCH" ]; then
|
al@284
|
577 cat << _EOT_
|
pankso@230
|
578
|
al@261
|
579 <h3>$(gettext "Depends loops")</h3>
|
pankso@235
|
580 <pre>
|
pankso@230
|
581 _EOT_
|
al@284
|
582 for i in $WOK/*/receipt; do
|
al@284
|
583 PACKAGE=
|
al@284
|
584 DEPENDS=
|
al@284
|
585 . $i
|
al@284
|
586 echo "$PACKAGE $(echo $DEPENDS)"
|
al@284
|
587 done | show_loops
|
al@284
|
588 cat << _EOT_
|
pankso@230
|
589 </pre>
|
pankso@230
|
590 _EOT_
|
al@284
|
591 elif package_exist $SEARCH ; then
|
al@284
|
592 cat << _EOT_
|
pankso@230
|
593
|
al@261
|
594 <h3>$(eval_gettext "Dependency tree for: \$SEARCH")</h3>
|
pankso@235
|
595 <pre>
|
pankso@230
|
596 _EOT_
|
al@284
|
597 ALL_DEPS=""
|
al@284
|
598 dep_scan $SEARCH ""
|
al@284
|
599 SUGGESTED=""
|
al@284
|
600 . $WOK/$SEARCH/receipt
|
al@284
|
601 if [ -n "$SUGGESTED" ]; then
|
al@284
|
602 cat << _EOT_
|
pankso@230
|
603 </pre>
|
pankso@230
|
604
|
al@261
|
605 <h3>$(eval_gettext "Dependency tree for: \$SEARCH (SUGGESTED)")</h3>
|
pankso@235
|
606 <pre>
|
pankso@230
|
607 _EOT_
|
al@284
|
608 ALL_DEPS=""
|
al@284
|
609 dep_scan "$SUGGESTED" " "
|
al@284
|
610 fi
|
al@284
|
611 cat << _EOT_
|
pankso@230
|
612 </pre>
|
pankso@230
|
613
|
al@261
|
614 <h3>$(eval_gettext "Reverse dependency tree for: \$SEARCH")</h3>
|
pankso@235
|
615 <pre>
|
pankso@230
|
616 _EOT_
|
al@284
|
617 ALL_DEPS=""
|
al@284
|
618 rdep_scan $SEARCH
|
al@284
|
619 cat << _EOT_
|
pankso@230
|
620 </pre>
|
pankso@230
|
621 _EOT_
|
al@284
|
622 fi
|
al@284
|
623 ;;
|
al@284
|
624
|
al@284
|
625
|
al@284
|
626 ### Build depends loops; [Reverse] Build dependency tree
|
al@284
|
627 BuildDepends)
|
al@284
|
628 if [ -z "$SEARCH" ]; then
|
al@284
|
629 cat << _EOT_
|
pankso@230
|
630
|
al@261
|
631 <h3>$(gettext "Build depends loops")</h3>
|
pankso@235
|
632 <pre>
|
pankso@230
|
633 _EOT_
|
al@284
|
634 for i in $WOK/*/receipt; do
|
al@284
|
635 PACKAGE=
|
al@284
|
636 WANTED=
|
al@284
|
637 BUILD_DEPENDS=
|
al@284
|
638 . $i
|
al@284
|
639 echo "$PACKAGE $WANTED $(echo $BUILD_DEPENDS)"
|
al@284
|
640 done | show_loops
|
al@284
|
641 cat << _EOT_
|
pankso@230
|
642 </pre>
|
pankso@230
|
643 _EOT_
|
al@284
|
644 elif package_exist $SEARCH ; then
|
al@284
|
645 cat << _EOT_
|
pankso@230
|
646
|
al@261
|
647 <h3>$(eval_gettext "\$SEARCH needs these packages to be built")</h3>
|
pankso@235
|
648 <pre>
|
pankso@230
|
649 _EOT_
|
al@284
|
650 ALL_DEPS=""
|
al@284
|
651 dep_scan $SEARCH "" build
|
al@284
|
652 cat << _EOT_
|
pankso@230
|
653 </pre>
|
pankso@230
|
654
|
al@261
|
655 <h3>$(eval_gettext "Packages who need \$SEARCH to be built")</h3>
|
pankso@235
|
656 <pre>
|
pankso@230
|
657 _EOT_
|
al@284
|
658 ALL_DEPS=""
|
al@284
|
659 rdep_scan $SEARCH build
|
al@284
|
660 cat << _EOT_
|
pankso@230
|
661 </pre>
|
pankso@230
|
662 _EOT_
|
al@284
|
663 fi
|
al@284
|
664 ;;
|
al@284
|
665
|
al@284
|
666
|
al@284
|
667 ### Common files
|
al@284
|
668 FileOverlap)
|
al@284
|
669 if [ package_exist $SEARCH ]; then
|
al@284
|
670 cat << _EOT_
|
pankso@230
|
671
|
al@261
|
672 <h3>$(eval_gettext "These packages may overload files of \$SEARCH")</h3>
|
pankso@235
|
673 <pre>
|
pankso@230
|
674 _EOT_
|
al@284
|
675 ( unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: ;
|
al@284
|
676 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep -v ^$SEARCH: ) | awk '
|
pankso@230
|
677 BEGIN { pkg=""; last="x" }
|
pankso@230
|
678 {
|
pankso@230
|
679 if ($2 == "") next
|
pankso@230
|
680 if (index($2,last) == 1 && substr($2,1+length(last),1) == "/")
|
pankso@230
|
681 delete file[last]
|
pankso@230
|
682 last=$2
|
pankso@230
|
683 if (pkg == "") pkg=$1
|
pankso@230
|
684 if ($1 == pkg) file[$2]=$1
|
pankso@230
|
685 else if (file[$2] == pkg) print
|
pankso@230
|
686 }
|
pankso@230
|
687 ' | display_packages_and_files
|
pankso@230
|
688 cat << _EOT_
|
pankso@230
|
689 </pre>
|
pankso@230
|
690 _EOT_
|
al@284
|
691 fi
|
al@284
|
692 ;;
|
al@284
|
693
|
al@284
|
694
|
al@284
|
695 ### File search
|
al@284
|
696 File)
|
al@284
|
697 if [ -n "$SEARCH" ]; then
|
pankso@230
|
698 cat << _EOT_
|
pankso@230
|
699
|
al@261
|
700 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
al@293
|
701 <table>
|
pankso@230
|
702 _EOT_
|
pankso@230
|
703 last=""
|
pankso@230
|
704 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
|
pankso@230
|
705 | grep "$SEARCH" | while read pkg file; do
|
pankso@230
|
706 echo "$file" | grep -q "$SEARCH" || continue
|
pankso@230
|
707 if [ "$last" != "${pkg%:}" ]; then
|
pankso@230
|
708 last=${pkg%:}
|
pankso@230
|
709 (
|
pankso@230
|
710 . $WOK/$last/receipt
|
al@293
|
711 [ -n "$last" ] && cat << EOT
|
al@293
|
712 </td></tr>
|
al@293
|
713 EOT
|
pankso@230
|
714 cat << _EOT_
|
pankso@230
|
715
|
al@293
|
716 $(package_entry 1)
|
al@293
|
717 <tr><td colspan="3" class="pre">
|
pankso@230
|
718 _EOT_
|
pankso@230
|
719 )
|
pankso@230
|
720 fi
|
al@293
|
721 echo -n "$file" | sed s/"$SEARCH"/"<span class='match'>$SEARCH<\/span>"/g
|
al@293
|
722 echo "<br />"
|
pankso@230
|
723 done
|
al@284
|
724 cat << _EOT_
|
al@293
|
725 </td></tr>
|
al@293
|
726 </table>
|
al@284
|
727 _EOT_
|
al@284
|
728 fi
|
al@284
|
729 ;;
|
al@284
|
730
|
al@284
|
731
|
al@284
|
732 ### List of files
|
al@284
|
733 File_list)
|
al@284
|
734 if package_exist $SEARCH; then
|
al@284
|
735 cat << _EOT_
|
pankso@230
|
736
|
al@261
|
737 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@235
|
738 <pre>
|
pankso@230
|
739 _EOT_
|
al@284
|
740 last=""
|
al@284
|
741 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
|
al@293
|
742 | grep ^$SEARCH: | sed 's/.*: / /' | sort
|
al@284
|
743 cat << _EOT_
|
pankso@230
|
744 </pre>
|
pankso@235
|
745 <pre>
|
al@284
|
746 _EOT_
|
al@284
|
747 filenb=$(unlzma -c $PACKAGES_REPOSITORY/files.list.lzma | grep ^$SEARCH: | wc -l)
|
al@284
|
748 eval_ngettext "\$filenb file" "\$filenb files" $filenb
|
al@284
|
749 cat << _EOT_
|
al@284
|
750 \
|
pankso@230
|
751 $(busybox sed -n "/^$SEARCH$/{nnnpq}" $PACKAGES_REPOSITORY/packages.txt)
|
al@284
|
752 </pre>
|
pankso@230
|
753 _EOT_
|
al@284
|
754 fi
|
al@284
|
755 ;;
|
al@284
|
756
|
al@284
|
757
|
al@284
|
758 ### Package description
|
al@284
|
759 Desc)
|
al@284
|
760 if [ -f $WOK/$SEARCH/description.txt ]; then
|
al@284
|
761 cat << _EOT_
|
pankso@230
|
762
|
al@293
|
763 <h3>$(eval_gettext "Description of package: \$SEARCH")</h3>
|
al@293
|
764 <table>
|
pankso@230
|
765 $(htmlize < $WOK/$SEARCH/description.txt)
|
al@293
|
766 </table>
|
pankso@230
|
767 _EOT_
|
al@284
|
768 else
|
pankso@230
|
769 cat << _EOT_
|
pankso@230
|
770
|
al@261
|
771 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
al@293
|
772 <table>
|
pankso@230
|
773 _EOT_
|
pankso@230
|
774 last=""
|
al@284
|
775 grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
|
al@284
|
776 sort | while read pkg extras ; do
|
al@284
|
777 . $WOK/$pkg/receipt
|
al@284
|
778 package_entry
|
al@284
|
779 done
|
al@284
|
780 cat << _EOT_
|
al@293
|
781 </table>
|
al@284
|
782 _EOT_
|
al@284
|
783 fi
|
al@284
|
784 ;;
|
al@284
|
785
|
al@284
|
786
|
al@284
|
787 ### Tags
|
al@284
|
788 Tags)
|
al@284
|
789 cat << _EOT_
|
al@284
|
790
|
al@284
|
791 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
al@293
|
792 <table>
|
al@284
|
793 _EOT_
|
al@284
|
794 last=""
|
al@293
|
795 grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
|
al@284
|
796 sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
|
al@284
|
797 . $WOK/$pkg/receipt
|
al@284
|
798 package_entry
|
al@284
|
799 done
|
al@284
|
800 cat << _EOT_
|
al@293
|
801 </table>
|
al@284
|
802 _EOT_
|
al@284
|
803 ;;
|
al@284
|
804
|
al@284
|
805
|
al@293
|
806 ### Package receipt with syntax highlighter
|
al@284
|
807 Receipt)
|
al@293
|
808 if package_exist "$SEARCH"; then
|
al@293
|
809 cat << _EOT_
|
pankso@230
|
810
|
al@261
|
811 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
pankso@230
|
812 <pre>
|
pankso@230
|
813 _EOT_
|
al@293
|
814 if [ -f "$WOK/$SEARCH/taz/*/receipt" ]; then
|
al@293
|
815 syntax_highlighter "$WOK/$SEARCH/taz/*/receipt"
|
al@293
|
816 else
|
al@293
|
817 syntax_highlighter "$WOK/$SEARCH/receipt"
|
al@293
|
818 fi
|
al@293
|
819 echo '</pre>'
|
al@293
|
820 fi
|
al@284
|
821 ;;
|
al@284
|
822
|
al@284
|
823
|
al@284
|
824 ### Package
|
al@284
|
825 Package)
|
al@284
|
826 if package_exist $SEARCH; then
|
pankso@230
|
827 cat << _EOT_
|
pankso@230
|
828
|
al@261
|
829 <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
|
al@293
|
830 <table>
|
pankso@230
|
831 _EOT_
|
pankso@230
|
832 for pkg in `ls $WOK/ | grep "$SEARCH"`
|
pankso@230
|
833 do
|
pankso@230
|
834 . $WOK/$pkg/receipt
|
al@293
|
835 DESC=" <a href=\"?object=Desc&query=$pkg&lang=$lang&version=$SLITAZ_VERSION$(ifdebug '&')&submit=go\">$(gettext description)</a>"
|
pankso@230
|
836 [ -f $WOK/$pkg/description.txt ] || DESC=""
|
pankso@230
|
837 cat << _EOT_
|
pankso@230
|
838 $(package_entry)$DESC
|
pankso@230
|
839 _EOT_
|
pankso@230
|
840 done
|
pankso@230
|
841 equiv=$PACKAGES_REPOSITORY/packages.equiv
|
pankso@230
|
842 vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
|
pankso@230
|
843 for vpkg in $vpkgs ; do
|
al@284
|
844 cat << _EOT_
|
al@293
|
845 </table>
|
pankso@230
|
846
|
al@261
|
847 <h3>$(eval_gettext "Result for: \$SEARCH (package providing \$vpkg)")</h3>
|
al@293
|
848 <table>
|
pankso@230
|
849 _EOT_
|
pankso@230
|
850 for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
|
pankso@230
|
851 . $WOK/${pkg#*:}/receipt
|
pankso@230
|
852 package_entry
|
pankso@230
|
853 done
|
pankso@230
|
854 done
|
al@284
|
855 cat << _EOT_
|
al@293
|
856 </table>
|
pankso@230
|
857 _EOT_
|
al@284
|
858 fi
|
al@284
|
859 ;;
|
al@284
|
860 esac
|
al@284
|
861
|
al@284
|
862 xhtml_footer
|
pankso@230
|
863
|
pankso@230
|
864 exit 0
|