diff options
-rw-r--r-- | scripts/lib/ptxd_make_get.sh | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/scripts/lib/ptxd_make_get.sh b/scripts/lib/ptxd_make_get.sh index 8507dd518..bfb03a34b 100644 --- a/scripts/lib/ptxd_make_get.sh +++ b/scripts/lib/ptxd_make_get.sh @@ -141,6 +141,76 @@ export -f ptxd_make_get_git # +# in env: +# +# ${path} : local file name +# ${url} : the url to download +# ${opts[]} : an array of options +# +ptxd_make_get_svn() { + set -- "${opts[@]}" + unset opts + local rev + local tarcomp + local mirror="${url#[a-z]*//}" + mirror="$(dirname "${path}")/${mirror//\//.}" + local prefix="$(basename "${path}")" + prefix="${prefix%.tar.*}" + + case "${path}" in + *.tar.gz) + tarcomp="--gzip" + ;; + *.tar.bz2) + tarcomp="--bzip2" + ;; + *.tar.xz) + tarcomp="--xz" + ;; + *) + ptxd_bailout "Only .tar.gz, .tar.bz2, .tar.xz and archives are supported for svn downloads." + ;; + esac + + # + # scan for valid options + # + while [ ${#} -ne 0 ]; do + local opt="${1}" + shift + + case "${opt}" in + rev=*) + rev="${opt#rev=}" + ;; + *) + ptxd_bailout "invalid option '${opt}' to ${FUNCNAME}" + ;; + esac + done + unset opt + + if [ -z "${rev}" ]; then + ptxd_bailout "svn url '${url}' has no 'rev' option" + fi + + echo "${PROMPT}svn: fetching '${url} into '${mirror}'..." + if [ ! -d "${mirror}" ]; then + svn checkout -r ${rev} "${url}" "${mirror}" + else + svn update -r ${rev} "${mirror}" + fi && + lmtime=$(svn info -r ${rev} "${mirror}" | \ + awk '/^Last Changed Date:/ {print $4 " " $5 " " $6}') && + echo "${PROMPT}svn: last modification time '${lmtime}'" && + tar --exclude-vcs --show-stored-names ${tarcomp} \ + --mtime="${lmtime}" --transform "s|^\.|${prefix}|g" \ + --create --file "${path}" -C "${mirror}" . +} +export -f ptxd_make_get_svn + + +# # check if download is disabled # # in env: @@ -234,6 +304,18 @@ ptxd_make_get() { mrd=true fi ;; + svn://*) + # restrict donwload only to the PTXMIRROR + if [ -z "${PTXCONF_SETUP_PTXMIRROR_ONLY}" ]; then + # keep original URL + argv[${#argv[@]}]="${url}" + fi + # add mirror to URLs, but only once + if ! ${mrd}; then + ptxmirror_url="${path/#\/*\//${PTXCONF_SETUP_PTXMIRROR}/}" + mrd=true + fi + ;; http://*|https://*|ftp://*) # restrict donwload only to the PTXMIRROR if [ -z "${PTXCONF_SETUP_PTXMIRROR_ONLY}" ]; then @@ -280,6 +362,10 @@ ptxd_make_get() { ptxd_make_get_download_permitted && ptxd_make_get_git && return ;; + svn://*) + ptxd_make_get_download_permitted && + ptxd_make_get_svn && return + ;; http://*|https://*|ftp://*) ptxd_make_get_download_permitted && ptxd_make_get_http && return |