4c7b13a83574128ca34317cabfcf2cd2c6df6c4e
[platform/upstream/libzypp.git] / tools / package-manager / package-manager
1 #! /bin/sh
2 # by http://en.opensuse.org/User:Mvidner
3 # https://bugzilla.novell.com/show_bug.cgi?id=222757
4 usage() {
5     cat >&2 <<EOF
6 $0 version 0.2
7 Usage:
8   $0 --update ONE_NAME
9   $0 --remove ONE_NAME
10   $0 [--install [ONE_FILE]]
11 EOF
12     exit $1
13 }
14
15 # quoted concatenation of arguments
16 function quote() {
17   # formerly used 'printf %q' breaks UTF-8 strings
18   echo -n "$@" | sed 's/\([]|&;<>()$`\" \t*?#~=%[]\)/\\\1/g'
19 }
20
21 function mkCmd() {
22   quote "$1"
23   shift
24   for ARG in "$@"; do
25     echo -n " $(quote "$ARG")"
26   done
27 }
28
29 function check_installed()
30 {
31   rpm -q "$1" >/dev/null
32   return $?
33 }
34
35 function what_do_we_have()
36 {
37   echo "Zlm: ${HAVE_ZLM}"
38   echo "openSUSE: ${HAVE_OPENSUSE}"
39   echo "KPackagekit: ${HAVE_KPACKAGEKIT}"
40   echo "GPackagekit: ${HAVE_GPACKAGEKIT}"
41   echo "KDE running: ${KDE_FULL_SESSION}"
42 }
43
44 # check what we have
45 HAVE_ZLM=false
46 check_installed "zen-updater"
47 if [ "$?" == "0" ]
48 then
49     HAVE_ZLM=true
50 fi
51
52 HAVE_OPENSUSE=false
53 check_installed "yast2-packager"
54 if [ $? == 0 ]
55 then
56     HAVE_OPENSUSE=true
57 fi
58
59 HAVE_KPACKAGEKIT=false
60 check_installed "kpackagekit"
61 if [ "$?" == "0" ]
62 then
63     HAVE_KPACKAGEKIT=true
64 fi
65
66 HAVE_GPACKAGEKIT=false
67 check_installed "gnome-packagekit"
68 if [ $? == 0 ]
69 then
70     HAVE_GPACKAGEKIT=true
71 fi
72
73 if $HAVE_ZLM; then
74     if $HAVE_OPENSUSE; then
75         if [ -f /etc/sysconfig/sw_management ]; then
76             . /etc/sysconfig/sw_management
77             PSMS="$PREFERRED_SW_MANAGER_STACK"
78         fi
79
80         if [ "x$PSMS" = "xzlm" ]; then
81             STACK=zlm
82         elif [ "x$PSMS" = "xopensuse" ]; then
83             STACK=opensuse
84         else
85             echo >&2 "/etc/sysconfig/sw_management:PREFERRED_SW_MANAGER_STACK should contain"
86             echo >&2 "'zlm' or 'opensuse'"
87             STACK=ugh
88         fi
89     else
90         STACK=zlm
91     fi
92 else
93     if $HAVE_OPENSUSE; then
94         STACK=opensuse
95     else
96         echo >&2 "No package manager installed?"
97         STACK=ugh
98     fi
99 fi
100
101 METHOD=yast
102 # determine what we can use
103 if $HAVE_KPACKAGEKIT && [ "$KDE_FULL_SESSION" ]; then
104   METHOD=kpackagekit
105 elif $HAVE_GPACKAGEKIT && [ "$WINDOWMANAGER" == "/usr/bin/gnome" ]; then
106   METHOD=gnome-packagekit
107 else
108   if [ "$STACK" == "zlm" ]; then
109     METHOD="zlm"
110   else
111     METHOD="yast"
112   fi
113 fi
114
115 echo $METHOD
116
117 xsu() {
118     # a copy of xdg-su.
119     package-manager-su -c "$(mkCmd "$@")"
120 }
121
122 # do_* fall back to yast for STACK=ugh
123
124 do_update() {
125     case "${METHOD}" in
126     yast)
127       xsu /sbin/yast2 --update "$@"
128     ;;
129     zlm)
130       zen-updater --no-tray "$@"
131     ;;
132     kpackagekit)
133       kpackagekit --updates "$@"
134     ;;
135     gnome-packagekit)
136       if [ -e /usr/bin/gpk-update-viewer2 ]; then
137         /usr/bin/gpk-update-viewer2 "$@"
138       else
139         /usr/bin/gpk-update-viewer "$@"
140       fi
141     ;;
142     esac
143 }
144
145 do_remove() {
146   # not all support remove
147   case "${METHOD}" in
148     yast|kpackagekit|gnome-packagekit)
149       xsu /sbin/yast2 --remove "$@"
150     ;;
151     zlm)
152       zen-remover "$@"
153     ;;
154     esac
155 }
156
157 do_install() {
158     case "${METHOD}" in
159     yast)
160       xsu /sbin/yast2 --install "$@"
161     ;;
162     zlm)
163       zen-installer "$@"
164     ;;
165     kpackagekit)
166       if [ $# == 0 ]; then
167           xsu /sbin/yast2 --install
168       else
169           kpackagekit "$@"
170       fi
171     ;;
172     gnome-packagekit)
173       if [ $# == 0 ]; then
174           xsu /sbin/yast2 --install
175       else
176           /usr/bin/gpk-install-local-file "$@"
177       fi
178     ;;
179     esac
180 }
181
182 if [ "x$1" = "x--update" -a $# = 2 ]; then
183     shift
184     do_update "$@"
185 elif [ "x$1" = "x--remove" -a $# = 2 ]; then
186     shift
187     do_remove "$@"
188 elif [ "x$1" = "x--install" ]; then
189     shift
190     do_install "$@"
191 elif [ $# = 0 ]; then
192     do_install
193 else
194     usage 1
195 fi