blob: 536b3318573d8b5595450174c990fd9b1c420715 [file] [log] [blame]
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (c) 2024 Linaro Limited
#
# Usage: from the top level U-Boot source tree, run:
# $ ./tools/update-subtree.sh pull <subtree-name> <release-tag>
# Or:
# $ ./tools/update-subtree.sh pick <subtree-name> <commit-id>
#
# The script will pull changes from subtree repo into U-Boot.
# It will automatically create a squash/merge commit listing the commits
# imported.
set -e
print_usage() {
echo "usage: $0 <op> <subtree-name> <ref>"
echo " <op> pull or pick"
echo " <subtree-name> mbedtls or dts or lwip"
echo " <ref> release tag [pull] or commit id [pick]"
}
if [ $# -ne 3 ]; then
print_usage
exit 1
fi
op=$1
subtree_name=$2
ref=$3
set_params() {
case "$subtree_name" in
mbedtls)
path=lib/mbedtls/external/mbedtls
repo_url=https://github.com/Mbed-TLS/mbedtls.git
remote_name="mbedtls_upstream"
;;
dts)
path=dts/upstream
repo_url=https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git
remote_name="devicetree-rebasing"
;;
lwip)
path=lib/lwip/lwip
repo_url=https://git.savannah.gnu.org/git/lwip.git
remote_name="lwip_upstream"
;;
*)
echo "Invalid subtree name: $subtree_name"
print_usage
exit 1
esac
}
set_params
merge_commit_msg=$(cat << EOF
Subtree merge tag '$ref' of $subtree_name repo [1] into $path
[1] $repo_url
EOF
)
remote_add_and_fetch() {
if [ -z "$(git remote get-url $remote_name 2>/dev/null)" ]; then
echo "Warning: Script automatically adds new git remote via:"
echo " git remote add $remote_name \\"
echo " $repo_url"
git remote add $remote_name $repo_url
fi
git fetch $remote_name master
}
if [ "$op" = "pull" ]; then
remote_add_and_fetch
git subtree pull --prefix $path $remote_name "$ref" --squash -m "$merge_commit_msg"
elif [ "$op" = "pick" ]; then
remote_add_and_fetch
git cherry-pick -x --strategy=subtree -Xsubtree=$path/ "$ref"
else
print_usage
exit 1
fi