summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2018-10-27 21:04:14 (GMT)
committerGitHub <noreply@github.com>2018-10-27 21:04:14 (GMT)
commitd2bf59cb7da0940aa3a7bd660f2701f3eb2677fe (patch)
treeca8e82e23adc88e815f3b470350481a0af1ac087
parente12e90c798a7c27cb0d7edfba4e7bcd80fc68b65 (diff)
parent21af769802e25d99ef00026372b3e54970643f61 (diff)
Merge pull request #1072 from stilor/failure-when-saving
Detect errors in CT_SaveLocal
-rw-r--r--scripts/functions40
1 files changed, 32 insertions, 8 deletions
diff --git a/scripts/functions b/scripts/functions
index 1b753ef..272f368 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -752,7 +752,9 @@ CT_DoGetFile()
}
# This function saves the specified to local storage if possible,
-# and if so, symlinks it for later usage
+# and if so, symlinks it for later usage. This function is called from
+# the `if' condition (via the CT_GetFile) and therefore must return
+# on error rather than relying on the shell's ERR trap to catch it.
# Usage: CT_SaveLocal </full/path/file.name>
CT_SaveLocal()
{
@@ -762,9 +764,22 @@ CT_SaveLocal()
if [ "${CT_SAVE_TARBALLS}" = "y" ]; then
CT_DoLog EXTRA "Saving '${basename}' to local storage"
# The file may already exist if downloads are forced: remove it first
- CT_DoExecLog ALL rm -f "${CT_LOCAL_TARBALLS_DIR}/${basename}"
- CT_DoExecLog ALL mv -f "${file}" "${CT_LOCAL_TARBALLS_DIR}"
- CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${basename}" "${file}"
+ if ! CT_DoExecLog ALL rm -f "${CT_LOCAL_TARBALLS_DIR}/${basename}"; then
+ return 1
+ fi
+ if ! CT_DoExecLog ALL mv -f "${file}" "${CT_LOCAL_TARBALLS_DIR}"; then
+ # Move may have failed if the local tarball storage is on a different
+ # filesystem. Fallback to copy+delete.
+ if ! CT_DoExecLog ALL cp -f "${file}" "${CT_LOCAL_TARBALLS_DIR}"; then
+ return 1
+ fi
+ if ! CT_DoExecLog ALL rm -f "${file}"; then
+ return 1
+ fi
+ fi
+ if ! CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${basename}" "${file}"; then
+ return 1
+ fi
fi
}
@@ -887,7 +902,12 @@ CT_DoVerifySignature()
CT_Popd
# If we get here, verification succeeded.
- CT_SaveLocal "${CT_TARBALLS_DIR}/${sigfile}${ext}"
+ if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${sigfile}${ext}"; then
+ CT_Popd
+ return 1
+ fi
+
+ return 0
}
# Download the file from one of the URLs passed as argument
@@ -972,7 +992,9 @@ CT_GetFile()
CT_DoExecLog ALL rm "${CT_TARBALLS_DIR}/${basename}${ext}"
return 1
fi
- CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}${ext}"
+ if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}${ext}"; then
+ return 1
+ fi
return 0
fi
done
@@ -2031,7 +2053,7 @@ CT_DoFetch()
if [ "${CT_FORBID_DOWNLOAD}" = "y" ]; then
CT_DoLog WARN "Downloads forbidden, not trying ${devel_vcs} retrieval"
- return 1
+ CT_Abort "${pkg_name}: cannot check out"
fi
CT_DoLog EXTRA "Checking out '${basename}' (${devel_vcs} ${devel_url}${devel_branch:+, branch ${devel_branch}}${devel_revision:+, revision ${devel_revision}})"
@@ -2046,7 +2068,9 @@ CT_DoFetch()
CT_DoExecLog ALL mv "${pkg_name}${devel_subdir:+/${devel_subdir}}" "${basename}"
CT_DoExecLog ALL tar cjf "${CT_TARBALLS_DIR}/${basename}.tar.bz2" "${basename}"
- CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}.tar.bz2"
+ if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}.tar.bz2"; then
+ CT_Abort "${pkg_name}: failed to save to local storage"
+ fi
CT_Popd
CT_DoExecLog ALL rm -rf "${tmp_dir}"