#! /bin/bash
# Run given scripted change and commit the changes.
#
# Assumes that the current directory is the top-level directory of
# the Android source code, created with 'repo init', and that 'repo'
# tool is on the path.
# For each of the given repo git repositories:
# 1. Checks there are neither modified not untracked files in it.
# 2. Runs the given script, which is supposed to change some files
# 3. Creates a development branch if necessary
# 4. Commits changed files. The commit message is extracted from the
#    script and contains all the lines in it starting with ##CL
#
# As an example, running
#   build/bazel/mk2rbc/apply_scripted_change.sh build/bazel/mk2rbc/replace_is_board_platform.sh hardware/qcom/media
# replaces the old is-board-platform calls with the new is-board-platform2 calls.

set -eu

function die() { format=$1; shift; printf "$format\n" $@; exit 1; }
function usage() { die "Usage: %s script git-repo ..."  ${0##*/}; }

(($#>=2)) || usage
declare -r script=$(realpath $1); shift
rc=0

[[ -x $script ]] || die "%s is not an executable script" $script
[[ -d .repo ]] || die "$PWD is not an Android source tree (.repo/ is missing)"
declare -r bugid="$(sed -nr 's/^##CL (Bug:|Fixes:) +([0-9]+)$/\2/p' $script)"
[[ -n "$bugid" ]] || die "$script contains neither '##CL Bug: ' nor '##CL Fixes: 'tag"


for gr in $@; do
    [[  -d $gr/.git ]] || { echo $gr is not a Git directory; rc=1; continue; }
    out=$(git -C $gr status --porcelain --untracked-files=no) || { die "so skipping $gr because of the above"; rc=1; continue; }
    [[ -z "$out" ]] || { echo  $gr contains uncommitted changes:; echo "$out" >&2; rc=1; continue; }
    (cd $gr && $script)
    modified="$(git -C $gr status --porcelain | sed -nr 's/^ M (.*)/\1/p')"
    [[ -n "$modified" ]] || { echo no files changed in $gr; continue; }
    [[ -z "$(repo status -q $gr 2>/dev/null)" ]] || repo start b$bugid $gr
    git -C $gr add $modified
    git -C $gr commit -q \
      -F <(sed -nr 's/^##CL *//p' $script; echo -e '\nThis change has been generated by the following script:\n\n```'; grep -vP '^##CL' $script; echo '```')
done

exit $rc
