#!/bin/sh
#
# Copyright (c) 2019 Rohit Ashiwal
#

test_description='tests to ensure compatibility between am and interactive backends'

. ./test-lib.sh

. "$TEST_DIRECTORY"/lib-rebase.sh

GIT_AUTHOR_DATE="1999-04-02T08:03:20+05:30"
export GIT_AUTHOR_DATE

# This is a special case in which both am and interactive backends
# provide the same output. It was done intentionally because
# both the backends fall short of optimal behaviour.
test_expect_success 'setup' '
	git checkout -b topic &&
	test_write_lines "line 1" "	line 2" "line 3" >file &&
	git add file &&
	git commit -m "add file" &&

	test_write_lines "line 1" "new line 2" "line 3" >file &&
	git commit -am "update file" &&
	git tag side &&
	test_commit commit1 foo foo1 &&
	test_commit commit2 foo foo2 &&
	test_commit commit3 foo foo3 &&

	git checkout --orphan main &&
	rm foo &&
	test_write_lines "line 1" "        line 2" "line 3" >file &&
	git commit -am "add file" &&
	git tag main &&

	mkdir test-bin &&
	write_script test-bin/git-merge-test <<-\EOF
	exec git merge-recursive "$@"
	EOF
'

test_expect_success '--ignore-whitespace works with apply backend' '
	test_must_fail git rebase --apply main side &&
	git rebase --abort &&
	git rebase --apply --ignore-whitespace main side &&
	git diff --exit-code side
'

test_expect_success '--ignore-whitespace works with merge backend' '
	test_must_fail git rebase --merge main side &&
	git rebase --abort &&
	git rebase --merge --ignore-whitespace main side &&
	git diff --exit-code side
'

test_expect_success '--ignore-whitespace is remembered when continuing' '
	(
		set_fake_editor &&
		FAKE_LINES="break 1" git rebase -i --ignore-whitespace \
			main side &&
		git rebase --continue
	) &&
	git diff --exit-code side
'

test_ctime_is_atime () {
	git log $1 --format="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> %ai" >authortime &&
	git log $1 --format="%cn <%ce> %ci" >committertime &&
	test_cmp authortime committertime
}

test_expect_success '--committer-date-is-author-date works with apply backend' '
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	git rebase --apply --committer-date-is-author-date HEAD^ &&
	test_ctime_is_atime -1
'

test_expect_success '--committer-date-is-author-date works with merge backend' '
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	git rebase -m --committer-date-is-author-date HEAD^ &&
	test_ctime_is_atime -1
'

test_expect_success '--committer-date-is-author-date works when rewording' '
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	(
		set_fake_editor &&
		FAKE_COMMIT_MESSAGE=edited \
			FAKE_LINES="reword 1" \
			git rebase -i --committer-date-is-author-date HEAD^
	) &&
	test_write_lines edited "" >expect &&
	git log --format="%B" -1 >actual &&
	test_cmp expect actual &&
	test_ctime_is_atime -1
'

test_expect_success '--committer-date-is-author-date works with rebase -r' '
	git checkout side &&
	GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 &&
	git rebase -r --root --committer-date-is-author-date &&
	test_ctime_is_atime
'

test_expect_success '--committer-date-is-author-date works when forking merge' '
	git checkout side &&
	GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 &&
	PATH="./test-bin:$PATH" git rebase -r --root --strategy=test \
					--committer-date-is-author-date &&
	test_ctime_is_atime
'

test_expect_success '--committer-date-is-author-date works when committing conflict resolution' '
	git checkout commit2 &&
	GIT_AUTHOR_DATE="@1980 +0000" git commit --amend --only --reset-author &&
	test_must_fail git rebase -m --committer-date-is-author-date \
		--onto HEAD^^ HEAD^ &&
	echo resolved > foo &&
	git add foo &&
	git rebase --continue &&
	test_ctime_is_atime -1
'

# Checking for +0000 in the author date is sufficient since the
# default timezone is UTC but the timezone used while committing is
# +0530. The inverted logic in the grep is necessary to check all the
# author dates in the file.
test_atime_is_ignored () {
	git log $1 --format=%ai >authortime &&
	! grep -v +0000 authortime
}

test_expect_success '--reset-author-date works with apply backend' '
	git commit --amend --date="$GIT_AUTHOR_DATE" &&
	git rebase --apply --reset-author-date HEAD^ &&
	test_atime_is_ignored -1
'

test_expect_success '--reset-author-date works with merge backend' '
	git commit --amend --date="$GIT_AUTHOR_DATE" &&
	git rebase --reset-author-date -m HEAD^ &&
	test_atime_is_ignored -1
'

test_expect_success '--reset-author-date works after conflict resolution' '
	test_must_fail git rebase --reset-author-date -m \
		--onto commit2^^ commit2^ commit2 &&
	echo resolved >foo &&
	git add foo &&
	git rebase --continue &&
	test_atime_is_ignored -1
'

test_expect_success '--reset-author-date works with rebase -r' '
	git checkout side &&
	git merge --no-ff commit3 &&
	git rebase -r --root --reset-author-date &&
	test_atime_is_ignored
'

test_expect_success '--reset-author-date with --committer-date-is-author-date works' '
	test_must_fail git rebase -m --committer-date-is-author-date \
		--reset-author-date --onto commit2^^ commit2^ commit3 &&
	git checkout --theirs foo &&
	git add foo &&
	git rebase --continue &&
	test_ctime_is_atime -2 &&
	test_atime_is_ignored -2
'

test_expect_success 'reset-author-date with --committer-date-is-author-date works when rewording' '
	GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author &&
	(
		set_fake_editor &&
		FAKE_COMMIT_MESSAGE=edited \
			FAKE_LINES="reword 1" \
			git rebase -i --committer-date-is-author-date \
				--reset-author-date HEAD^
	) &&
	test_write_lines edited "" >expect &&
	git log --format="%B" -1 >actual &&
	test_cmp expect actual &&
	test_atime_is_ignored -1
'

test_expect_success '--reset-author-date --committer-date-is-author-date works when forking merge' '
	GIT_SEQUENCE_EDITOR="echo \"merge -C $(git rev-parse HEAD) commit3\">" \
		PATH="./test-bin:$PATH" git rebase -i --strategy=test \
				--reset-author-date \
				--committer-date-is-author-date side side &&
	test_ctime_is_atime -1 &&
	test_atime_is_ignored -1
 '

test_expect_success '--ignore-date is an alias for --reset-author-date' '
	git commit --amend --date="$GIT_AUTHOR_DATE" &&
	git rebase --apply --ignore-date HEAD^ &&
	git commit --allow-empty -m empty --date="$GIT_AUTHOR_DATE" &&
	git rebase -m --ignore-date HEAD^ &&
	test_atime_is_ignored -2
'

# This must be the last test in this file
test_expect_success '$EDITOR and friends are unchanged' '
	test_editor_unchanged
'

test_done
