#!/bin/sh
#
# Copyright (c) 2012 Avery Pennaraum
#
test_description='Basic porcelain support for subtrees

This test verifies the basic operation of the merge, pull, add
and split subcommands of git subtree.
'

TEST_DIRECTORY=$(pwd)/../../../t
export TEST_DIRECTORY

. ../../../t/test-lib.sh

create()
{
	echo "$1" >"$1"
	git add "$1"
}


check_equal()
{
	test_debug 'echo'
	test_debug "echo \"check a:\" \"{$1}\""
	test_debug "echo \"      b:\" \"{$2}\""
	if [ "$1" = "$2" ]; then
		return 0
	else
		return 1
	fi
}

fixnl()
{
	t=""
	while read x; do
		t="$t$x "
	done
	echo $t
}

multiline()
{
	while read x; do
		set -- $x
		for d in "$@"; do
			echo "$d"
		done
	done
}

undo()
{
	git reset --hard HEAD~
}

last_commit_message()
{
	git log --pretty=format:%s -1
}

test_expect_success 'init subproj' '
        test_create_repo subproj
'

# To the subproject!
cd subproj

test_expect_success 'add sub1' '
        create sub1 &&
        git commit -m "sub1" &&
        git branch sub1 &&
        git branch -m master subproj
'

# Save this hash for testing later.

subdir_hash=$(git rev-parse HEAD)

test_expect_success 'add sub2' '
        create sub2 &&
        git commit -m "sub2" &&
        git branch sub2
'

test_expect_success 'add sub3' '
        create sub3 &&
        git commit -m "sub3" &&
        git branch sub3
'

# Back to mainline
cd ..

test_expect_success 'add main4' '
        create main4 &&
        git commit -m "main4" &&
        git branch -m master mainline &&
        git branch subdir
'

test_expect_success 'fetch subproj history' '
        git fetch ./subproj sub1 &&
        git branch sub1 FETCH_HEAD
'

test_expect_success 'no subtree exists in main tree' '
        test_must_fail git subtree merge --prefix=subdir sub1
'

test_expect_success 'no pull from non-existant subtree' '
        test_must_fail git subtree pull --prefix=subdir ./subproj sub1
'

test_expect_success 'check if --message works for add' '
        git subtree add --prefix=subdir --message="Added subproject" sub1 &&
        check_equal ''"$(last_commit_message)"'' "Added subproject" &&
        undo
'

test_expect_success 'check if --message works as -m and --prefix as -P' '
        git subtree add -P subdir -m "Added subproject using git subtree" sub1 &&
        check_equal ''"$(last_commit_message)"'' "Added subproject using git subtree" &&
        undo
'

test_expect_success 'check if --message works with squash too' '
        git subtree add -P subdir -m "Added subproject with squash" --squash sub1 &&
        check_equal ''"$(last_commit_message)"'' "Added subproject with squash" &&
        undo
'

