Staging
v0.5.1
Revision 39ba7d54649b35c943b026b54bff40cfa0153f3e authored by Martin Mares on 18 February 2006, 20:44:20 UTC, committed by Junio C Hamano on 19 February 2006, 00:19:00 UTC
Fixed a couple of bugs in recovering from broken connections:

The _line() method now returns undef correctly when the connection
is broken instead of falling off the function and returning garbage.

Retries are now reported to stderr and the eventual partially
downloaded file is discarded instead of being appended to.

The "Server gone away" test has been removed, because it was
reachable only if the garbage return bug bit.

Signed-off-by: Martin Mares <mj@ucw.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent 3ff903b
Raw File
git-cherry.sh
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano.
#

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

Each commit between the fork-point (or <limit> if given) 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
   limit="$upstream"
   ;;
2) upstream=`git-rev-parse --verify "$1"` &&
   ours=`git-rev-parse --verify "$2"` || exit
   limit="$upstream"
   ;;
3) upstream=`git-rev-parse --verify "$1"` &&
   ours=`git-rev-parse --verify "$2"` &&
   limit=`git-rev-parse --verify "$3"` || 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 ^$limit` || 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
back to top