tazpkg rev 824
Add module "mkdb"; pkgs.cgi: fix AJAX loader display
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Tue Aug 04 02:29:51 2015 +0300 (2015-08-04) |
parents | 6d8c84911558 |
children | f7c8cfc02b2c |
files | Makefile modules/mkdb tazpanel/pkgs.cgi tazpkg |
line diff
1.1 --- a/Makefile Sat Jul 25 22:54:10 2015 +0200 1.2 +++ b/Makefile Tue Aug 04 02:29:51 2015 +0300 1.3 @@ -30,7 +30,7 @@ 1.4 --package-name=TazPkg \ 1.5 --package-version="$(VERSION)" -kaction -ktitle -k_ -k_n -k_p:1,2 \ 1.6 ./tazpkg \ 1.7 - ./modules/convert ./modules/find-depends ./modules/help \ 1.8 + ./modules/convert ./modules/find-depends ./modules/help ./modules/mkdb \ 1.9 ./tazpkg-box ./tazpkg-notify ./tazpanel/pkgs.cgi 1.10 1.11 msgmerge: 1.12 @@ -113,9 +113,7 @@ 1.13 1.14 uninstall: 1.15 rm -f $(DESTDIR)$(bindir)/tazpkg 1.16 - rm -f $(DESTDIR)$(libexecdir)/tazpkg/convert 1.17 - rm -f $(DESTDIR)$(libexecdir)/tazpkg/find-depends 1.18 - rm -f $(DESTDIR)$(libexecdir)/tazpkg/help 1.19 + rm -rf $(DESTDIR)$(libexecdir)/tazpkg 1.20 1.21 rm -f $(DESTDIR)$(bindir)/tazpkg-notify 1.22 rm -f $(DESTDIR)$(bindir)/tazpkg-box
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/modules/mkdb Tue Aug 04 02:29:51 2015 +0300 2.3 @@ -0,0 +1,222 @@ 2.4 +#!/bin/sh 2.5 +# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg 2.6 +# mkdb - TazPkg module 2.7 +# Make TazPkg database for folder with *.tazpkg packages 2.8 + 2.9 + 2.10 +# Input: $1 - path to folder contains *.tazpkg packages 2.11 +# Output files in the $1 folder: 2.12 +# packages.info 2.13 +# packages.equiv 2.14 +# descriptions.txt 2.15 +# files.list.lzma 2.16 +# IDs 2.17 +# Do nothing if database already exists; force rebuild it with --forced option. 2.18 + 2.19 +# DB format: 2.20 +# ========== 2.21 + 2.22 +# packages.info 2.23 +# ------------- 2.24 +# Record is line; fields are tab-separated. Fields description: 2.25 +# 1: package name 2.26 +# 2: version with extra-version 2.27 +# 3: category 2.28 +# 4: short description 2.29 +# 5: upstream web site 2.30 +# 6: tags (space-separated) 2.31 +# 7: packed and unpacked sizes (space-separated) in human readable format 2.32 +# 8: depends 2.33 +# 9: checksum 2.34 + 2.35 +# packages.equiv 2.36 +# -------------- 2.37 +# This DB file used before package installation 2.38 +# Record is line. Separator is "=" 2.39 +# Field 1 is package name to install (pkg1) 2.40 +# Field 2 is space-separated list of items in the special format: 2.41 +# a) pkg2:pkg3 2.42 +# If pkg2 is installed, then install pkg3 instead of pkg1. Example: 2.43 +# busybox=pam:busybox-pam 2.44 +# If 'pam' is installed, then install 'busybox-pam' instead of 'busybox' 2.45 +# b) pkg2 2.46 +# If pkg2 already installed, then pkg1 will not be installed. Example: 2.47 +# mysql=mariadb 2.48 +# If 'mariadb' already installed, then 'mysql' will not be installed 2.49 +# Complex rule example: 2.50 +# ssh=pam:openssh-pam openssh pam:dropbear-pam dropbear 2.51 + 2.52 +# descriptions.txt 2.53 +# ---------------- 2.54 +# Field is line; record separator is empty line. 2.55 +# First field is package name, rest - description itself. 2.56 +# Empty lines in the description appended with space (" ") to avoid mess 2.57 +# with end of record. 2.58 + 2.59 +# files.list.lzma 2.60 +# --------------- 2.61 +# It is "files.list" compressed using lzma due to it's big size. 2.62 +# Format of the files.list: record is line; field separator is ": ". 2.63 +# First field is package name, second field is file path. 2.64 +# There are DB records for all files installed with the package. 2.65 + 2.66 + 2.67 +# Preparations 2.68 +# Get config values (CHECKSUM) 2.69 +. /etc/slitaz/slitaz.conf 2.70 +# Connect functions library 2.71 +. /lib/libtaz.sh 2.72 + 2.73 + 2.74 +# Report error and finish work 2.75 +die() { longline "$(_ "$@")" >&2; exit 1; } 2.76 + 2.77 + 2.78 +# Exit if input folder not specified 2.79 +[ -z "$1" ] && die 'Input folder not specified' 2.80 + 2.81 +# Exit if input folder not exists 2.82 +folder="$(realpath "$1")" || exit 1 2.83 + 2.84 +# Exit if folder is not writable 2.85 +[ ! -w "$folder" ] && die 'You are not allowed to write to the folder "%s"' "$folder" 2.86 + 2.87 +# Exit if input folder does not contain packages 2.88 +[ -z "$(find "$folder" -maxdepth 1 -name '*.tazpkg')" ] && \ 2.89 + die 'Folder "%s" does not contain packages' "$folder" 2.90 + 2.91 + 2.92 +# DB file names 2.93 +DBi="$folder/packages.info" 2.94 +DBe="$folder/packages.equiv" 2.95 +DBd="$folder/descriptions.txt" 2.96 +DBf="$folder/files.list" 2.97 + 2.98 +# Pre-remove DB if --forced and DB exists 2.99 +if [ -n "$forced" ]; then 2.100 + [ -e "$DBi" ] && rm "$DBi" 2.101 + [ -e "$DBe" ] && rm "$DBe" 2.102 + [ -e "$DBd" ] && rm "$DBd" 2.103 + [ -e "$DBf.lzma" ] && rm "$DBf.lzma" 2.104 +fi 2.105 + 2.106 +if [ -s "$DBi" ]; then 2.107 + _ 'Packages DB already exists.' >&2 2.108 + exit 1 2.109 +fi 2.110 + 2.111 +# Random temporary folder 2.112 +tempd="$(mktemp -d)" 2.113 + 2.114 +# Make temporary list of packages checksum (usually md5sum) 2.115 +_n 'Calculate %s...' "$CHECKSUM" 2.116 +cd "$folder"; $CHECKSUM *.tazpkg > "$tempd/$SUM" 2.117 +status 2.118 + 2.119 +cd "$tempd" 2.120 + 2.121 +# Loop for every package 2.122 +while read pkgsum pkgfile; do 2.123 + # Current processed package 2.124 + echo -n "$pkgfile" 2.125 + 2.126 + # Extract receipt from package 2.127 + cpio -F "$folder/$pkgfile" -i receipt >/dev/null 2>&1 2.128 + 2.129 + # Unset variables that may absent in the receipt 2.130 + unset EXTRAVERSION TAGS DEPENDS PROVIDE 2.131 + # Get values 2.132 + . receipt; rm receipt 2.133 + 2.134 + 2.135 + # Make packages.info 2.136 + echo -en "$PACKAGE\t$VERSION$EXTRAVERSION\t$CATEGORY\t" >> "$DBi" 2.137 + echo -en "$SHORT_DESC\t$WEB_SITE\t$TAGS\t" >> "$DBi" 2.138 + echo -en "$PACKED_SIZE $UNPACKED_SIZE\t" | sed 's|\.0||g' >> "$DBi" 2.139 + echo -n $DEPENDS$'\t' >> "$DBi" 2.140 + echo $pkgsum >> "$DBi" 2.141 + 2.142 + 2.143 + # Make packages.equiv 2.144 + for i in $PROVIDE; do 2.145 + # Example from busybox-pam package: 2.146 + # PACKAGE="busybox-pam", PROVIDE="busybox:pam" 2.147 + case $i in 2.148 + # DEST="pam:" 2.149 + *:*) DEST="${i#*:}:";; 2.150 + *) DEST='';; 2.151 + esac 2.152 + # PKG="busybox" 2.153 + PKG="${i%:*}" 2.154 + if grep -qs ^$PKG= "$DBe"; then 2.155 + # Append existing record 2.156 + sed -i "s|^$PKG=|\0 $DEST$PACKAGE|" "$DBe" 2.157 + else 2.158 + # Add new record 2.159 + echo "$PKG=$DEST$PACKAGE" >> "$DBe" 2.160 + fi 2.161 + done 2.162 + 2.163 + 2.164 + # Make descriptions.txt 2.165 + if cpio -F "$folder/$pkgfile" -t 2>/dev/null | fgrep -q 'description.txt'; then 2.166 + # Extract description.txt from package 2.167 + cpio -F "$folder/$pkgfile" -i description.txt >/dev/null 2>&1 2.168 + # Append descriptions DB 2.169 + echo "$PACKAGE" >> "$DBd" 2.170 + cat description.txt | sed 's|^$| |' >> "$DBd" 2.171 + echo >> "$DBd" 2.172 + rm description.txt 2.173 + fi 2.174 + 2.175 + 2.176 + # Make files.list 2.177 + if cpio -F "$folder/$pkgfile" -t 2>/dev/null | fgrep -q 'files.list'; then 2.178 + # Extract files.list from package 2.179 + cpio -F "$folder/$pkgfile" -i files.list >/dev/null 2>&1 2.180 + # Append files list DB 2.181 + sed "s|.*|$PACKAGE: \0|" files.list >> "$DBf" 2.182 + rm files.list 2.183 + fi 2.184 + 2.185 + # End line with the status 2.186 + status 2.187 +done < "$tempd/$SUM" 2.188 + 2.189 + 2.190 +# Sort DB alphabetically 2.191 +sort -o "$tempd/pi" "$DBi"; mv -f "$tempd/pi" "$DBi" 2.192 + 2.193 +# Create empty files if they not exists 2.194 +touch "$DBi" "$DBe" "$DBd" "$DBf" 2.195 + 2.196 +# Compress files.list using lzma 2.197 +sort -k2 -o "$DBf.sorted" "$DBf" 2.198 +lzma e "$DBf.sorted" "$DBf.lzma" 2.199 +rm "$DBf" "$DBf.sorted" 2.200 + 2.201 +# Make DB readable for all 2.202 +chmod a+r "$DBi" "$DBe" "$DBd" "$DBf.lzma" 2.203 + 2.204 + 2.205 +# Make files for DB recharge 2.206 +# -------------------------- 2.207 + 2.208 +cd "$folder" 2.209 + 2.210 +# Make IDs: md5 and timestamp 2.211 +( md5sum "$tempd/$SUM" | cut -d' ' -f1 | tr '\n' ' '; date -ur "$DBi" +%s ) > IDs 2.212 + 2.213 + 2.214 +# Make files-list.md5: decide whether to download files.list.lzma or not 2.215 +md5sum "$DBf.lzma" | cut -d' ' -f1 | tr -d $'\n' > files-list.md5 2.216 + 2.217 +# Make bundle to fast recharge 2.218 +[ -f 'bundle.tar.lzma' ] && rm 'bundle.tar.lzma' 2.219 +busybox tar -chaf bundle.tar.lzma \ 2.220 + files-list.md5 packages.info descriptions.txt packages.equiv 2.221 + 2.222 +# Clean up 2.223 +rm files-list.md5 2.224 +rm -r "$tempd" 2.225 +
3.1 --- a/tazpanel/pkgs.cgi Sat Jul 25 22:54:10 2015 +0200 3.2 +++ b/tazpanel/pkgs.cgi Tue Aug 04 02:29:51 2015 +0300 3.3 @@ -947,25 +947,12 @@ 3.4 <a data-icon="slitaz" href="?improve=$pkg">$(_ 'Improve package')</a> 3.5 </footer> 3.6 </section> 3.7 -<span id="ajaxStatus" style="display:none"></span> 3.8 3.9 -<script type="text/javascript"> 3.10 - var links = document.getElementById('infoTable').getElementsByTagName('a'); 3.11 - for (var i = 0; i < links.length; i++) { 3.12 - console.log('i=%s, icon=%s.', i, links[i].dataset.icon); 3.13 - if (links[i].dataset.icon == 'clock') { 3.14 - links[i].parentNode.id = 'link' + i; 3.15 - pkg = links[i].innerText.replace(/\+/g, '%2B'); 3.16 - ajax('pkgs.cgi?status&pkg=' + pkg, '1', 'link' + i); 3.17 - } 3.18 - } 3.19 - 3.20 -</script> 3.21 EOT 3.22 3.23 # Show description 3.24 DESC="$(tazpkg desc $pkg)" 3.25 - [ -n "$DESC" ] && echo "<section><pre class="pre-wrap">$DESC</pre></section>" 3.26 + [ -n "$DESC" ] && echo "<section><pre class=\"pre-wrap\">$DESC</pre></section>" 3.27 3.28 # Show configuration files list 3.29 CONFIGS="$(tazpkg list-config $pkg | sed 's|\(.*\)|\1 \1|')" 3.30 @@ -982,10 +969,24 @@ 3.31 <section> 3.32 <header>$(_ 'Installed files')</header> 3.33 <span id="fileList"> 3.34 - <div style="text-align: center;"><span id="ajaxStatus"></span>$(_ 'Please wait')</div> 3.35 + <div style="text-align: center;"><span data-icon="clock">$(_ 'Please wait')</span></div> 3.36 </span> 3.37 </section> 3.38 -<script type="text/javascript">ajax('pkgs.cgi?filelist&pkg=$pkg', '1', 'fileList');</script> 3.39 + 3.40 + 3.41 +<script type="text/javascript"> 3.42 + var links = document.getElementById('infoTable').getElementsByTagName('a'); 3.43 + for (var i = 0; i < links.length; i++) { 3.44 + console.log('i=%s, icon=%s.', i, links[i].dataset.icon); 3.45 + if (links[i].dataset.icon == 'clock') { 3.46 + links[i].parentNode.id = 'link' + i; 3.47 + pkg = links[i].innerText.replace(/\+/g, '%2B'); 3.48 + ajax('pkgs.cgi?status&pkg=' + pkg, '1', 'link' + i); 3.49 + } 3.50 + } 3.51 + 3.52 + ajax('pkgs.cgi?filelist&pkg=$pkg', '1', 'fileList'); 3.53 +</script> 3.54 EOT 3.55 ;; 3.56
4.1 --- a/tazpkg Sat Jul 25 22:54:10 2015 +0200 4.2 +++ b/tazpkg Tue Aug 04 02:29:51 2015 +0300 4.3 @@ -3050,8 +3050,7 @@ 4.4 convert|-c) 4.5 # convert misc package format to .tazpkg 4.6 check_for_package_file 4.7 - shift 4.8 - @@MODULES@@/convert $@ 4.9 + shift; @@MODULES@@/convert $@ 4.10 ;; 4.11 4.12 4.13 @@ -3119,6 +3118,11 @@ 4.14 shift; @@MODULES@@/help $@ ;; 4.15 4.16 4.17 + mkdb) 4.18 + # Make TazPkg database 4.19 + shift; @@MODULES@@/mkdb $@ ;; 4.20 + 4.21 + 4.22 '') 4.23 # Default to summary 4.24 title "$(_ 'SliTaz package manager - Version: %s' $(colorize 34 $VERSION))"