spk annotate lib/libspk.sh @ rev 11

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