test_expect_success 'add subproj to mainline' '
        git subtree add --prefix=subdir/ FETCH_HEAD &&
        check_equal ''"$(last_commit_message)"'' "Add '"'subdir/'"' from commit '"'"'''"$(git rev-parse sub1)"'''"'"'"
'

# this shouldn't actually do anything, since FETCH_HEAD is already a parent
test_expect_success 'merge fetched subproj' '
        git merge -m "merge -s -ours" -s ours FETCH_HEAD
'

test_expect_success 'add main-sub5' '
        create subdir/main-sub5 &&
        git commit -m "main-sub5"
'

test_expect_success 'add main6' '
        create main6 &&
        git commit -m "main6 boring"
'

test_expect_success 'add main-sub7' '
        create subdir/main-sub7 &&
        git commit -m "main-sub7"
'

test_expect_success 'fetch new subproj history' '
        git fetch ./subproj sub2 &&
        git branch sub2 FETCH_HEAD
'

test_expect_success 'check if --message works for merge' '
        git subtree merge --prefix=subdir -m "Merged changes from subproject" sub2 &&
        check_equal ''"$(last_commit_message)"'' "Merged changes from subproject" &&
        undo
'

test_expect_success 'check if --message for merge works with squash too' '
        git subtree merge --prefix subdir -m "Merged changes from subproject using squash" --squash sub2 &&
        check_equal ''"$(last_commit_message)"'' "Merged changes from subproject using squash" &&
        undo
'

test_expect_success 'merge new subproj history into subdir' '
        git subtree merge --prefix=subdir FETCH_HEAD &&
        git branch pre-split &&
        check_equal ''"$(last_commit_message)"'' "Merge commit '"'"'"$(git rev-parse sub2)"'"'"' into mainline"
'

test_expect_success 'Check that prefix argument is required for split' '
        echo "You must provide the --prefix option." > expected &&
        test_must_fail git subtree split > actual 2>&1 &&
	test_debug "printf '"'"'expected: '"'"'" &&
        test_debug "cat expected" &&
	test_debug "printf '"'"'actual: '"'"'" &&
        test_debug "cat actual" &&
        test_cmp expected actual &&
        rm -f expected actual
'

test_expect_success 'Check that the <prefix> exists for a split' '
        echo "'"'"'non-existent-directory'"'"'" does not exist\; use "'"'"'git subtree add'"'"'" > expected &&
        test_must_fail git subtree split --prefix=non-existent-directory > actual 2>&1 &&
	test_debug "printf '"'"'expected: '"'"'" &&
        test_debug "cat expected" &&
	test_debug "printf '"'"'actual: '"'"'" &&
        test_debug "cat actual" &&
        test_cmp expected actual
#        rm -f expected actual
'

test_expect_success 'check if --message works for split+rejoin' '
        spl1=''"$(git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --message "Split & rejoin" --rejoin)"'' &&
        git branch spl1 "$spl1" &&
        check_equal ''"$(last_commit_message)"'' "Split & rejoin" &&
        undo
'

test_expect_success 'check split with --branch' '
	spl1=$(git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --message "Split & rejoin" --rejoin) &&
	undo &&
	git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --branch splitbr1 &&
	check_equal ''"$(git rev-parse splitbr1)"'' "$spl1"
'

test_expect_success 'check hash of split' '
	spl1=$(git subtree split --prefix subdir) &&
	undo &&
	git subtree split --prefix subdir --branch splitbr1test &&
	check_equal ''"$(git rev-parse splitbr1test)"'' "$spl1"
	git checkout splitbr1test &&
	new_hash=$(git rev-parse HEAD~2) &&
	git checkout mainline &&
	check_equal ''"$new_hash"'' "$subdir_hash"
'

test_expect_success 'check split with --branch for an existing branch' '
        spl1=''"$(git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --message "Split & rejoin" --rejoin)"'' &&
        undo &&
        git branch splitbr2 sub1 &&
        git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --branch splitbr2 &&
        check_equal ''"$(git rev-parse splitbr2)"'' "$spl1"
'

test_expect_success 'check split with --branch for an incompatible branch' '
        test_must_fail git subtree split --prefix subdir --onto FETCH_HEAD --branch subdir
'

test_expect_success 'check split+rejoin' '
        spl1=''"$(git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --message "Split & rejoin" --rejoin)"'' &&
        undo &&
        git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --rejoin &&
        check_equal ''"$(last_commit_message)"'' "Split '"'"'subdir/'"'"' into commit '"'"'"$spl1"'"'"'"
'

test_expect_success 'add main-sub8' '
        create subdir/main-sub8 &&
        git commit -m "main-sub8"
'

# To the subproject!
cd ./subproj

test_expect_success 'merge split into subproj' '
        git fetch .. spl1 &&
        git branch spl1 FETCH_HEAD &&
        git merge FETCH_HEAD
'

test_expect_success 'add sub9' '
        create sub9 &&
        git commit -m "sub9"
'

# Back to mainline
cd ..

test_expect_success 'split for sub8' '
        split2=''"$(git subtree split --annotate='"'*'"' --prefix subdir/ --rejoin)"''
        git branch split2 "$split2"
'

test_expect_success 'add main-sub10' '
        create subdir/main-sub10 &&
        git commit -m "main-sub10"
'

test_expect_success 'split for sub10' '
        spl3=''"$(git subtree split --annotate='"'*'"' --prefix subdir --rejoin)"'' &&
        git branch spl3 "$spl3"
'

# To the subproject!
cd ./subproj

test_expect_success 'merge split into subproj' '
        git fetch .. spl3 &&
        git branch spl3 FETCH_HEAD &&
        git merge FETCH_HEAD &&
        git branch subproj-merge-spl3
'

chkm="main4 main6"
chkms="main-sub10 main-sub5 main-sub7 main-sub8"
chkms_sub=$(echo $chkms | multiline | sed 's,^,subdir/,' | fixnl)
chks="sub1 sub2 sub3 sub9"
chks_sub=$(echo $chks | multiline | sed 's,^,subdir/,' | fixnl)

test_expect_success 'make sure exactly the right set of files ends up in the subproj' '
        subfiles=''"$(git ls-files | fixnl)"'' &&
        check_equal "$subfiles" "$chkms $chks"
'

test_expect_success 'make sure the subproj history *only* contains commits that affect the subdir' '
        allchanges=''"$(git log --name-only --pretty=format:'"''"' | sort | fixnl)"'' &&
        check_equal "$allchanges" "$chkms $chks"
'

# Back to mainline
cd ..

test_expect_success 'pull from subproj' '
        git fetch ./subproj subproj-merge-spl3 &&
        git branch subproj-merge-spl3 FETCH_HEAD &&
        git subtree pull --prefix=subdir ./subproj subproj-merge-spl3
'

test_expect_success 'make sure exactly the right set of files ends up in the mainline' '
        mainfiles=''"$(git ls-files | fixnl)"'' &&
        check_equal "$mainfiles" "$chkm $chkms_sub $chks_sub"
'

test_expect_success 'make sure each filename changed exactly once in the entire history' '
        # main-sub?? and /subdir/main-sub?? both change, because those are the
        # changes that were split into their own history.  And subdir/sub?? never
        # change, since they were *only* changed in the subtree branch.
        allchanges=''"$(git log --name-only --pretty=format:'"''"' | sort | fixnl)"'' &&
        check_equal "$allchanges" ''"$(echo $chkms $chkm $chks $chkms_sub | multiline | sort | fixnl)"''
'

test_expect_success 'make sure the --rejoin commits never make it into subproj' '
        check_equal ''"$(git log --pretty=format:'"'%s'"' HEAD^2 | grep -i split)"'' ""
'

test_expect_success 'make sure no "git subtree" tagged commits make it into subproj' '
        # They are meaningless to subproj since one side of the merge refers to the mainline
        check_equal ''"$(git log --pretty=format:'"'%s%n%b'"' HEAD^2 | grep "git-subtree.*:")"'' ""
'

# prepare second pair of repositories
mkdir test2
cd test2

test_expect_success 'init main' '
        test_create_repo main
'

cd main

test_expect_success 'add main1' '
        create main1 &&
        git commit -m "main1"
'

cd ..

test_expect_success 'init sub' '
        test_create_repo sub
'

cd sub

test_expect_success 'add sub2' '
        create sub2 &&
        git commit -m "sub2"
'

cd ../main

# check if split can find proper base without --onto

test_expect_success 'add sub as subdir in main' '
        git fetch ../sub master &&
        git branch sub2 FETCH_HEAD &&
        git subtree add --prefix subdir sub2
'

cd ../sub

test_expect_success 'add sub3' '
        create sub3 &&
        git commit -m "sub3"
'

cd ../main

test_expect_success 'merge from sub' '
        git fetch ../sub master &&
        git branch sub3 FETCH_HEAD &&
        git subtree merge --prefix subdir sub3
'

test_expect_success 'add main-sub4' '
        create subdir/main-sub4 &&
        git commit -m "main-sub4"
'

test_expect_success 'split for main-sub4 without --onto' '
        git subtree split --prefix subdir --branch mainsub4
'

# at this point, the new commit parent should be sub3 if it is not,
# something went wrong (the "newparent" of "master~" commit should
# have been sub3, but it was not, because its cache was not set to
# itself)

test_expect_success 'check that the commit parent is sub3' '
        check_equal ''"$(git log --pretty=format:%P -1 mainsub4)"'' ''"$(git rev-parse sub3)"''
'

test_expect_success 'add main-sub5' '
        mkdir subdir2 &&
        create subdir2/main-sub5 &&
        git commit -m "main-sub5"
'

test_expect_success 'split for main-sub5 without --onto' '
        # also test that we still can split out an entirely new subtree
        # if the parent of the first commit in the tree is not empty,
	# then the new subtree has accidentally been attached to something
        git subtree split --prefix subdir2 --branch mainsub5 &&
        check_equal ''"$(git log --pretty=format:%P -1 mainsub5)"'' ""
'

# make sure no patch changes more than one file.  The original set of commits
# changed only one file each.  A multi-file change would imply that we pruned
# commits too aggressively.
joincommits()
{
	commit=
	all=
	while read x y; do
		#echo "{$x}" >&2
		if [ -z "$x" ]; then
			continue
		elif [ "$x" = "commit:" ]; then
			if [ -n "$commit" ]; then
				echo "$commit $all"
				all=
			fi
			commit="$y"
		else
			all="$all $y"
		fi
	done
	echo "$commit $all"
}

test_expect_success 'verify one file change per commit' '
        x= &&
        list=''"$(git log --pretty=format:'"'commit: %H'"' | joincommits)"'' &&
#        test_debug "echo HERE" &&
#        test_debug "echo ''"$list"''" &&
        (git log --pretty=format:'"'commit: %H'"' | joincommits |
        (       while read commit a b; do
		        test_debug "echo Verifying commit "''"$commit"''
		        test_debug "echo a: "''"$a"''
		        test_debug "echo b: "''"$b"''
		        check_equal "$b" ""
		        x=1
	        done
	        check_equal "$x" 1
        ))
'

test_done
