summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2013-06-08 17:13:03 +0200
committerMichael Olbrich <m.olbrich@pengutronix.de>2013-06-18 17:23:23 +0200
commit3e5e19a2328dad13869502fadfcbe5c60ddc2e1f (patch)
tree37d21c1f11442f43fb413269d77fcf42eabea325
parentd2db00d4e82793b1da964efe1b89b9b2ead19dda (diff)
downloadptxdist-3e5e19a2328dad13869502fadfcbe5c60ddc2e1f.tar.gz
ptxdist-3e5e19a2328dad13869502fadfcbe5c60ddc2e1f.tar.xz
ptxd_make_get: support git urls
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
-rw-r--r--scripts/lib/ptxd_make_get.sh84
1 files changed, 84 insertions, 0 deletions
diff --git a/scripts/lib/ptxd_make_get.sh b/scripts/lib/ptxd_make_get.sh
index 914b3d520..f8722a6b4 100644
--- a/scripts/lib/ptxd_make_get.sh
+++ b/scripts/lib/ptxd_make_get.sh
@@ -73,6 +73,74 @@ export -f ptxd_make_get_http
#
+# in env:
+#
+# ${path} : local file name
+# ${url} : the url to download
+# ${opts[]} : an array of options
+#
+ptxd_make_get_git() {
+ set -- "${opts[@]}"
+ unset opts
+ local tag
+ local mirror="${url#[a-z]*//}"
+ mirror="$(dirname "${path}")/${mirror//\//.}"
+ local prefix="$(basename "${path}")"
+ prefix="${prefix%.tar.*}/"
+
+ case "${path}" in
+ *.tar.gz|*.tar.bz2|*.tar.xz|*.zip)
+ ;;
+ *)
+ ptxd_bailout "Only .tar.gz, .tar.bz2, .tar.xz and .zup archives are supported for git downloads."
+ ;;
+ esac
+
+ #
+ # scan for valid options
+ #
+ while [ ${#} -ne 0 ]; do
+ local opt="${1}"
+ shift
+
+ case "${opt}" in
+ tag=*)
+ tag="${opt#tag=}"
+ ;;
+ *)
+ ptxd_bailout "invalid option '${opt}' to ${FUNCNAME}"
+ ;;
+ esac
+ done
+ unset opt
+
+ if [ -z "${tag}" ]; then
+ ptxd_bailout "git url '${url}' has no 'tag' option"
+ fi
+
+ echo "${PROMPT}git: fetching '${url} into '${mirror}'..."
+ if [ ! -d "${mirror}" ]; then
+ git init --bare --shared "${mirror}"
+ else
+ git --git-dir="${mirror}" remote remove origin
+ fi
+ # overwrite everything so the git repository is in a defined state
+ git --git-dir="${mirror}" config transfer.fsckObjects true &&
+ git --git-dir="${mirror}" config tar.tar.bz2.command "bzip2 -c" &&
+ git --git-dir="${mirror}" config tar.tar.xz.command "xz -c"
+ git --git-dir="${mirror}" remote add origin "${url}" &&
+ git --git-dir="${mirror}" fetch --progress -pf origin "+refs/*:refs/*" &&
+
+ if ! git --git-dir="${mirror}" rev-parse --verify -q "${tag}" > /dev/null; then
+ ptxd_bailout "git: tag '${tag}' not found in '${url}'"
+ fi &&
+
+ git --git-dir="${mirror}" archive --prefix="${prefix}" -o "${path}" "${tag}"
+}
+export -f ptxd_make_get_git
+
+
+#
# check if download is disabled
#
# in env:
@@ -154,6 +222,18 @@ ptxd_make_get() {
mrd=true
fi
;;
+ git://*|http://*".git;"*|https://*".git;"*)
+ # 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
@@ -196,6 +276,10 @@ ptxd_make_get() {
shift
case "${url}" in
+ git://*|http://*.git|https://*.git)
+ ptxd_make_get_download_permitted &&
+ ptxd_make_get_git && return
+ ;;
http://*|https://*|ftp://*)
ptxd_make_get_download_permitted &&
ptxd_make_get_http && return