mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Brandon Casey](/assets/img/avatar_default.png)
The -e option causes the shell to exit immediately when a command exits with a non-zero exit status. This does not seem to cause a problem for Bash, but it does cause a problem for the Korn shell, like Solaris's xpg4/sh, whose unset utility returns non-zero if it is passed a variable name which was not previously set. When using xpg4/sh, git-request-pull exits while sourcing git-sh-setup since git-sh-setup tries to unset the CDPATH environment variable. When git-request-pull was originally written, it did not do any error checking and it used this shell feature to exit when an error occurred. This script now performs proper error checking and provides useful error messages, so this -e option appears to be merely a historical artifact and can be removed. Kudos to Jonathan Nieder for introducing t5150 which exercises the request-pull code path. Suggested-by: Brandon Casey <drafnel@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
80 lines
1.6 KiB
Bash
Executable file
80 lines
1.6 KiB
Bash
Executable file
#!/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-parse-remote
|
|
|
|
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=$(get_remote_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
|