#! /bin/bash

gitismerge () {
    local sha=$1
    msha=$(git rev-list --merges "${sha}"..."${sha}"~1)
    # If commit returned is the one passed it, it is a merge
    [ -z "$msha" ] && return 1
    return 0
}

if [ -z "$1" ]; then

    echo "Usage:"
    echo "git-changed commit [commit 2]"
    echo ""
    echo "If one commit is provided:"
    echo "  Return a list of all files changed in that commit"
    echo ""
    echo "If two commits are provided:"
    echo "  Return a list of all files changed between commits"

    exit 0
fi

# If a merge, return only changes in that merge
if [ -z "$2" ] && gitismerge "$1"; then
    git diff-tree --no-commit-id --name-only "$1"
else
    git diff --no-commit-id --name-only "$1" "$2"
fi