netmodule-wireless-linux/scripts/update-source-revisions.sh

109 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# This script will look for git recipes in our own layers and
# automatically check if there are new upstream commit in order
# to update the SRCREV entry in the recipe.
#
# For it to work properly, UPSTREAM_CHECK_COMMITS = "1" must be set
# in your local.conf (see our template)
#
# This script does not commit anything, please review the changes
# before committing and pushing.
set -euo pipefail
ABSOLUTE_PATH="$(readlink -f "$0")"
SCRIPTS_DIR=$(dirname "${ABSOLUTE_PATH}")
YOCTO_DIR=$(readlink -f "${SCRIPTS_DIR}/../")
updatable_recipes=()
updatable_packages=()
get_updatable_recipes()
{
all_recipes=$(find "${YOCTO_DIR}"/layers -name "*.bb")
for recipe in ${all_recipes}; do
if grep -q SRCREV "${recipe}"; then
updatable_recipes+=("${recipe}")
fi
done
}
convert_recipes_to_package_names()
{
for file in "${updatable_recipes[@]}"; do
filename=$(basename "${file}")
package_name=${filename/_git\.bb/}
updatable_packages+=("${package_name}")
done
}
get_new_commit_lines()
{
# Load build environment (disable flags to avoid problems while sourcing
set +eu
export BB_ENV_PASSTHROUGH_ADDITIONS="UPSTREAM_CHECK_COMMITS"
export MACHINE=netmodule-hw20
export UPSTREAM_CHECK_COMMITS="1"
# shellcheck source=/dev/null
source "${YOCTO_DIR}"/nwl-init-build-env >/dev/null
set -eu
# the relevant output is on stderr
if ! upgrade_status=$(devtool check-upgrade-status "${updatable_packages[@]}" 2>&1 >/dev/null);
then
echo "devtool failed"
exit 1
fi
if ! new_commit_lines=$(grep "new commits" <<< "${upgrade_status}")
then
echo "Nothing to update"
exit 0
fi
}
get_bbfile_from_package()
{
package="${1}"
for file in "${updatable_recipes[@]}"; do
# The grepped output will be used by caller
if grep "${package}" <<< "${file}"; then
return
fi
done
}
get_updatable_recipes
#echo -e "Found bbfiles: \n" "${updatable_recipes[@]}\n"
convert_recipes_to_package_names
echo -e "Looking for updates for these packages: \n" "${updatable_packages[@]}" "\n"
get_new_commit_lines
echo -e "New commits: \n${new_commit_lines}\n"
echo "Starting to update files"
IFS=$'\n' # Read line by line instead of word by word
for line in ${new_commit_lines}; do
# Get package name (2nd word of the line)
package_name=$(cut -d " " -f 2 <<< "${line}")
# Convert to recipe filename
bbfile=$(get_bbfile_from_package "${package_name}")
relative_bbfile_path=$(realpath --relative-to="${YOCTO_DIR}" "${bbfile}")
# The commit is the last word of the line
newrev=$(grep --only-matching --extended-regexp '[^ ]+\s?$' <<< "${line}")
newrev=$(tr -d " " <<< "${newrev}")
echo "Updating ${relative_bbfile_path}"
echo "To ${newrev}"
echo
sed -i "s/^SRCREV.*/SRCREV = \"${newrev}\"/g" "${bbfile}"
done
exit 0