#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano.
#

USAGE='[-v] <upstream> [<head>]'
LONG_USAGE='             __*__*__*__*__> <upstream>
            /
  fork-point
            \__+__+__+__+__+__+__+__> <head>

Each commit between the fork-point and <head> is examined, and
compared against the change each commit between the fork-point and
<upstream> introduces.  If the change seems to be in the upstream,
it is shown on the standard output with prefix "+".  Otherwise
it is shown with prefix "-".'
. git-sh-setup

case "$1" in -v) verbose=t; shift ;; esac 

case "$#,$1" in
1,*..*)
    upstream=$(expr "$1" : '\(.*\)\.\.') ours=$(expr "$1" : '.*\.\.\(.*\)$')
    set x "$upstream" "$ours"
    shift ;;
esac

case "$#" in
1) upstream=`git-rev-parse --verify "$1"` &&
   ours=`git-rev-parse --verify HEAD` || exit
   ;;
2) upstream=`git-rev-parse --verify "$1"` &&
   ours=`git-rev-parse --verify "$2"` || exit
   ;;
*) usage ;;
esac

# Note that these list commits in reverse order;
# not that the order in inup matters...
inup=`git-rev-list ^$ours $upstream` &&
ours=`git-rev-list $ours ^$upstream` || exit

tmp=.cherry-tmp$$
patch=$tmp-patch
mkdir $patch
trap "rm -rf $tmp-*" 0 1 2 3 15

_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"

for c in $inup
do
	git-diff-tree -p $c
done | git-patch-id |
while read id name
do
	echo $name >>$patch/$id
done

LF='
'

O=
for c in $ours
do
	set x `git-diff-tree -p $c | git-patch-id`
	if test "$2" != ""
	then
		if test -f "$patch/$2"
		then
			sign=-
		else
			sign=+
		fi
		case "$verbose" in
		t)
			c=$(git-rev-list --pretty=oneline --max-count=1 $c)
		esac
		case "$O" in
		'')	O="$sign $c" ;;
		*)	O="$sign $c$LF$O" ;;
		esac
	fi
done
case "$O" in
'') ;;
*)  echo "$O" ;;
esac
