diff options
Diffstat (limited to 'support/download/hg')
-rwxr-xr-x | support/download/hg | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/support/download/hg b/support/download/hg index d2e69c35ff..6e9e26b925 100755 --- a/support/download/hg +++ b/support/download/hg @@ -10,16 +10,37 @@ set -e # $3: package's basename (eg. foobar-1.2.3) # $4: output file # And this environment: -# HG : the hg command to call -# BR2_DL_DIR: path to Buildroot's download dir +# HG : the hg command to call +# BUILD_DIR: path to Buildroot's build dir repo="${1}" cset="${2}" basename="${3}" output="${4}" -cd "${BR2_DL_DIR}" -${HG} clone --noupdate --rev "${cset}" "${repo}" "${basename}" -${HG} archive --repository "${basename}" --type tgz --prefix "${basename}" \ - --rev "${cset}" "${output}" -rm -rf "${basename}" +repodir="${basename}.tmp-hg-checkout" +tmp_output="$( mktemp "${output}.XXXXXX" )" + +cd "${BUILD_DIR}" +# Remove leftovers from a previous failed run +rm -rf "${repodir}" + +# Play tic-tac-toe with temp files +# - first, we download to a trashable location (the build-dir) +# - then we create a temporary tarball in the final location, so it is +# on the same filesystem as the final file +# - finally, we atomically rename to the final file + +ret=1 +if ${HG} clone --noupdate --rev "${cset}" "${repo}" "${repodir}"; then + if ${HG} archive --repository "${repodir}" --type tgz \ + --prefix "${basename}" --rev "${cset}" \ + "${tmp_output}"; then + mv "${tmp_output}" "${output}" + ret=0 + fi +fi + +# Cleanup +rm -rf "${repodir}" "${tmp_output}" +exit ${ret} |