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

test_description='See why rewinding head breaks send-pack

'
. ./test-lib.sh

cnt=64
test_expect_success setup '
	test_tick &&
	mkdir mozart mozart/is &&
	echo "Commit #0" >mozart/is/pink &&
	git update-index --add mozart/is/pink &&
	tree=$(git write-tree) &&
	commit=$(echo "Commit #0" | git commit-tree $tree) &&
	zero=$commit &&
	parent=$zero &&
	i=0 &&
	while test $i -le $cnt
	do
	    i=$(($i+1)) &&
	    test_tick &&
	    echo "Commit #$i" >mozart/is/pink &&
	    git update-index --add mozart/is/pink &&
	    tree=$(git write-tree) &&
	    commit=$(echo "Commit #$i" | git commit-tree $tree -p $parent) &&
	    git update-ref refs/tags/commit$i $commit &&
	    parent=$commit || return 1
	done &&
	git update-ref HEAD "$commit" &&
	git clone ./. victim &&
	cd victim &&
	git log &&
	cd .. &&
	git update-ref HEAD "$zero" &&
	parent=$zero &&
	i=0 &&
	while test $i -le $cnt
	do
	    i=$(($i+1)) &&
	    test_tick &&
	    echo "Rebase #$i" >mozart/is/pink &&
	    git update-index --add mozart/is/pink &&
	    tree=$(git write-tree) &&
	    commit=$(echo "Rebase #$i" | git commit-tree $tree -p $parent) &&
	    git update-ref refs/tags/rebase$i $commit &&
	    parent=$commit || return 1
	done &&
	git update-ref HEAD "$commit" &&
	echo Rebase &&
	git log'

test_expect_success 'pack the source repository' '
	git repack -a -d &&
	git prune
'

test_expect_success 'pack the destination repository' '
	cd victim &&
	git repack -a -d &&
	git prune &&
	cd ..
'

test_expect_success \
        'pushing rewound head should not barf but require --force' '
	# should not fail but refuse to update.
	if git send-pack ./victim/.git/ master
	then
		# now it should fail with Pasky patch
		echo >&2 Gaah, it should have failed.
		false
	else
		echo >&2 Thanks, it correctly failed.
		true
	fi &&
	if cmp victim/.git/refs/heads/master .git/refs/heads/master
	then
		# should have been left as it was!
		false
	else
		true
	fi &&
	# this should update
	git send-pack --force ./victim/.git/ master &&
	cmp victim/.git/refs/heads/master .git/refs/heads/master
'

test_expect_success \
        'push can be used to delete a ref' '
	cd victim &&
	git branch extra master &&
	cd .. &&
	test -f victim/.git/refs/heads/extra &&
	git send-pack ./victim/.git/ :extra master &&
	! test -f victim/.git/refs/heads/extra
'

unset GIT_CONFIG GIT_CONFIG_LOCAL
HOME=`pwd`/no-such-directory
export HOME ;# this way we force the victim/.git/config to be used.

test_expect_success \
        'pushing with --force should be denied with denyNonFastforwards' '
	cd victim &&
	git config receive.denyNonFastforwards true &&
	cd .. &&
	git update-ref refs/heads/master master^ || return 1
	git send-pack --force ./victim/.git/ master && return 1
	! test_cmp .git/refs/heads/master victim/.git/refs/heads/master
'

test_expect_success \
	'pushing does not include non-head refs' '
	mkdir parent && cd parent &&
	git init && touch file && git add file && git commit -m add &&
	cd .. &&
	git clone parent child && cd child && git push --all &&
	cd ../parent &&
	git branch -a >branches && ! grep origin/master branches
'

rewound_push_setup() {
	rm -rf parent child &&
	mkdir parent && cd parent &&
	git init && echo one >file && git add file && git commit -m one &&
	echo two >file && git commit -a -m two &&
	cd .. &&
	git clone parent child && cd child && git reset --hard HEAD^
}

rewound_push_succeeded() {
	cmp ../parent/.git/refs/heads/master .git/refs/heads/master
}

rewound_push_failed() {
	if rewound_push_succeeded
	then
		false
	else
		true
	fi
}

test_expect_success \
	'pushing explicit refspecs respects forcing' '
	rewound_push_setup &&
	if git send-pack ../parent/.git refs/heads/master:refs/heads/master
	then
		false
	else
		true
	fi && rewound_push_failed &&
	git send-pack ../parent/.git +refs/heads/master:refs/heads/master &&
	rewound_push_succeeded
'

test_expect_success \
	'pushing wildcard refspecs respects forcing' '
	rewound_push_setup &&
	if git send-pack ../parent/.git refs/heads/*:refs/heads/*
	then
		false
	else
		true
	fi && rewound_push_failed &&
	git send-pack ../parent/.git +refs/heads/*:refs/heads/* &&
	rewound_push_succeeded
'

test_done
