#!/usr/bin/env bash # We want to catch any unexpected failure, and exit immediately set -e # Download helper for cvs, 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 RAWNAME Use rawname (aka module name) RAWNAME. # -n NAME Use basename NAME. # # Environment: # CVS : the cvs command to call 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) rawname="${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). # If the CVS server is deadlocked, the client will never return (cfr. # http://autobuild.buildroot.net/results/23d/23d1034b33d0354de15de2ec4a8ccd0603e8db78/build-end.log # ). Since nobody sane will put large code bases in CVS, a timeout of # 10 minutes should do the trick. _cvs() { eval timeout 10m ${CVS} "${@}" } if [[ ${rev} =~ ^[0-9] ]]; then # Date, because a tag or a branch cannot begin with a number select="-D" else # Tag or branch select="-r" fi # The absence of an initial : on ${uri} means access method undefined if [[ ! "${uri}" =~ ^: ]]; then # defaults to anonymous pserver uri=":pserver:anonymous@${uri}" fi export TZ=UTC _cvs ${verbose} -z3 -d"'${uri}'" \ co "${@}" -d "'${basename}'" ${select} "'${rev}'" -P "'${rawname}'" tar czf "${output}" "${basename}"