tazpkg annotate modules/flavor @ rev 955

modules/search: allow search file with dash at start: tazpkg -sf "-spi"
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Dec 22 00:02:54 2017 +0200 (2017-12-22)
parents 8a73a58ed3cb
children 03544b89ac81
rev   line source
al@840 1 #!/bin/sh
al@840 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
al@840 3 # flavor - TazPkg module
al@840 4 # Install package-list from a flavor
al@840 5
al@840 6
al@840 7 # Connect function libraries
al@840 8 . /lib/libtaz.sh
al@840 9
al@840 10 # Get TazPkg working environment
al@840 11 . @@MODULES@@/getenv
al@840 12
al@840 13
al@840 14
al@840 15
al@840 16 # Download a file from this mirror
al@840 17
al@840 18 download_from() {
al@840 19 case "$1" in
al@840 20 # Mirror URL can have a trailing slash or not.
al@840 21 http://* | https://* | ftp://*)
al@846 22 wget -c -q -T 30 -U $UA ${1%/}/$2 2>/dev/null && break ;;
al@840 23 *)
al@840 24 ln -sf ${1%/}/$2 . && break ;;
al@840 25 esac
al@840 26 }
al@840 27
al@840 28
al@840 29 # Download a file trying all mirrors
al@840 30
al@840 31 download() {
al@840 32 # input: <package_name>-<version>.tazpkg
al@840 33 local i
al@840 34 case "$1" in
al@840 35 *.tazpkg)
al@844 36 for i in $PRIORITY; do
al@840 37 if [ -n "$(awk -F$'\t' -vp="$1" 'p==$1"-"$2".tazpkg"{print $1}' \
al@840 38 "$i/packages.info")" ]; then
al@840 39 download_from "$(cat $i/mirror)" "$@" && return
al@840 40 fi
al@840 41 done
al@840 42 ;;
al@840 43 esac
al@840 44
al@844 45 for i in $(cat $(for rep in $PRIORITY; do echo $rep/mirror; done) 2>/dev/null); do
al@840 46 download_from "$i" "$@" && break
al@840 47 done
al@840 48 }
al@840 49
al@840 50
al@840 51
al@840 52
al@840 53 FLAVOR="$1"
al@840 54 TMP_DIR=$(mktemp -d)
al@840 55
al@840 56 [ -f "$FLAVOR.flavor" ] && cp "$FLAVOR.flavor" "$TMP_DIR"
al@840 57
al@840 58 cd "$TMP_DIR"
al@840 59 if [ -f "$FLAVOR.flavor" ] || download "$FLAVOR.flavor"; then
al@840 60 zcat < "$FLAVOR.flavor" | cpio --quiet -i >/dev/null
al@840 61
al@844 62 while read pkgver; do
al@844 63 # 'pkgver' here in form 'package-version'
al@844 64 awk -F$'\t' -vf="$pkgver" '$1 "-" $2 == f {exit 1}' "$PKGS_DB/installed.info"
al@844 65 # Continue if package already installed
al@844 66 [ "$?" -eq 1 ] && continue
al@840 67
paul@943 68 # Install package if it's not installed or has a different version
al@840 69 cd "$CACHE_DIR"
al@844 70 download "$pkgver.tazpkg"
al@840 71 cd "$TMP_DIR"
al@844 72 tazpkg install "$CACHE_DIR/$pkgver.tazpkg" --forced
al@840 73 done < "$FLAVOR.pkglist"
al@840 74
al@840 75 [ -f "$FLAVOR.nonfree" ] && \
al@840 76 while read pkg; do
al@840 77 [ -d "$INSTALLED/$pkg" ] && continue
al@840 78 [ ! -d "$INSTALLED/get-$pkg" ] && tazpkg get-install get-$pkg
al@840 79 get-$pkg
al@840 80 done < "$FLAVOR.nonfree"
al@840 81
al@840 82 # Option "--purge"
al@844 83 # FIXME: respect all the installed dependencies of the flavored packages
al@840 84 [ -n "$purge" ] && \
al@840 85 for pkg in $(awk -F$'\t' '{printf "%s:%s ", $1, $2}' "$PKGS_DB/installed.info"); do
al@840 86 # If installed 'package-version' listed in 'pkglist'
al@840 87 grep -q "^${pkg/:/-}$" "$FLAVOR.pkglist" && continue
al@840 88 # If installed 'package' listed in 'nonfree'
al@840 89 grep -qs "^${pkg%:*}$" "$FLAVOR.nonfree" && continue
al@840 90 # Remove other packages
al@840 91 tazpkg remove "${pkg%:*}"
al@840 92 done
al@840 93 else
al@840 94 _ "Can't find flavor \"%s\". Abort." "$FLAVOR"
al@840 95 fi
al@840 96 cd "$TOP_DIR"
al@840 97 rm -rf "$TMP_DIR"