spk view lib/libspk.sh @ rev 12

Tiny edits
author Paul Issott <paul@slitaz.org>
date Sun May 13 13:42:38 2012 +0100 (2012-05-13)
parents db99af6fac70
children dcf6700bb045
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 mirrorurl="$PKGS_DB/mirror"
15 installed="$PKGS_DB/installed"
16 pkgsdesc="$PKGS_DB/packages.desc"
17 pkgsmd5="$PKGS_DB/packages.md5"
18 # ????do we need packages.equiv????
19 blocked="$PKGS_DB/blocked-packages.list"
20 activity="$PKGS_DB/activity"
22 #
23 # Functions
26 # Display receipt information.
27 # Expects a receipt to be sourced
28 receipt_info() {
29 cat << EOT
30 $(gettext "Version :") ${VERSION}${EXTRAVERSION}
31 $(gettext "Short desc :") $SHORT_DESC
32 $(gettext "Category :") $CATEGORY
33 EOT
34 }
36 # Extract receipt from tazpkg
37 # Parameters: result_dir package_file
38 extract_receipt() {
39 local dir="$1"
40 local file="$2"
42 pushd "$dir" > /dev/null
43 { cpio --quiet -i receipt > /dev/null 2>&1; } < $file
44 popd > /dev/null
45 }
47 # Used by: list
48 count_installed() {
49 local count=$(ls $installed | wc -l)
50 gettext "Installed packages"; echo ": $count"
51 }
53 # Used by: list
54 count_mirrored() {
55 local count=$(cat $pkgsmd5 | wc -l)
56 gettext "Mirrored packages"; echo ": $count"
57 }
59 is_package_mirrored() {
60 local package_name=$1
61 local occurance=$(cat $pkgsdesc | grep "$package_name ")
62 [ -n "$occurance" ]
63 }
65 # Download a file trying all mirrors
66 # Parameters: package/file
67 download() {
68 local package=$1
69 local mirror="$(cat $mirrorurl)"
70 case "$package" in
71 *.tazpkg)
72 echo "${mirror%/}/$package"
73 wget -c ${mirror%/}/$package ;;
74 esac
75 }
77 # Assume package_name is valid
78 # There may be a more efficient way to do this...
79 full_package() {
80 local package_name=$1
81 local occurance=$(cat $pkgsdesc | grep "$package_name ")
82 local count=0
83 for i in $(echo $occurance | tr "|" "\n"); do
84 if [ $count -eq 1 ]; then
85 echo $package_name-$i
86 return
87 fi
88 count=$(($count+1))
89 done
90 }
92 # Check if a package is already installed.
93 # Parameters: package
94 check_for_installed_package() {
95 local package_name="$1"
97 if [ -d "$installed/$package_name" ]; then
98 newline
99 echo $package_name $(gettext "package is already installed.")
100 exit 0
101 fi
102 }
104 # get an already installed package from packages.equiv TODO REDO!
105 equivalent_pkg() {
106 for i in $(grep -hs "^$1=" $PKGS_DB/packages.equiv \
107 $PKGS_DB/undigest/*/packages.equiv | sed "s/^$1=//")
108 do
109 if echo $i | fgrep -q : ; then
110 # format 'alternative:newname'
111 # if alternative is installed then substitute newname
112 if [ -f $installed/${i%:*}/receipt ]; then
113 # substitute package dependancy
114 echo ${i#*:}
115 return
116 fi
117 else
118 # if alternative is installed then nothing to install
119 if [ -f $installed/$i/receipt ]; then
120 # substitute installed package
121 echo $i
122 return
123 fi
124 fi
125 done
126 # if not found in packages.equiv then no substitution
127 echo $1
128 }
130 # Check for missing deps listed in a receipt packages.
131 # Parameters: package dependencies
132 missing_deps() {
133 local package="$1"
134 shift 1
135 local depends="$@"
137 local deps=0
138 local missing
140 # Calculate missing dependencies
141 for pkgorg in $depends; do
142 local pkg=$(equivalent_pkg $pkgorg)
143 if [ ! -d "$installed/$pkg" ]; then
144 gettext "Missing: \$pkg"; newline
145 deps=$(($deps+1))
146 elif [ ! -f "$installed/$pkg/receipt" ]; then
147 gettext "WARNING Dependency loop between \$package and \$pkg."; newline
148 fi
149 done
150 if [ $deps -gt 0 ]; then
151 echo $deps $(gettext "missing package(s) to install.")
152 fi
154 gettext "\$deps missing package(s) to install."; newline
156 # Return true if missing deps
157 [ "$deps" != "0" ]
158 }
160 grepesc() {
161 sed 's/\[/\\[/g'
162 }