#!/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"

verbose=
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
    case "${OPT}" in
    q)  verbose=-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() {
    eval ${SVN} "${@}"
}

_svn export ${verbose} "${@}" "'${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="$( _svn info --show-item last-changed-date "'${uri}@${rev}'" |tail -n 1 )"

# 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}"
