Lakka-LibreELEC/tools/checkunpack
2019-10-25 02:25:11 +01:00

96 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
. ./config/options ""
MD5SUM="$(echo ${BUILD} | md5sum | awk '{ print $1 }')"
RESTART_FILE=/tmp/checkunpack.progress.${MD5SUM}
usage() {
cat <<EOF
Usage: $0 [-f "regex"] [-c] [-v] [-S] [-h]
-f regex Filter based on regex, eg. -f "RTL.*|^kodi-" would match all
Realtek drivers and any package beginning with kodi-.
Using a filter ignores any existing progress file.
-c Remove restartable progress file at beginning of this run
-v Verbose output, view failed output from scripts/unpack
-S Display skipped/ignored packages
-h This help message
By default previously processed packages that unpacked successfully will be skipped,
unless their stamp has been subsequently modified. Use -c to ignore any previous
progress, and (re-)process every package again.
Current progress file: ${RESTART_FILE}
EOF
exit
}
FILTER="."
RMPROGRESS="no"
VERBOSE="no"
SHOW_SKIPPED="no"
USING_FILTER="no"
while getopts "f:cvSh" opt; do
case ${opt} in
f) FILTER="${OPTARG}"; USING_FILTER="yes";;
c) RMPROGRESS="yes";;
v) VERBOSE="yes";;
S) SHOW_SKIPPED="yes";;
h) usage;;
*) usage;;
esac
done
TMP_FILE=$(mktemp)
trap "rm -f ${TMP_FILE}" EXIT
[ "${RMPROGRESS}" = "yes" ] && rm -f "${RESTART_FILE}"
TXRED="$(tput setaf 1 bold)"
TXGREEN="$(tput setaf 2 bold)"
TXRESET="$(tput sgr0)"
SKIPPED="$(cut -d' ' -f1 ${RESTART_FILE} 2>/dev/null | sort -u | wc -l || true)"
[ "${USING_FILTER}" = "no" -a "${SKIPPED:-0}" -ne 0 ] && echo -e "WARNING: skipping ${SKIPPED} packages.\n" >&2
for pkg_name in $(get_all_package_names | grep -E "${FILTER}"); do
stamp=$(source_package ${pkg_name}; calculate_stamp)
if [ -z "${stamp}" ]; then
[ "${SHOW_SKIPPED}" = "yes" ] && printf "Checking: %-40s IGNORED\n" "${pkg_name}"
continue
fi
if [ "${USING_FILTER}" = "no" ] && grep -qE "^${pkg_name} ${stamp}$" ${RESTART_FILE} 2>/dev/null; then
[ "${SHOW_SKIPPED}" = "yes" ] && printf "Checking: %-40s SKIPPED\n" "${pkg_name}"
continue
fi
printf "Checking: %-40s" "${pkg_name}"
rm -rf "${BUILD}/"* ${BUILD}/.unpack
OUTPUT="$(scripts/unpack "${pkg_name}" 2>&1)" && res=0 || res=1
if [ ${res} -eq 0 ]; then
echo " ${TXGREEN}OK${TXRESET}"
[ "${USING_FILTER}" = "no" ] && echo "${pkg_name} ${stamp}" >>${RESTART_FILE}
else
echo " ${TXRED}FAILED${TXRESET}"
echo "${pkg_name}" >>${TMP_FILE}
[ "${VERBOSE}" = "yes" -a -n "${OUTPUT}" ] && echo "${OUTPUT}"
fi
rm -rf "${BUILD}/"* ${BUILD}/.unpack
done
if [ -s "${TMP_FILE}" ]; then
echo
echo "The following packages failed to unpack:"
cat ${TMP_FILE}
exit 1
fi