#!/bin/sh
# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
# checkspace - TazPkg module
# Estimate the free space needed to install the upgrade list

size=0
result=0
unit="Mo"

check_space()
{
    # Read packages.info once time for all packages and their deps
    pkgs=$(cat "$UP_LIST")

    # Build full list (pkgs + no deps installed)
    all_pkgs="$pkgs"
    for pkg in $pkgs; do
        deps=$(awk -F'\t' -v p="$pkg" '$1 == p {print $8}' /var/lib/tazpkg/packages.info)
        for dep in $deps; do
            [ ! -d /var/lib/tazpkg/installed/$dep ] && all_pkgs="$all_pkgs $dep"
        done
    done

    # Once pass on packages.info for all packages
    result=$(echo "$all_pkgs" | tr ' ' '\n' | sort -u | \
        awk -F'\t' 'NR==FNR {pkgs[$1]=1; next} $1 in pkgs {print $7}' - /var/lib/tazpkg/packages.info | \
        awk '
        {
            split($0, a, " ")
            for (i in a) {
                v = a[i]
                if (v ~ /K$/) { sub(/K$/,"",v); total += v / 1024 }
                else if (v ~ /G$/) { sub(/G$/,"",v); total += v * 1024 }
                else { sub(/M$/,"",v); total += v }
            }
        }
        END { print total }')

    if $(echo $result | awk '{print ($1 > 1024) ? "true" : "false"}'); then
        result=$(awk "BEGIN {print $result / 1024; exit}")
        unit="Go"
    fi

    echo "$(LC_ALL=C printf '%0.2f' $result) $unit"
}
