#!/bin/bash

# Options default values
branch="origin/master"
filterRegex='^.*\.php$'
baseDir="."

# Functions
function usage 
{
	echo "Lists files from commits that have not be merged into target branch."
	echo
	echo "USAGE: git-needsreview [-b BRANCH] [-f REGEX] [-d BASEDIR]"
	echo
	echo "OPTIONS:"
	echo "  -b BRANCH Target branch (default: $branch)"
	echo "  -f REGEX Regex filter (default: $filterRegex)"
	echo "  -d BASEDIR Base directory for files (default: $baseDir)"
}

function listFiles
{
	# Function parameters
	branch=$1
	filterRegex=$2
	baseDir=$3
	
	filesNeedReview=""
	for commitId in `git cherry -v $branch | cut -d ' ' -f 2 | xargs`
	do	
		files=`git diff --name-only $commitId $commitId~1`
		for file in $files
		do
			if [ -f $baseDir/$file ]
			then
				filesNeedReview="${filesNeedReview}
${file}"
			fi
		done
	done
	echo $filesNeedReview | tr " " "\n" | sort -u | uniq -u | grep $filterRegex | xargs | sed 's/ /,/g'
}

# Parse options
while getopts "hf:b:d:" opt
do
	case $opt in
		f)
			filterRegex=$OPTARG
			;;
		b)
			branch=$OPTARG
			;;
		d)
			baseDir=$OPTARG
			;;
		h)
			usage
			exit 1
			;;
		\?)
			usage
			exit 1x
			;;
	esac
done

# List files
listFiles $branch $filterRegex $baseDir

exit 0
