#!/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 # Or: # $ ./tools/update-subtree.sh pick # # 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 " echo " pull or pick" echo " mbedtls or dts or lwip" echo " 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