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 |