#!/bin/bash

read -r -a TARGET_DIRS <<< "$*"

cat ${GITHUB_EVENT_PATH}
COMMITS=$(jq '.pull_request.commits' "${GITHUB_EVENT_PATH}")
echo "COMMITS: ${COMMITS}"

git --version
git rev-parse --abbrev-ref HEAD

if [[ $COMMITS -gt 0 ]]; then
    FIRST_COMMIT=$(git rev-parse HEAD~${COMMITS} 2> /dev/null)
    if [ $? -eq 0 ]; then
        CHANGED_DIRS=$(git diff --name-only $FIRST_COMMIT | awk -F "/*[^/]*/*$" '{ print ($1 == "" ? "." : $1); }' | sort | uniq)
        echo "CHANGED_DIRS are : ${CHANGED_DIRS}"

        found_changed_dir_not_in_target_dirs="no"
        for changed_dir in ${CHANGED_DIRS}
        do
            matched="no"
            for target_dir in "${TARGET_DIRS[@]}"
            do
                if [[ ${changed_dir} == "${target_dir}"* ]]; then
                    matched="yes"
                    break
                fi
            done
            if [[ ${matched} == "no" ]]; then
                found_changed_dir_not_in_target_dirs="yes"
                break
            fi
        done

        if [[ ${found_changed_dir_not_in_target_dirs} == "yes" ]]; then
            echo "Changes ${CHANGED_DIRS} not only in $*, setting 'changed_only' to 'no'"
            echo ::set-output name=changed_only::no
        else
            echo "Changes ${CHANGED_DIRS} only in $*, setting 'changed_only' to 'yes'"
            echo ::set-output name=changed_only::yes
        fi
    else
        echo "Cannot find first commit. Setting 'changed_only' to 'no'."
        echo ::set-output name=changed_only::no
    fi
else
    echo "Cannot find number of commits in pull_request. Setting 'changed_only' to 'no'."
    echo ::set-output name=changed_only::no
fi