#!/bin/sh
# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
# flavor - TazPkg module
# Install package-list from a flavor


# Connect function libraries
. /lib/libtaz.sh

# Get TazPkg working environment
. @@MODULES@@/getenv




# Download a file from this mirror

download_from() {
	case "$1" in
		# Mirror URL can have a trailing slash or not.
		http://* | https://* | ftp://*)
			wget -c -q -T 30 -U $UA ${1%/}/$2 2>/dev/null && return ;;
		*)
			ln -sf ${1%/}/$2 . && return ;;
	esac
}


# Download a file trying all mirrors

download() {
	# input: <package_name>-<version>.tazpkg
	local i
	case "$1" in
		*.tazpkg)
			for i in $PRIORITY; do
				if [ -n "$(awk -F$'\t' -vp="$1" 'p==$1"-"$2".tazpkg"{print $1}' \
					"$i/packages.info")" ]; then
					download_from "$(cat $i/mirror)" "$@" && return
				fi
			done
			;;
	esac

	for i in $(cat $(for rep in $PRIORITY; do echo $rep/mirror; done) 2>/dev/null); do
		download_from "$i" "$@" && break
	done
}




FLAVOR="$1"
TMP_DIR=$(mktemp -d)

[ -f "$FLAVOR.flavor" ] && cp "$FLAVOR.flavor" "$TMP_DIR"

cd "$TMP_DIR"
if [ -f "$FLAVOR.flavor" ] || download "$FLAVOR.flavor"; then
	zcat < "$FLAVOR.flavor" | cpio --quiet -i >/dev/null

	while read pkgver; do
		# 'pkgver' here in form 'package-version'
		awk -F$'\t' -vf="$pkgver" '$1 "-" $2 == f {exit 1}' "$PKGS_DB/installed.info"
		# Continue if package already installed
		[ "$?" -eq 1 ] && continue

		# Install package if it's not installed or has a different version
		cd "$CACHE_DIR"
		download "$pkgver.tazpkg"
		cd "$TMP_DIR"
		tazpkg install "$CACHE_DIR/$pkgver.tazpkg" --forced
	done < "$FLAVOR.pkglist"

	[ -f "$FLAVOR.nonfree" ] && \
	while read pkg; do
		[ -d "$INSTALLED/$pkg" ] && continue
		[ ! -d "$INSTALLED/get-$pkg" ] && tazpkg get-install get-$pkg
		get-$pkg
	done < "$FLAVOR.nonfree"

	# Option "--purge"
	# FIXME: respect all the installed dependencies of the flavored packages
	[ -n "$purge" ] && \
	for pkg in $(awk -F$'\t' '{printf "%s:%s ", $1, $2}' "$PKGS_DB/installed.info"); do
		# If installed 'package-version' listed in 'pkglist'
		grep -q "^${pkg/:/-}$" "$FLAVOR.pkglist" && continue
		# If installed 'package' listed in 'nonfree'
		grep -qs "^${pkg%:*}$" "$FLAVOR.nonfree" && continue
		# Remove other packages
		tazpkg remove "${pkg%:*}"
	done
else
	_ "Can't find flavor \"%s\". Abort." "$FLAVOR"
fi
cd "$TOP_DIR"
rm -rf "$TMP_DIR"
