#!/usr/bin/env bash

# NOTE: if the output of this backend has to change (e.g. we change what gets
# included in the archive, or we change the format of the archive (e.g. tar
# options, compression ratio or method)), we MUST update the format version
# in the variable BR_FTM_VERSION_svn, in package/pkg-download.mk.

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

# Download helper for svn, to be called from the download wrapper script
#
# Options:
#   -q          Be quiet.
#   -o FILE     Generate archive in FILE.
#   -u URI      Checkout from repository at URI.
#   -c REV      Use revision REV.
#   -n NAME     Use basename NAME.
#
# Environment:
#   SVN      : the svn command to call

. "${0%/*}/helpers"

quiet=
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
    case "${OPT}" in
    q)  quiet=-q;;
    o)  output="${OPTARG}";;
    u)  uri="${OPTARG}";;
    c)  rev="${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)
_svn() {
    if [ -z "${quiet}" ]; then
        printf '%s ' ${SVN} "${@}"; printf '\n'
    fi
    _plain_svn "$@"
}
# Note: please keep command below aligned with what is printed above
_plain_svn() {
    eval ${SVN} "${@}"
}

_svn export --ignore-keywords ${quiet} "${@}" "'${uri}@${rev}'" "'${basename}'"

# Get the date of the revision, to generate reproducible archives.
# The output format is YYYY-MM-DDTHH:MM:SS.mmmuuuZ (i.e. always in the
# UTC timezone), which we can feed as-is to the --mtime option for tar.
# In case there is a redirection (e.g. http -> https), just keep the
# last line (svn outputs everything on stdout)
date="$( _plain_svn info "'${uri}@${rev}'" \
        |sed -r -e '/^Last Changed Date: /!d; s///'
       )"

# Generate the archive.
# We did a 'svn export' above, so it's not a working copy (there is no .svn
# directory or file to ignore).
mk_tar_gz "${basename}" "${basename}" "${date}" "${output}"
