| #!/bin/sh |
| # Copyright 2005, Ryan Anderson <ryan@michonline.com> |
| # |
| # This file is licensed under the GPL v2, or a later version |
| # at the discretion of Linus Torvalds. |
| |
| USAGE='<start> <url> [<end>]' |
| LONG_USAGE='Summarizes the changes between two commits to the standard output, |
| and includes the given URL in the generated summary.' |
| SUBDIRECTORY_OK='Yes' |
| OPTIONS_KEEPDASHDASH= |
| OPTIONS_SPEC='git request-pull [options] start url [end] |
| -- |
| p show patch text as well |
| ' |
| |
| . git-sh-setup |
| |
| GIT_PAGER= |
| export GIT_PAGER |
| |
| patch= |
| while case "$#" in 0) break ;; esac |
| do |
| case "$1" in |
| -p) |
| patch=-p ;; |
| --) |
| shift; break ;; |
| -*) |
| usage ;; |
| *) |
| break ;; |
| esac |
| shift |
| done |
| |
| base=$1 |
| url=$2 |
| head=${3-HEAD} |
| |
| [ "$base" ] || usage |
| [ "$url" ] || usage |
| |
| baserev=`git rev-parse --verify "$base"^0` && |
| headrev=`git rev-parse --verify "$head"^0` || exit |
| |
| merge_base=`git merge-base $baserev $headrev` || |
| die "fatal: No commits in common between $base and $head" |
| |
| branch=$(git ls-remote "$url" \ |
| | sed -n -e "/^$headrev refs.heads./{ |
| s/^.* refs.heads.// |
| p |
| q |
| }") |
| url=$(git ls-remote --get-url "$url") |
| if [ -z "$branch" ]; then |
| echo "warn: No branch of $url is at:" >&2 |
| git log --max-count=1 --pretty='tformat:warn: %h: %s' $headrev >&2 |
| echo "warn: Are you sure you pushed $head there?" >&2 |
| echo >&2 |
| echo >&2 |
| branch=..BRANCH.NOT.VERIFIED.. |
| status=1 |
| fi |
| |
| git show -s --format='The following changes since commit %H: |
| |
| %s (%ci) |
| |
| are available in the git repository at:' $baserev && |
| echo " $url $branch" && |
| echo && |
| |
| git shortlog ^$baserev $headrev && |
| git diff -M --stat --summary $patch $merge_base..$headrev || exit |
| exit $status |