#!/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 init
#  -add a couple of files
#  -add directory init to 'superproject', this creates a DIRLINK entry
#  -add a couple of regular files to enable testing of submodule filtering
#  -mv init 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 init &&
	cd init &&
	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 init z &&
	git commit -m "super commit 1" &&
	mv init .subrepo &&
	GIT_CONFIG=.gitmodules git config submodule.example.url git://example.com/init.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 init
	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/init.git"
	then
		echo "[OOPS] init succeeded but submodule url is wrong"
		false
	elif test_must_fail 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" >init &&
	if git submodule update
	then
		echo "[OOPS] update should have failed"
		false
	elif test "$(cat init)" != "hello"
	then
		echo "[OOPS] update failed but init file was molested"
		false
	else
		rm init
	fi
'

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

test_expect_success 'update should work when path is an empty dir' '
	rm -rf init &&
	mkdir init &&
	git submodule update &&
	head=$(cd init && 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 init &&
	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 init &&
	head=$(cd init && 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 init &&
		echo s >s &&
		git add s &&
		git commit -m "change subproject"
	) &&
	git update-index --add init &&
	git commit -m "change init" &&
	git format-patch -1 --stdout >P.diff &&
	git checkout second &&
	git apply --index P.diff &&
	D=$(git diff --cached master) &&
	test -z "$D"
'

test_expect_success 'update --init' '

	mv init init2 &&
	git config -f .gitmodules submodule.example.url "$(pwd)/init2" &&
	git config --remove-section submodule.example
	git submodule update init > update.out &&
	grep "not initialized" update.out &&
	test ! -d init/.git &&
	git submodule update --init init &&
	test -d init/.git

'

test_done
