#!/bin/sh
#
# Copyright (c) 2007 Lars Hjemli
#

test_description='Basic porcelain support for submodules

This test tries to verify basic sanity of the init, update and status
subcommands of git-submodule.
'

. ./test-lib.sh

#
# Test setup:
#  -create a repository in directory lib
#  -add a couple of files
#  -add directory lib to 'superproject', this creates a DIRLINK entry
#  -add a couple of regular files to enable testing of submodule filtering
#  -mv lib subrepo
#  -add an entry to .gitmodules for submodule 'example'
#
test_expect_success 'Prepare submodule testing' '
	: > t &&
	git-add t &&
	git-commit -m "initial commit" &&
	git branch initial HEAD &&
	mkdir lib &&
	cd lib &&
	git init &&
	echo a >a &&
	git add a &&
	git-commit -m "submodule commit 1" &&
	git-tag -a -m "rev-1" rev-1 &&
	rev1=$(git rev-parse HEAD) &&
	if test -z "$rev1"
	then
		echo "[OOPS] submodule git rev-parse returned nothing"
		false
	fi &&
	cd .. &&
	echo a >a &&
	echo z >z &&
	git add a lib z &&
	git-commit -m "super commit 1" &&
	mv lib .subrepo &&
	GIT_CONFIG=.gitmodules git config submodule.example.url git://example.com/lib.git
'

test_expect_success 'status should fail for unmapped paths' '
	if git-submodule status
	then
		echo "[OOPS] submodule status succeeded"
		false
	elif ! GIT_CONFIG=.gitmodules git config submodule.example.path lib
	then
		echo "[OOPS] git config failed to update .gitmodules"
		false
	fi
'

test_expect_success 'status should only print one line' '
	lines=$(git-submodule status | wc -l) &&
	test $lines = 1
'

test_expect_success 'status should initially be "missing"' '
	git-submodule status | grep "^-$rev1"
'

test_expect_success 'init should register submodule url in .git/config' '
	git-submodule init &&
	url=$(git config submodule.example.url) &&
	if test "$url" != "git://example.com/lib.git"
	then
		echo "[OOPS] init succeeded but submodule url is wrong"
		false
	elif ! git config submodule.example.url ./.subrepo
	then
		echo "[OOPS] init succeeded but update of url failed"
		false
	fi
'

test_expect_success 'update should fail when path is used by a file' '
	echo "hello" >lib &&
	if git-submodule update
	then
		echo "[OOPS] update should have failed"
		false
	elif test "$(cat lib)" != "hello"
	then
		echo "[OOPS] update failed but lib file was molested"
		false
	else
		rm lib
	fi
'

test_expect_success 'update should fail when path is used by a nonempty directory' '
	mkdir lib &&
	echo "hello" >lib/a &&
	if git-submodule update
	then
		echo "[OOPS] update should have failed"
		false
	elif test "$(cat lib/a)" != "hello"
	then
		echo "[OOPS] update failed but lib/a was molested"
		false
	else
		rm lib/a
	fi
'

test_expect_success 'update should work when path is an empty dir' '
	rm -rf lib &&
	mkdir lib &&
	git-submodule update &&
	head=$(cd lib && git rev-parse HEAD) &&
	if test -z "$head"
	then
		echo "[OOPS] Failed to obtain submodule head"
		false
	elif test "$head" != "$rev1"
	then
		echo "[OOPS] Submodule head is $head but should have been $rev1"
		false
	fi
'

test_expect_success 'status should be "up-to-date" after update' '
	git-submodule status | grep "^ $rev1"
'

test_expect_success 'status should be "modified" after submodule commit' '
	cd lib &&
	echo b >b &&
	git add b &&
	git-commit -m "submodule commit 2" &&
	rev2=$(git rev-parse HEAD) &&
	cd .. &&
	if test -z "$rev2"
	then
		echo "[OOPS] submodule git rev-parse returned nothing"
		false
	fi &&
	git-submodule status | grep "^+$rev2"
'

test_expect_success 'the --cached sha1 should be rev1' '
	git-submodule --cached status | grep "^+$rev1"
'

test_expect_success 'git diff should report the SHA1 of the new submodule commit' '
	git-diff | grep "^+Subproject commit $rev2"
'

test_expect_success 'update should checkout rev1' '
	git-submodule update &&
	head=$(cd lib && git rev-parse HEAD) &&
	if test -z "$head"
	then
		echo "[OOPS] submodule git rev-parse returned nothing"
		false
	elif test "$head" != "$rev1"
	then
		echo "[OOPS] init did not checkout correct head"
		false
	fi
'

test_expect_success 'status should be "up-to-date" after update' '
	git-submodule status | grep "^ $rev1"
'

test_expect_success 'checkout superproject with subproject already present' '
	git-checkout initial &&
	git-checkout master
'

test_expect_success 'apply submodule diff' '
	git branch second &&
	(
		cd lib &&
		echo s >s &&
		git add s &&
		git commit -m "change subproject"
	) &&
	git update-index --add lib &&
	git-commit -m "change lib" &&
	git-format-patch -1 --stdout >P.diff &&
	git checkout second &&
	git apply --index P.diff &&
	D=$(git diff --cached master) &&
	test -z "$D"
'

test_done
