some modification on instpkg
[cmdllinux.git] / scripts / manage / installpkg
blob395ffb5b3612ed168b8a29778f7e2dfec96ca0d7
1 #! /bin/sh
3 #2011 Raminos production (raminux.sf.net)
5 : ${DIALOG=dialog}
7 pacman -Sy > /dev/null 2>&1
8 newmd5=`md5sum /var/lib/pacman/sync/core.db | cut -d ' ' -f 1`
10 DATABASE=/var/lib/instpkg/packages.data
11 CFG=/var/lib/instpkg/settings.include
13 [ ! -d /var/lib/instpkg ] && mkdir -p /var/lib/instpkg
14 [ ! -f $CFG ] && touch $CFG
15 grep -q "md5sum=" $CFG || echo "md5sum=" >> $CFG
16 grep -q "bysize=" $CFG || echo "bysize=" >> $CFG
17 grep -q "showsize=" $CFG || echo "showsize=true" >> $CFG
18 grep -q "infobutton=" $CFG || echo "infobutton=" >> $CFG
19 grep -q "selectall=" $CFG || echo "selectall=" >> $CFG
20 source $CFG
22 if [ "$newmd5" != "$md5sum" ]; then
23 sed -i "s/md5sum=.*/md5sum=$newmd5/" $CFG
24 $HOME/manage/update_pkgdb
27 [ ! -f $DATABASE ] && $HOME/manage/update_pkgdb
29 tempfile=`mktemp 2> /dev/null` || tempfile=/tmp/tmpfile$$
30 trap "rm -f $tempfile" 0 1 2 5 15
32 pkgmenu()
34 if [ $showsize ]; then
35 if [ $bysize ]; then
36 grep "^${GRPPAIR/,/ } " $DATABASE | cut -d ' ' -f 3-5 | sort -n -k 3 -r | \
37 while read NAME VER SIZE; do
38 if [ $selectall ]; then
39 [ -d /var/lib/pacman/local/$NAME-$VER ] && \
40 echo "$NAME $(expr $SIZE / 1024)KB(*) on" || \
41 echo "$NAME $(expr $SIZE / 1024)KB(-) on"
42 else
43 [ -d /var/lib/pacman/local/$NAME-$VER ] && \
44 echo "$NAME $(expr $SIZE / 1024)KB(*) off" || \
45 echo "$NAME $(expr $SIZE / 1024)KB(-) off"
47 done
48 else
49 grep "^${GRPPAIR/,/ } " $DATABASE | cut -d ' ' -f 3-5 | \
50 while read NAME VER SIZE; do
51 if [ $selectall ]; then
52 [ -d /var/lib/pacman/local/$NAME-$VER ] && \
53 echo "$NAME $(expr $SIZE / 1024)KB(*) on" || \
54 echo "$NAME $(expr $SIZE / 1024)KB(-) on"
55 else
56 [ -d /var/lib/pacman/local/$NAME-$VER ] && \
57 echo "$NAME $(expr $SIZE / 1024)KB(*) off" || \
58 echo "$NAME $(expr $SIZE / 1024)KB(-) off"
60 done
62 else
63 grep "^${GRPPAIR/,/ } " $DATABASE | cut -d ' ' -f 3,4 | \
64 while read NAME VER; do
65 if [ $selectall ]; then
66 [ -d /var/lib/pacman/local/$NAME-$VER ] && \
67 echo "$NAME $VER(*) on" || \
68 echo "$NAME $VER(-) on"
69 else
70 [ -d /var/lib/pacman/local/$NAME-$VER ] && \
71 echo "$NAME $VER(*) off" || \
72 echo "$NAME $VER(-) off"
74 done
78 setupdialog()
80 choice=`$DIALOG --backtitle "instpkg settings" --stdout \
81 --title "" --checklist "Setup options" 20 61 15 \
82 infobutton - $([ $infobutton ] && echo on || echo off) \
83 showsize - $([ $showsize ] && echo on || echo off) \
84 bysize - $([ $bysize ] && echo on || echo off) \
85 selectall - $([ $selectall ] && echo on || echo off) 2> /dev/null`
86 retval=$?
87 case $retval in
89 for i in infobutton showsize bysize selectall; do
90 [ "$choice" != "${choice/"$i"/}" ] && sed -i "s/$i=.*/$i=true/" $CFG || sed -i "s/$i=.*/$i=/" $CFG
91 done
92 source $CFG
94 esac
97 GRPMENU=`cut -d ' ' -f 1,2 $DATABASE | sort -u | tr ' ' ',' | sed 's/.*/& -/'`
98 while true; do
99 GRPPAIR=`$DIALOG --backtitle "Install packages" --stdout \
100 --title "" --clear --default-item "$GRPPAIR" \
101 --extra-button --extra-label "Install" \
102 --menu "Select packages" 20 61 15 \
103 $GRPMENU "<setup>" - 2> /dev/null`
104 retval=$?
105 case $retval in
107 if [ "$GRPPAIR" = "<setup>" ]; then
108 setupdialog
109 continue
111 if [ ! -z "$GRPPAIR" ]; then
112 while true; do
113 if [ $infobutton ]; then
114 #if ... not in function - break doesn't work from function
115 choice=`$DIALOG --backtitle "Install packages" --stdout \
116 --title "" --default-item "${choice//\"/}" --ok-label "Add" \
117 --extra-button --extra-label "Info" --cancel-label "Back" \
118 --checklist "Select packages" 20 61 15 \
119 $(pkgmenu) 2> /dev/null`
120 retval=$?
121 case $retval in
123 if [ ! -z "$choice" ]; then
124 echo -n "$choice " >> $tempfile
125 break
129 if [ ! -z "$choice" ]; then
130 for i in $choice; do
131 $DIALOG --title "${i//\"/}" --msgbox "Description:\n\n$(grep "^${GRPPAIR/,/ } ${i//\"/} " $DATABASE | cut -d " " -f 6-)" 10 61 2> /dev/null
132 done
135 *) break;;
136 esac
138 else
139 #if ... not in function - break doesn't work from function
140 choice=`$DIALOG --backtitle "Install packages" --stdout \
141 --title "" --ok-label "Add" --cancel-label "Back" \
142 --checklist "Select packages" 20 61 15 \
143 $(pkgmenu) 2> /dev/null`
144 retval=$?
145 case $retval in
147 if [ ! -z "$choice" ]; then
148 echo -n "$choice " >> $tempfile
149 break
152 *) break;;
153 esac
156 done
160 [ ! -z "$(cat $tempfile)" ] && pacman -Sf $(cat $tempfile | tr -d '"' | tr '/' ' ')
161 break
162 #extra button pressed
164 *) break;;
165 esac
166 done