#!/bin/bash
# Copyright 2025 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

#### CATEGORY=Other
### Create a pair of changes that will be submitted atomically. It will modify
### the commit in fuchsia.git and vendor/google, and make them depend on each
### other.

## usage: fx atomic-commit

set -o errexit

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh
fx-config-read

function update_footer() {
    local repo_dir=$1
    local dependency_id=$2
    (
        cd "${repo_dir}" || exit 1
        local message=$(git log -1 --pretty=%B)
        local new_footer="""Depends-on: ${dependency_id}
Change-Id:"""

        local modified_message=${message/"Change-Id:"/${new_footer}}
        git commit --amend -m "${modified_message}"
        git push origin
    )
}

function print_usage_guidance() {
    echo
    echo "To create atomic-commit, make sure your changes are on the top of"
    echo "commit stacks in both fuchsia and vendor/google."
    echo
    echo "--- Current top commit in fuchsia.git ---"
    echo
    echo $(cd $FUCHSIA_DIR && git log -1 --pretty=medium)
    echo
    echo "--- Current top commit in vendor/google ---"
    echo
    echo $(cd ${FUCHSIA_DIR}/vendor/google && git log -1 --pretty=medium)
    echo
    read -p "Does this look correct to you?[y|n]" value

    if [[ "${value}" != "y" && "${value}" != "Y" ]]; then
        exit
    fi
}

function print_tip() {
    echo
    echo "Your changes are raised. Please enable Auto-Submit on both CLs"
    echo "to enable atomic-commit."
    echo
}

main() {
    print_usage_guidance

    local change_id_fuchsia=$(
        cd "${FUCHSIA_DIR}"
        git log -1 | grep "Change-Id" | sed "s/Change-Id://g" | xargs
    )
    local change_id_vendor_google=$(
        cd "${FUCHSIA_DIR}/vendor/google"
        git log -1 | grep "Change-Id" | sed "s/Change-Id://g" | xargs
    )

    update_footer "${FUCHSIA_DIR}/vendor/google" "fuchsia:${change_id_fuchsia}"
    update_footer "${FUCHSIA_DIR}" "turquoise-internal:${change_id_vendor_google}"

    print_tip
}

main "$@"
