Lakka-LibreELEC/tools/download-cleaner
Ian Leonard d4c3092e7a download-cleaner: be non-interactive while deleting
Signed-off-by: Ian Leonard <antonlacon@gmail.com>
2021-10-17 21:58:52 +00:00

138 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2018-2020 Ian Leonard (antonlacon@gmail.com)
#
# Scan through the given directory looking for out of date source packages.
# If a source tarball is found that is different from what is currently in
# tree, then print out the discovered files.
#
# If -d is passed, also delete obsolete files.
# If -f is passed, fetch updated source tarballs.
# If -b is passed, build a new SOURCES, populated from the old SOURCES
# Set NEW_SOURCES_DIR to customize the temp dir to use in building
# If -r is passed, replace the old SOURCES when finished building new SOURCES
set -e
. config/options ""
# default variables
DESTRUCTIVE_RUN="false"
FETCH_UPDATES="false"
PACKAGES_TO_UPDATE=()
BUILD_SOURCES="false"
REPLACE_OLD="false"
NEW_SOURCES="${NEW_SOURCES_DIR:-${SOURCES}.new}"
# helper functions
help(){
echo "Usage: ${0} [-hdfbr]"
echo "Set PROJECT, DEVICE and ARCH as required."
echo " -h this help"
echo " -d delete obsolete source packages (default no)"
echo " -f fetch updated source packages (default: no)"
echo " -b build new SOURCES content (default: no)"
echo " -r replace old SOURCES when rebuilding (default: no)"
}
# command line opts
while getopts hdfrb OPT; do
case "${OPT}" in
h)
help
exit 0
;;
d)
DESTRUCTIVE_RUN="true"
;;
f)
FETCH_UPDATES="true"
;;
b)
BUILD_SOURCES="true"
;;
r)
REPLACE_OLD="true"
;;
\?)
# error and output help on unknown
help
die
;;
esac
done
shift $((${OPTIND}-1))
# sanity checking
if [ ! -d "${SOURCES}" ]; then
die "error: ${SOURCES} is not a directory"
elif [ "${DESTRUCTIVE_RUN}" = "true" -a "${BUILD_SOURCES}" = "true" ]; then
die "error: options '-d' and '-b' are mutually exclusive"
fi
# main
# process files in SOURCES
for SOURCE_PACKAGE in $(find "${SOURCES}/" -mindepth 1 -type d); do
PACKAGE_NAME=$(basename "${SOURCE_PACKAGE}")
# check if package is still in the tree to selectively prune, or delete the dir
PACKAGE_DIR=$(get_pkg_directory "${PACKAGE_NAME}" || true)
if [ -n "${PACKAGE_DIR}" ]; then
PACKAGE_SOURCE_FILE=$(get_pkg_variable "${PACKAGE_NAME}" "PKG_SOURCE_NAME")
fi
# PACKAGE_DIR is null if not in tree, PACKAGE_SOURCE_FILE is null if PKG_ARCH mismatch
if [ -n "${PACKAGE_DIR}" -a -n "${PACKAGE_SOURCE_FILE}" ]; then
CUR_PACKAGE_FILE=$(basename "${PACKAGE_SOURCE_FILE}")
for FILE in $(find "${SOURCE_PACKAGE}/" -type f); do
# don't test auxilliary files
if [[ "${FILE}" = *.url ]] || [[ "${FILE}" = *.sha256 ]]; then
continue
fi
# obsolete file handling
if [ "${FILE}" != "${SOURCES}/${PACKAGE_NAME}/${CUR_PACKAGE_FILE}" ]; then
ls -1 "${FILE}"*
PACKAGES_TO_UPDATE+="${PACKAGE_NAME}"
if [ "${DESTRUCTIVE_RUN}" = "true" ]; then
rm -f "${FILE}"*
fi
# current file handling
elif [ "${BUILD_SOURCES}" = "true" ]; then
echo "Relocating ${PACKAGE_NAME} files..."
mkdir -p "${NEW_SOURCES}/${PACKAGE_NAME}"
mv "${FILE}"* "${NEW_SOURCES}/${PACKAGE_NAME}/"
fi
done
else
echo "info: ${PACKAGE_NAME} no longer in tree"
if [ "${DESTRUCTIVE_RUN}" = "true" ]; then
rm -rf "${SOURCE_PACKAGE}"
fi
fi
done
if [ "${BUILD_SOURCES}" = "true" -a "${REPLACE_OLD}" = "true" ]; then
rm -rf "${SOURCES}"
mv "${NEW_SOURCES}" "${SOURCES}"
fi
if [ "${FETCH_UPDATES}" = "true" ]; then
if "${BUILD_SOURCES}" = "true" -a "${REPLACE_OLD}" = "false" ]; then
SOURCES="${NEW_SOURCES}"
fi
for PACKAGE in "${PACKAGES_TO_UPDATE[@]}"; do
# scripts/get determines if tarball is present before downloading
SOURCES_DIR="${SOURCES}" "${SCRIPTS}/get" "${PACKAGE}"
done
fi
exit