mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
tools: Add a script to find changes in linux-firmware
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
139
tools/find-linux-firmware-changes
Executable file
139
tools/find-linux-firmware-changes
Executable file
@@ -0,0 +1,139 @@
|
||||
#!/bin/bash
|
||||
|
||||
URL="https://git.ipfire.org/?p=thirdparty/linux-firmware.git;a=snapshot;h=TAG;sf=tgz"
|
||||
|
||||
download() {
|
||||
local version="${1}"
|
||||
local install="${2}"
|
||||
local target
|
||||
|
||||
local url="${URL/TAG/${version}}"
|
||||
|
||||
echo "Downloading ${version}..."
|
||||
|
||||
# Download and extract
|
||||
if ! curl --silent "${url}" | tar xz -C "${tmp}"; then
|
||||
echo "${0}: Could not download ${version}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Installing ${version}..."
|
||||
|
||||
# Install
|
||||
pushd "linux-firmware-${version}" &>/dev/null
|
||||
|
||||
case "${version}" in
|
||||
2023*)
|
||||
target="install"
|
||||
;;
|
||||
*)
|
||||
target="install-nodedup"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Install to a new directory
|
||||
if ! make "${target}" DESTDIR="${install}"; then
|
||||
echo "${0}: Could not install ${version}" >&2
|
||||
popd &>/dev/null
|
||||
return 1
|
||||
fi
|
||||
|
||||
popd &>/dev/null
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
compare() {
|
||||
local removed_files=()
|
||||
local changed_files=()
|
||||
|
||||
local line
|
||||
while read -r line; do
|
||||
# Find changed files
|
||||
if [[ ${line} =~ ^Files\ OLD/(.*)\ and ]]; then
|
||||
changed_files+=( "${BASH_REMATCH[1]}" )
|
||||
|
||||
elif [[ ${line} =~ ^Only\ in\ NEW/(.*):\ (.*)$ ]]; then
|
||||
changed_files+=( "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" )
|
||||
|
||||
elif [[ ${line} =~ ^Only\ in\ OLD/(.*):\ (.*)$ ]]; then
|
||||
removed_files+=( "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" )
|
||||
|
||||
# Handle unknown lines
|
||||
else
|
||||
echo "Unknown line: ${line}" >&2
|
||||
fi
|
||||
done <<< "$(diff --recursive --brief OLD NEW)"
|
||||
|
||||
local file
|
||||
|
||||
# List all changed files
|
||||
if [ "${#changed_files[@]}" -gt 0 ]; then
|
||||
echo "# Changed files"
|
||||
for file in "${changed_files[@]}"; do
|
||||
echo "${file}"
|
||||
done
|
||||
|
||||
echo # newline
|
||||
fi
|
||||
|
||||
# List all removed files
|
||||
if [ "${#removed_files[@]}" -gt 0 ]; then
|
||||
echo "# Removed files"
|
||||
echo "rm -vrf \\"
|
||||
|
||||
for file in "${removed_files[@]}"; do
|
||||
echo " /${file} \\"
|
||||
done
|
||||
fi
|
||||
|
||||
# Total size
|
||||
{
|
||||
pushd NEW &>/dev/null
|
||||
|
||||
du -csh "${changed_files[@]}" | tail -n1
|
||||
|
||||
popd &>/dev/null
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
run() {
|
||||
# Download the old and new versions
|
||||
download "${version_old}" "${tmp}/OLD" || return $?
|
||||
download "${version_new}" "${tmp}/NEW" || return $?
|
||||
|
||||
compare || return $?
|
||||
}
|
||||
|
||||
main() {
|
||||
local version_old="${1}"
|
||||
local version_new="${2}"
|
||||
|
||||
local r=0
|
||||
|
||||
# Check if we have enough arguments
|
||||
if [ -z "${version_old}" -o -z "${version_new}" ]; then
|
||||
echo "${0}: An old and a new version are required" >&2
|
||||
return 2
|
||||
fi
|
||||
|
||||
# Create a temporary directory
|
||||
local tmp="$(mktemp -d)"
|
||||
|
||||
# Change into the directory
|
||||
pushd "${tmp}" &>/dev/null
|
||||
|
||||
# Run the operation...
|
||||
run || r="${?}"
|
||||
|
||||
popd &>/dev/null
|
||||
|
||||
# Remove the temporary directory
|
||||
rm -rf "${tmp}"
|
||||
|
||||
return "${r}"
|
||||
}
|
||||
|
||||
main "$@" || exit $?
|
||||
Reference in New Issue
Block a user