#!/bin/sh

test_description='Test Git when git repository is located at root

This test requires write access in root. Do not bother if you do not
have a throwaway chroot or VM.

Script t1509/prepare-chroot.sh may help you setup chroot, then you
can chroot in and execute this test from there.
'

. ./test-lib.sh

test_cmp_val() {
	echo "$1" > expected
	echo "$2" > result
	test_cmp expected result
}

test_vars() {
	test_expect_success "$1: gitdir" '
		test_cmp_val "'"$2"'" "$(git rev-parse --git-dir)"
	'

	test_expect_success "$1: worktree" '
		test_cmp_val "'"$3"'" "$(git rev-parse --show-toplevel)"
	'

	test_expect_success "$1: prefix" '
		test_cmp_val "'"$4"'" "$(git rev-parse --show-prefix)"
	'
}

test_foobar_root() {
	test_expect_success 'add relative' '
		test -z "$(cd / && git ls-files)" &&
		git add foo/foome &&
		git add foo/bar/barme &&
		git add me &&
		( cd / && git ls-files --stage ) > result &&
		test_cmp /ls.expected result &&
		rm "$(git rev-parse --git-dir)/index"
	'

	test_expect_success 'add absolute' '
		test -z "$(cd / && git ls-files)" &&
		git add /foo/foome &&
		git add /foo/bar/barme &&
		git add /me &&
		( cd / && git ls-files --stage ) > result &&
		test_cmp /ls.expected result &&
		rm "$(git rev-parse --git-dir)/index"
	'

}

test_foobar_foo() {
	test_expect_success 'add relative' '
		test -z "$(cd / && git ls-files)" &&
		git add foome &&
		git add bar/barme &&
		git add ../me &&
		( cd / && git ls-files --stage ) > result &&
		test_cmp /ls.expected result &&
		rm "$(git rev-parse --git-dir)/index"
	'

	test_expect_success 'add absolute' '
		test -z "$(cd / && git ls-files)" &&
		git add /foo/foome &&
		git add /foo/bar/barme &&
		git add /me &&
		( cd / && git ls-files --stage ) > result &&
		test_cmp /ls.expected result &&
		rm "$(git rev-parse --git-dir)/index"
	'
}

test_foobar_foobar() {
	test_expect_success 'add relative' '
		test -z "$(cd / && git ls-files)" &&
		git add ../foome &&
		git add barme &&
		git add ../../me &&
		( cd / && git ls-files --stage ) > result &&
		test_cmp /ls.expected result &&
		rm "$(git rev-parse --git-dir)/index"
	'

	test_expect_success 'add absolute' '
		test -z "$(cd / && git ls-files)" &&
		git add /foo/foome &&
		git add /foo/bar/barme &&
		git add /me &&
		( cd / && git ls-files --stage ) > result &&
		test_cmp /ls.expected result &&
		rm "$(git rev-parse --git-dir)/index"
	'
}

if ! test -w /
then
	skip_all="Test requiring writable / skipped. Read this test if you want to run it"
	test_done
fi

if  test -e /refs || test -e /objects || test -e /info || test -e /hooks ||
    test -e /.git || test -e /foo || test -e /me
then
	skip_all="Skip test that clobbers existing files in /"
	test_done
fi

if [ "$IKNOWWHATIAMDOING" != "YES" ]; then
	skip_all="You must set env var IKNOWWHATIAMDOING=YES in order to run this test"
	test_done
fi

if ! test_have_prereq NOT_ROOT
then
	skip_all="No you can't run this as root"
	test_done
fi

ONE_SHA1=d00491fd7e5bb6fa28c517a0bb32b8b506539d4d

test_expect_success 'setup' '
	rm -rf /foo &&
	mkdir /foo &&
	mkdir /foo/bar &&
	echo 1 > /foo/foome &&
	echo 1 > /foo/bar/barme &&
	echo 1 > /me
'

say "GIT_DIR absolute, GIT_WORK_TREE set"

test_expect_success 'go to /' 'cd /'

cat >ls.expected <<EOF
100644 $ONE_SHA1 0	foo/bar/barme
100644 $ONE_SHA1 0	foo/foome
100644 $ONE_SHA1 0	me
EOF

GIT_DIR="$TRASH_DIRECTORY/.git" && export GIT_DIR
GIT_WORK_TREE=/ && export GIT_WORK_TREE

test_vars 'abs gitdir, root' "$GIT_DIR" "/" ""
test_foobar_root

test_expect_success 'go to /foo' 'cd /foo'

test_vars 'abs gitdir, foo' "$GIT_DIR" "/" "foo/"
test_foobar_foo

test_expect_success 'go to /foo/bar' 'cd /foo/bar'

test_vars 'abs gitdir, foo/bar' "$GIT_DIR" "/" "foo/bar/"
test_foobar_foobar

say "GIT_DIR relative, GIT_WORK_TREE set"

test_expect_success 'go to /' 'cd /'

GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR
GIT_WORK_TREE=/ && export GIT_WORK_TREE

test_vars 'rel gitdir, root' "$GIT_DIR" "/" ""
test_foobar_root

test_expect_success 'go to /foo' 'cd /foo'

GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR
GIT_WORK_TREE=/ && export GIT_WORK_TREE

test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/"
test_foobar_foo

test_expect_success 'go to /foo/bar' 'cd /foo/bar'

GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR
GIT_WORK_TREE=/ && export GIT_WORK_TREE

test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/"
test_foobar_foobar

say "GIT_DIR relative, GIT_WORK_TREE relative"

test_expect_success 'go to /' 'cd /'

GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR
GIT_WORK_TREE=. && export GIT_WORK_TREE

test_vars 'rel gitdir, root' "$GIT_DIR" "/" ""
test_foobar_root

test_expect_success 'go to /' 'cd /foo'

GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR
GIT_WORK_TREE=.. && export GIT_WORK_TREE

test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/"
test_foobar_foo

test_expect_success 'go to /foo/bar' 'cd /foo/bar'

GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR
GIT_WORK_TREE=../.. && export GIT_WORK_TREE

test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/"
test_foobar_foobar

say ".git at root"

unset GIT_DIR
unset GIT_WORK_TREE

test_expect_success 'go to /' 'cd /'
test_expect_success 'setup' '
	rm -rf /.git &&
	echo "Initialized empty Git repository in /.git/" > expected &&
	git init > result &&
	test_i18ncmp expected result
'

test_vars 'auto gitdir, root' ".git" "/" ""
test_foobar_root

test_expect_success 'go to /foo' 'cd /foo'
test_vars 'auto gitdir, foo' "/.git" "/" "foo/"
test_foobar_foo

test_expect_success 'go to /foo/bar' 'cd /foo/bar'
test_vars 'auto gitdir, foo/bar' "/.git" "/" "foo/bar/"
test_foobar_foobar

test_expect_success 'cleanup' 'rm -rf /.git'

say "auto bare gitdir"

# DESTROYYYYY!!!!!
test_expect_success 'setup' '
	rm -rf /refs /objects /info /hooks &&
	rm -f /expected /ls.expected /me /result &&
	cd / &&
	echo "Initialized empty Git repository in /" > expected &&
	git init --bare > result &&
	test_i18ncmp expected result
'

test_vars 'auto gitdir, root' "." "" ""

test_expect_success 'go to /foo' 'cd /foo'

test_vars 'auto gitdir, root' "/" "" ""

test_done
