summaryrefslogtreecommitdiffhomepage
path: root/subr.rtl/rtl_state.subr
diff options
context:
space:
mode:
Diffstat (limited to 'subr.rtl/rtl_state.subr')
-rw-r--r--subr.rtl/rtl_state.subr26
1 files changed, 16 insertions, 10 deletions
diff --git a/subr.rtl/rtl_state.subr b/subr.rtl/rtl_state.subr
index 203ec520..da091e9c 100644
--- a/subr.rtl/rtl_state.subr
+++ b/subr.rtl/rtl_state.subr
@@ -23,16 +23,22 @@ rtl_state_set() {
};
rtl_state_test() {
- local _workdir="${1}" _pkg_name="${2}" _build_step="${3}" _restart_at="${4:-}" _done_fname="";
- _done_fname="${_workdir}/.${_pkg_name}.${_build_step}";
- if [ -z "${_restart_at}" ]\
- || [ "${_restart_at}" = "LAST" ]; then
- rtl_fileop test "${_done_fname}";
- elif [ "${_restart_at}" = "ALL" ]; then
- return 1;
- else
- ! rtl_lmatch "${_restart_at}" "${_build_step}" ",";
- fi;
+ local _workdir="${1}" _pkg_name="${2}" _build_steps="${3}" \
+ _restart_at="${4:-}" _build_step="" _done_fname="" \
+ IFS="," _rc=0;
+
+ for _build_step in ${_build_steps}; do
+ _done_fname="${_workdir}/.${_pkg_name}.${_build_step}";
+ if [ "${_restart_at:+1}" != 1 ]\
+ || [ "${_restart_at}" = "LAST" ]; then
+ rtl_fileop test "${_done_fname}"; _rc="${?}";
+ elif [ "${_restart_at}" = "ALL" ]; then
+ _rc=1;
+ else
+ rtl_lmatch "${_restart_at}" "${_build_step}" ",";
+ _rc=$((${?} ? 0 : 1));
+ fi; [ "${_rc}" -eq 0 ] && break;
+ done; return "${_rc}";
};
# vim:filetype=sh