diff options
author | Leah Rowe <leah@libreboot.org> | 2023-09-01 01:33:17 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2023-09-01 01:36:34 +0100 |
commit | 12b33eb8c18b37546599feec908b9acd829f0029 (patch) | |
tree | e2d20388335eb646f1b1057597943bf609b1d8aa /lbmk | |
parent | 225e2609fa758a366238afcb57ab6581496e0399 (diff) |
lbmk script: always clean up /tmp files
export TMPDIR to scripts, and handle it in a way that
we know lbmk set it
delete it at the end of the parent process, but not child
processes; when the lbmk script calls itself, child processes
will not delete the tmp directory.
some scripts in lbmk weren't cleaning up the tmpfiles they
made, and they still don't, but this mitigates that.
now in follow-up commits, i can start cleaning up those
scripts too.
not handled by this patch:
if the user cancels lbmk (ctrl+c), the tmp directory will
still be there. this too will be handled, in subsequent
patches
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'lbmk')
-rwxr-xr-x | lbmk | 72 |
1 files changed, 57 insertions, 15 deletions
@@ -26,6 +26,26 @@ set -u -e . "include/err.sh" +tmpdir="" +tmpdir_was_set="y" +set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n" +if [ "${tmpdir_was_set}" = "y" ]; then + tmpdir="${TMPDIR##*/}" + tmpdir="${TMPDIR%_*}" + if [ "${tmpdir}" = "lbmk" ]; then + tmpdir="" + tmpdir_was_set="n" + fi +fi +if [ "${tmpdir_was_set}" = "n" ]; then + export TMPDIR="/tmp" + tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)" + export TMPDIR="${tmpdir}" +else + export TMPDIR="${TMPDIR}" +fi +tmpdir="${TMPDIR}" + projectname="$(cat projectname)" buildpath="" mode="" @@ -34,10 +54,10 @@ option="" main() { id -u 1>/dev/null 2>/dev/null || \ - err "cannot ascertain user id" + fail "cannot ascertain user id" - [ "${0##*/}" = "lbmk" ] && err "Don't run this script directly." - [ $# -lt 1 ] && err "Too few arguments. Try: ${0} help" + [ "${0##*/}" = "lbmk" ] && fail "Don't run this script directly." + [ $# -lt 1 ] && fail "Too few arguments. Try: ${0} help" mode="${1}" if [ "${mode}" = "dependencies" ]; then @@ -46,13 +66,13 @@ main() printf "Look at files under resources/dependencies/\n" \ 1>&2 printf "Example: ./build dependencies debian\n" 1>&2 - err "target not specified" + fail "target not specified" fi - install_dependencies $@ || err "Could not install dependencies" - exit 0 + install_dependencies $@ || fail "Could not install dependencies" + lbmk_exit 0 fi if [ "$(id -u)" = "0" ]; then - err "running this command as root is not permitted" + fail "running this command as root is not permitted" fi buildpath="./script/${0##*/}" @@ -62,13 +82,13 @@ main() exit 0 [ $# -lt 2 ] && usage ${0} && exit 1 - ./checkgit || err "Please read: https://libreboot.org/docs/build/" + ./checkgit || fail "Please read: https://libreboot.org/docs/build/" option="${2}" shift 2 ./script/misc/versioncheck || \ - err "Cannot check lbmk version" + fail "Cannot check lbmk version" case "${option}" in list) @@ -77,31 +97,33 @@ main() for option in $(./build command options "${buildpath}/${mode}") do "${buildpath}/${mode}/${option}" $@ || \ - err "script fail: ${buildpath}/${mode}/${option} $@" + fail "script fail: ${buildpath}/${mode}/${option} $@" done ;; *) if [ ! -d "${buildpath}/${mode}" ]; then usage $0 - err "Invalid mode '${mode}'. Run: ${0} help" + fail "Invalid mode '${mode}'. Run: ${0} help" elif [ ! -f "${buildpath}/${mode}/${option}" ]; then usage $0 printf "Invalid option for '%s'." ${mode} - err "Run: ${0} ${mode} list'." + fail "Run: ${0} ${mode} list'." fi - "${buildpath}/${mode}/${option}" $@ || err "lbmk error" + "${buildpath}/${mode}/${option}" $@ || fail "lbmk error" esac + + lbmk_exit 0 } install_dependencies() { - [ -f "resources/dependencies/${2}" ] || err "Unsupported target" + [ -f "resources/dependencies/${2}" ] || fail "Unsupported target" aur_notice="" . "resources/dependencies/${2}" ${pkg_add} ${pkglist} || \ - err "install_dependencies: Error installing dependencies" + fail "install_dependencies: Error installing dependencies" [ "${aur_notice}" = "" ] || \ printf "You must install AUR packages: %s\n" "${aur_notice}" 1>&2 } @@ -124,4 +146,24 @@ usage() EOF } +lbmk_exit() +{ + tmp_cleanup || err "could not remove tmpdir on lbmk exit: ${tmpdir}" + exit $1 +} + +fail() +{ + tmp_cleanup || printf "WARNING: could not remove tmpdir: %s\n" \ + "${tmpdir}" 1>&2 + err "${1}" +} + +tmp_cleanup() +{ + if [ "${tmpdir_was_set}" = "n" ]; then + rm -Rf "${tmpdir}" || return 1 + fi +} + main $@ |