mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 21:26:49 +00:00
Merge pull request #4996 from antonlacon/src-cleaner2
tools/download-cleaner: add new tool
This commit is contained in:
commit
bc3b040369
137
tools/download-cleaner
Executable file
137
tools/download-cleaner
Executable file
@ -0,0 +1,137 @@
|
||||
#!/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 "${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 -r "${SOURCE_PACKAGE}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${BUILD_SOURCES}" = "true" -a "${REPLACE_OLD}" = "true" ]; then
|
||||
rm -r "${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
|
Loading…
x
Reference in New Issue
Block a user