spk view lib/libspk.sh @ rev 14

Some fixes to lib/libspk.sh
author Christophe Lincoln <pankso@slitaz.org>
date Tue May 15 10:19:36 2012 +0200 (2012-05-15)
parents 8517989e8588
children c4f1fc1c761a
line source
1 #!/bin/sh
2 #
3 # Libspk - The Spk base function and internal variables used by almost all
4 # spk-tools. Read the README before adding or modifing any code in spk!
5 #
6 # Copyright (C) SliTaz GNU/Linux - BSD License
7 # Author: See AUTHORS files
8 #
9 . /lib/libtaz.sh
10 . /usr/lib/slitaz/libpkg.sh
11 . /etc/slitaz/slitaz.conf
13 # Internal variables.
14 # We should have ${root}/$PKGS_DB ???
15 mirrorurl="$PKGS_DB/mirror"
16 installed="$PKGS_DB/installed"
17 pkgsdesc="$PKGS_DB/packages.desc"
18 pkgsmd5="$PKGS_DB/packages.md5"
19 # ????do we need packages.equiv????
20 blocked="$PKGS_DB/blocked-packages.list"
21 activity="$PKGS_DB/activity"
23 #
24 # Functions
26 # Display receipt information. Expects a receipt to be sourced
27 receipt_info() {
28 cat << EOT
29 $(gettext "Version :") ${VERSION}${EXTRAVERSION}
30 $(gettext "Short desc :") $SHORT_DESC
31 $(gettext "Category :") $CATEGORY
32 EOT
33 }
35 # Extract receipt from tazpkg
36 # Parameters: result_dir package_file
37 extract_receipt() {
38 local dir="$1"
39 local file="$2"
40 pushd "$dir" > /dev/null
41 { cpio --quiet -i receipt > /dev/null 2>&1; } < $file
42 popd > /dev/null
43 }
45 # Used by: list
46 count_installed() {
47 local count=$(ls ${root}${installed} | wc -l)
48 gettext "Installed packages"; echo ": $count"
49 }
51 # Used by: list
52 count_mirrored() {
53 local count=$(cat $pkgsmd5 | wc -l)
54 gettext "Mirrored packages"; echo ": $count"
55 }
57 is_package_mirrored() {
58 local name=$1
59 local occurance=$(cat $pkgsdesc | grep "$name ")
60 [ -n "$occurance" ]
61 }
63 # Download a file trying all mirrors
64 # Parameters: package/file
65 download() {
66 local package=$1
67 local mirror="$(cat $mirrorurl)"
68 case "$package" in
69 *.tazpkg)
70 echo "${mirror%/}/$package"
71 wget -c ${mirror%/}/$package ;;
72 esac
73 }
75 # Assume package_name is valid
76 # There may be a more efficient way to do this...
77 full_package() {
78 local name=$1
79 local occurance=$(cat $pkgsdesc | grep "$name ")
80 local count=0
81 for i in $(echo $occurance | tr "|" "\n"); do
82 if [ $count -eq 1 ]; then
83 echo $name-$i && return
84 fi
85 count=$(($count+1))
86 done
87 }
89 # Check if a package is already installed.
90 # Parameters: package
91 check_for_installed_package() {
92 local name="$1"
93 if [ -d "${root}${installed}/$name" ]; then
94 newline
95 echo $name $(gettext "package is already installed.")
96 exit 0
97 fi
98 }
100 # get an already installed package from packages.equiv TODO REDO!
101 equivalent_pkg() {
102 for i in $(grep -hs "^$1=" ${root}${PKGS_DB}/packages.equiv \
103 ${root}${PKGS_DB}/undigest/*/packages.equiv | sed "s/^$1=//")
104 do
105 if echo $i | fgrep -q : ; then
106 # format 'alternative:newname'
107 # if alternative is installed then substitute newname
108 if [ -f ${root}${installed}/${i%:*}/receipt ]; then
109 # substitute package dependancy
110 echo ${i#*:}
111 return
112 fi
113 else
114 # if alternative is installed then nothing to install
115 if [ -f ${root}${installed}/$i/receipt ]; then
116 # substitute installed package
117 echo $i
118 return
119 fi
120 fi
121 done
122 # if not found in packages.equiv then no substitution
123 echo $1
124 }
126 # Check for missing deps listed in a receipt packages.
127 # Parameters: package dependencies
128 missing_deps() {
129 local package="$1"
130 shift 1
131 local depends="$@"
133 local deps=0
134 local missing
136 # Calculate missing dependencies
137 for pkgorg in $depends; do
138 local pkg=$(equivalent_pkg $pkgorg)
139 if [ ! -d "${root}${installed}/$pkg" ]; then
140 gettext "Missing: \$pkg"; newline
141 deps=$(($deps+1))
142 elif [ ! -f "${root}${installed}/$pkg/receipt" ]; then
143 gettext "WARNING Dependency loop between \$package and \$pkg."; newline
144 fi
145 done
146 if [ $deps -gt 0 ]; then
147 echo $deps $(gettext "missing package(s) to install.")
148 fi
150 gettext "\$deps missing package(s) to install."; newline
152 # Return true if missing deps
153 [ "$deps" != "0" ]
154 }
156 grepesc() {
157 sed 's/\[/\\[/g'
158 }