spk view lib/libspk.sh @ rev 19

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