slitaz-pizza annotate web/pkgs.cgi @ rev 29
pkgs.cgi: fix $desv variable conflict
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Tue Mar 27 09:14:19 2012 +0200 (2012-03-27) |
parents | a9e881b64c15 |
children | ce872f64c4a7 |
rev | line source |
---|---|
pankso@7 | 1 #!/bin/sh |
pankso@7 | 2 # |
paul@9 | 3 # SliTaz Pizza CGI/web interface - Let's have a pizza :-) |
pankso@7 | 4 # Packages step |
pankso@7 | 5 # |
pankso@7 | 6 |
pankso@7 | 7 . lib/libpizza |
pankso@7 | 8 |
pankso@7 | 9 id="$(GET id)" |
pankso@7 | 10 flavor="$(GET flavor)" |
pankso@7 | 11 skel="$(GET skel)" |
pankso@7 | 12 desc="$(GET desc)" |
pankso@7 | 13 mail="$(GET mail)" |
pankso@7 | 14 log="$tmpdir/slitaz-$id/distro.log" |
pankso@29 | 15 # Flavor pkgs desc list format: pkgname version " short desc " |
pankso@22 | 16 allpkgs="$SLITAZ/$SLITAZ_VERSION/packages/packages.desc" |
pankso@27 | 17 list="$tmpdir/slitaz-$id/packages.list" |
pankso@29 | 18 pkgsdesc="$tmpdir/slitaz-$id/packages.desc" |
pankso@7 | 19 |
pankso@7 | 20 # |
pankso@7 | 21 # Functions |
pankso@7 | 22 # |
pankso@7 | 23 |
pankso@22 | 24 # Pizza uses local packages synced with mirror each night. |
pankso@7 | 25 list_pkgs() { |
pankso@29 | 26 [ ! -f "$list" ] && echo "Missing: $pkgsdesc" |
pankso@29 | 27 cat $pkgsdesc | while read PACKAGE VERSION SHORT_DESC |
pankso@7 | 28 do |
pankso@22 | 29 cat << EOT |
pankso@22 | 30 |
pankso@22 | 31 <tr> |
pankso@22 | 32 <td><input type="checkbox" name="pkg" value="$PACKAGE" /></td> |
pankso@22 | 33 <td>$PACKAGE</td> |
pankso@22 | 34 <td>$VERSION</td> |
pankso@22 | 35 <td>$SHORT_DESC</td> |
pankso@22 | 36 </tr> |
pankso@7 | 37 EOT |
pankso@7 | 38 done |
pankso@7 | 39 } |
pankso@7 | 40 |
pankso@7 | 41 # Gen an empty receipt for new flavor. |
pankso@7 | 42 empty_receipt() { |
pankso@7 | 43 cat > $tmpdir/slitaz-$id/receipt << EOT |
pankso@7 | 44 # SliTaz flavor receipt. |
pankso@7 | 45 |
pankso@7 | 46 FLAVOR="" |
pankso@7 | 47 SHORT_DESC="" |
pankso@7 | 48 VERSION="$(date "+%Y%m%d")" |
pankso@7 | 49 MAINTAINER="" |
pankso@7 | 50 |
pankso@7 | 51 ID="" |
pankso@7 | 52 SKEL="" |
pankso@7 | 53 |
pankso@7 | 54 EOT |
pankso@7 | 55 } |
pankso@7 | 56 |
pankso@22 | 57 # Search packages or desc in the local packages.desc |
pankso@22 | 58 # TODO: Html table with selection |
pankso@22 | 59 search_pkgs() { |
pankso@22 | 60 echo '<pre>' |
pankso@22 | 61 for pkg in $search |
pankso@22 | 62 do |
pankso@22 | 63 fgrep $pkg $allpkgs | cut -d "|" -f 1,2,3 |
pankso@22 | 64 done |
pankso@22 | 65 echo '</pre>' |
pankso@22 | 66 } |
pankso@22 | 67 |
pankso@7 | 68 # |
pankso@7 | 69 # Actions |
pankso@7 | 70 # |
pankso@7 | 71 |
pankso@29 | 72 #[ "$DEBUG" ] && echo "<div></div>" |
pankso@29 | 73 DEBUG=0 |
pankso@29 | 74 [ "$DEBUG" ] && echo "<div>$flavor - $desc</div>" |
pankso@29 | 75 |
pankso@7 | 76 case " $(GET) " in |
pankso@22 | 77 *\ search\ *) |
pankso@22 | 78 search="$(GET search)" |
pankso@22 | 79 notify "Searching for: $search" ;; |
pankso@7 | 80 *\ add\ *) |
pankso@22 | 81 add="$(GET add)" |
pankso@22 | 82 notify "Adding packages: $add" |
pankso@7 | 83 for pkg in $add |
pankso@7 | 84 do |
pankso@22 | 85 # Add pkg only if not yep in Pizza flavor pkgs list |
pankso@22 | 86 if ! grep -Eq "^($pkg|get-$pkg) " $list; then |
pankso@22 | 87 pkginfo=$(grep -E "^($pkg|get-$pkg) " $allpkgs | cut -f 1,2,3 -d "|") |
pankso@22 | 88 name=$(echo $pkginfo | cut -d "|" -f 1) |
pankso@22 | 89 vers=$(echo $pkginfo | cut -d "|" -f 2) |
pankso@22 | 90 desc=$(echo $pkginfo | cut -d "|" -f 3) |
pankso@29 | 91 echo "$name $vers \" $desc \"" >> $pkgsdesc |
pankso@27 | 92 echo "$name" >> $list |
pankso@7 | 93 fi |
pankso@7 | 94 done ;; |
pankso@7 | 95 *\ rm\ *) |
pankso@7 | 96 cmdline=$(echo ${QUERY_STRING#pkg=} | sed s'/&/ /g') |
pankso@7 | 97 cmdline=${cmdline%id=*} |
pankso@7 | 98 pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//) |
pankso@29 | 99 notify "Removing packages: $pkgs" |
pankso@7 | 100 for pkg in $pkgs |
pankso@7 | 101 do |
pankso@29 | 102 sed -i "/^${pkg} /"d $pkgsdesc |
pankso@22 | 103 sed -i "/^${pkg} /"d $list |
pankso@7 | 104 done ;; |
pankso@7 | 105 *) |
pankso@7 | 106 # No space in flavor name please. |
pankso@7 | 107 flavor=$(echo $flavor | sed s'/ //'g) |
pankso@7 | 108 # Javascript can be disable in browser. |
pankso@7 | 109 [ ! "$flavor" ] && echo "Missing flavor name" && exit 0 |
pankso@7 | 110 [ ! "$mail" ] && echo "Missing email address" && exit 0 |
pankso@7 | 111 [ ! "$skel" ] && echo "Missing SliTaz skeleton" && exit 0 |
pankso@7 | 112 [ ! "$desc" ] && echo "Missing short desciption" && exit 0 |
pankso@22 | 113 notify "$(gettext "Creating receipt and packages list")" |
pankso@7 | 114 mkdir -p $tmpdir/slitaz-$id |
pankso@27 | 115 # Use a pkg desc for the web interface and a simple one tazlito. |
pankso@29 | 116 cp -f $hgflavors/$skel/packages.desc $pkgsdesc |
pankso@28 | 117 cp -f $hgflavors/$skel/packages.list $list |
pankso@28 | 118 [ -d "$hgflavors/$skel/rootfs" ] && \ |
pankso@28 | 119 cp -a $hgflavors/$skel/rootfs $tmpdir/slitaz-$id |
pankso@7 | 120 empty_receipt |
pankso@7 | 121 sed -i \ |
pankso@7 | 122 -e s"/FLAVOR=.*/FLAVOR=\"slitaz-$flavor\"/" \ |
pankso@7 | 123 -e s"/MAINTAINER=.*/MAINTAINER=\"$mail\"/" \ |
pankso@7 | 124 -e s"/SKEL=.*/SKEL=\"$skel\"/" \ |
pankso@7 | 125 -e s"/SHORT_DESC=.*/SHORT_DESC=\"$desc\"/" \ |
pankso@27 | 126 -e s"/ID=.*/ID=\"$id\"/" $tmpdir/slitaz-$id/receipt |
pankso@27 | 127 echo "Receipt created : $(date '+%Y-%m-%d %H:%M')" > $log ;; |
pankso@7 | 128 esac |
pankso@7 | 129 |
pankso@7 | 130 # |
pankso@7 | 131 # Source the receipt and display page. |
pankso@7 | 132 # |
pankso@7 | 133 . $tmpdir/slitaz-$id/receipt |
pankso@7 | 134 |
pankso@7 | 135 nb=$(cat $list | wc -l) |
pankso@7 | 136 cat << EOT |
pankso@7 | 137 <h2>Packages ($nb)</h2> |
pankso@7 | 138 |
pankso@7 | 139 <form method="get" action="pkgs.cgi"> |
pankso@22 | 140 <div id="packages"> |
pankso@7 | 141 <table> |
pankso@7 | 142 <tbody> |
pankso@7 | 143 $(list_pkgs) |
pankso@7 | 144 </tbody> |
pankso@7 | 145 </table> |
pankso@22 | 146 </div> |
pankso@7 | 147 <input type="hidden" name="id" value="$id" /> |
pankso@22 | 148 <input type="submit" name="rm" value="$(gettext "Remove package(s)")" /> |
pankso@7 | 149 </form> |
pankso@7 | 150 |
pankso@22 | 151 <form method="get" action="pkgs.cgi"> |
pankso@22 | 152 <div style="float: right;"> |
pankso@16 | 153 <input type="text" name="add" style="width: 400px;" /> |
pankso@7 | 154 <input type="hidden" name="id" value="$id" /> |
pankso@22 | 155 <input type="submit" name="pkgs" value="$(gettext "Add package(s)")" /> |
pankso@22 | 156 </div> |
pankso@22 | 157 </form> |
pankso@22 | 158 |
pankso@22 | 159 <form method="get" action="pkgs.cgi"> |
pankso@25 | 160 <p> |
pankso@22 | 161 |
pankso@22 | 162 $(gettext "Here you can add or remove some packages from your flavor. You |
pankso@22 | 163 can also search for packages name and description to find a package name") |
pankso@22 | 164 |
pankso@22 | 165 </p> |
pankso@22 | 166 <input type="text" name="search" style="width: 300px;" /> |
pankso@22 | 167 <input type="hidden" name="id" value="$id" /> |
pankso@22 | 168 <input type="submit" value="$(gettext "Search")" /> |
pankso@22 | 169 <div id="pkgs-search"> |
pankso@22 | 170 $([ "$search" ] && search_pkgs) |
pankso@22 | 171 </div> |
pankso@7 | 172 </form> |
pankso@7 | 173 |
pankso@7 | 174 <pre> |
pankso@7 | 175 Uniq ID : $id |
pankso@7 | 176 Flavor : $FLAVOR |
pankso@7 | 177 Short desc : $SHORT_DESC |
pankso@7 | 178 </pre> |
pankso@25 | 179 |
pankso@25 | 180 <div class="next"> |
pankso@25 | 181 <form method="get" action="rootfs.cgi"> |
pankso@25 | 182 <input type="hidden" name="id" value="$id" /> |
pankso@25 | 183 <input type="submit" value="$(gettext "Continue")"> |
pankso@25 | 184 </form> |
pankso@25 | 185 </div> |
pankso@25 | 186 |
pankso@7 | 187 EOT |
pankso@7 | 188 |
pankso@7 | 189 # HTML footer. |
pankso@7 | 190 cat lib/footer.html |
pankso@7 | 191 |
pankso@7 | 192 exit 0 |