diff --git a/scripts/libmakepkg/source/hg.sh.in b/scripts/libmakepkg/source/hg.sh.in index 2889d4dd..5cd6fd2d 100644 --- a/scripts/libmakepkg/source/hg.sh.in +++ b/scripts/libmakepkg/source/hg.sh.in @@ -111,3 +111,30 @@ extract_hg() { popd &>/dev/null } + +calc_checksum_hg() { + local netfile=$1 integ=$2 ret=0 shellopts dir url fragment fragval sum + + # this function requires pipefail - save current status to restore later + shellopts=$(shopt -p -o pipefail) + shopt -s -o pipefail + + dir=$(get_filepath "$netfile") + url=$(get_url "$netfile") + fragment=$(get_uri_fragment "$url") + + case ${fragment%%=*} in + tag|revision) + fragval=${fragment##*=} + sum=$(hg --repository "$dir" archive --type tar --rev "$fragval" - | "${integ}sum" 2>&1) || ret=1 + sum="${sum%% *}" + ;; + *) + sum="SKIP" + ;; + esac + + eval "$shellopts" + printf '%s' "$sum" + return $ret +}