scripts/update-source-revision: Add script to auto-update SRCREV
And a few changes to make it work properly. id:418214
This commit is contained in:
parent
d457ad2c8b
commit
96f6f84524
|
|
@ -26,3 +26,8 @@ PV = "${LINUX_VERSION}+git${SRCPV}"
|
|||
COMPATIBLE_MACHINE = "netmodule-hw*"
|
||||
|
||||
KERNEL_FEATURES ?= "initrd.scc"
|
||||
|
||||
|
||||
# This is set by linux-yocto but we need to remove it in
|
||||
# order to automatically update the SRCREV
|
||||
unset RECIPE_NO_UPDATE_REASON
|
||||
|
|
|
|||
|
|
@ -0,0 +1,108 @@
|
|||
#!/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
|
||||
Loading…
Reference in New Issue