#!/usr/bin/env bash

# We want to catch any unexpected failure, and exit immediately
set -e

# Download helper for hg, to be called from the download wrapper script
#
# Options:
#   -q          Be quiet.
#   -o FILE     Generate archive in FILE.
#   -u URI      Clone from repository at URI.
#   -c CSET     Use changeset (or revision) CSET.
#   -n NAME     Use basename NAME.
#
# Environment:
#   HG       : the hg command to call

quiet=
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
    case "${OPT}" in
    q)  quiet=-q;;
    o)  output="${OPTARG}";;
    u)  uri="${OPTARG}";;
    c)  cset="${OPTARG}";;
    n)  basename="${OPTARG}";;
    :)  printf "option '%s' expects a mandatory argument\n" "${OPTARG}"; exit 1;;
    \?) printf "unknown option '%s'\n" "${OPTARG}" >&2; exit 1;;
    esac
done

shift $((OPTIND-1)) # Get rid of our options

# Caller needs to single-quote its arguments to prevent them from
# being expanded a second time (in case there are spaces in them)
_hg() {
    if [ -z "${quiet}" ]; then
        printf '%s ' ${HG} "${@}"; printf '\n'
    fi
    _plain_hg "$@"
}
# Note: please keep command below aligned with what is printed above
_plain_hg() {
    eval ${HG} "${@}"
}

_hg clone ${quiet} "${@}" --noupdate "'${uri}'" "'${basename}'"

_plain_hg archive ${quiet} --repository "'${basename}'" --type tgz \
            --prefix "'${basename}'" --rev "'${cset}'" \
            - >"${output}"
