43 lines
954 B
Bash
43 lines
954 B
Bash
changes=$(uci changes)
|
|
|
|
if test -n "${changes}"
|
|
then
|
|
echo 'Uncommited UCI changes were found on the target:'
|
|
printf '%s\n\n' "${changes}"
|
|
echo 'This can be caused by manual changes or due to a previous failed run.'
|
|
echo 'Please investigate the situation, revert or commit the changes, and try again.'
|
|
exit 1
|
|
fi >&2
|
|
|
|
check_errors() {
|
|
# reads stdin and forwards non-empty lines to stderr.
|
|
# returns 0 if stdin is empty, else 1.
|
|
! grep -e . >&2
|
|
}
|
|
|
|
commit() {
|
|
uci commit
|
|
}
|
|
|
|
rollback() {
|
|
printf '\nAn error occurred when trying to commit UCI transaction!\n' >&2
|
|
|
|
uci changes \
|
|
| sed -e 's/^-//' -e 's/\..*\$//' \
|
|
| sort -u \
|
|
| while read -r _package
|
|
do
|
|
uci revert "${_package}"
|
|
echo "${_package}" # for logging
|
|
done \
|
|
| awk '
|
|
BEGIN { printf "Reverted changes in: " }
|
|
{ printf "%s%s", (FNR > 1 ? ", " : ""), $0 }
|
|
END { printf "\n" }' >&2
|
|
|
|
return 1
|
|
}
|
|
|
|
uci_apply() {
|
|
uci batch 2>&1 | check_errors && commit || rollback
|
|
}
|