diff options
Diffstat (limited to 'git-request-pull.sh')
| -rwxr-xr-x | git-request-pull.sh | 87 | 
1 files changed, 60 insertions, 27 deletions
diff --git a/git-request-pull.sh b/git-request-pull.sh index fc080cc5e4..c6a5b7a6b3 100755 --- a/git-request-pull.sh +++ b/git-request-pull.sh @@ -35,44 +35,77 @@ do  	shift  done -base=$1 -url=$2 -head=${3-HEAD} +base=$1 url=$2 head=${3-HEAD} status=0 branch_name= -[ "$base" ] || usage -[ "$url" ] || usage +headref=$(git symbolic-ref -q "$head") +if git show-ref -q --verify "$headref" +then +	branch_name=${headref#refs/heads/} +	if test "z$branch_name" = "z$headref" || +		! git config "branch.$branch_name.description" >/dev/null +	then +		branch_name= +	fi +fi + +tag_name=$(git describe --exact "$head^0" 2>/dev/null) -baserev=`git rev-parse --verify "$base"^0` && -headrev=`git rev-parse --verify "$head"^0` || exit +test -n "$base" && test -n "$url" || usage +baserev=$(git rev-parse --verify "$base"^0) && +headrev=$(git rev-parse --verify "$head"^0) || exit -merge_base=`git merge-base $baserev $headrev` || +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 -	}") +find_matching_branch="/^$headrev	"'refs\/heads\//{ +	s/^.*	refs\/heads\/// +	p +	q +}' +branch=$(git ls-remote "$url" | sed -n -e "$find_matching_branch")  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 && +are available in the git repository at: +' $baserev && +echo "  $url${branch+ $branch}" && +git show -s --format=' +for you to fetch changes up to %H: + +  %s (%ci) + +----------------------------------------------------------------' $headrev && + +if test -n "$branch_name" +then +	echo "(from the branch description for $branch local branch)" +	echo +	git config "branch.$branch_name.description" +fi && + +if test -n "$tag_name" +then +	git cat-file tag "$tag_name" | +	sed -n -e '1,/^$/d' -e '/^-----BEGIN PGP /q' -e p +	echo +fi && + +if test -n "$branch_name" || test -n "$tag_name" +then +	echo "----------------------------------------------------------------" +fi &&  git shortlog ^$baserev $headrev && -git diff -M --stat --summary $patch $merge_base..$headrev || exit +git diff -M --stat --summary $patch $merge_base..$headrev || status=1 + +if test -z "$branch" +then +	echo "warn: No branch of $url is at:" >&2 +	git show -s --format='warn:   %h: %s' $headrev >&2 +	echo "warn: Are you sure you pushed '$head' there?" >&2 +	status=1 +fi  exit $status  | 
