Add tests for --only (-o) and --include (-i). This include testing with or without staged changes for both -i and -o. Also to test for committing untracked files with -i, -o and without -i/-o. Some tests already exist in t7501 for testing --only, however, it is tested in combination with --amend and --allow-empty and on to-be-born branch. The addition of these tests check, when the pathspec is provided, that only the files matching the pathspec get committed. This behavior is same when we provide --only (as --only is the default mode of operation when pathspec is provided.) As for --include, there is no prior test for checking if --include also commits staged changes. Therefore, these tests belong in t7501 with other similar existing tests, as described in the case of --only. And also add test for checking incompatibilty when using -o and -i together. Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> --- t/t7501-commit-basic-functionality.sh | 79 ++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/t/t7501-commit-basic-functionality.sh b/t/t7501-commit-basic-functionality.sh index 3d8500a52e..e4633b4af5 100755 --- a/t/t7501-commit-basic-functionality.sh +++ b/t/t7501-commit-basic-functionality.sh @@ -3,7 +3,7 @@ # Copyright (c) 2007 Kristian Høgsberg <krh@xxxxxxxxxx> # -# FIXME: Test the various index usages, -i and -o, test reflog, +# FIXME: Test the various index usages, test reflog, # signoff test_description='git commit' @@ -92,6 +92,19 @@ test_expect_success '--long fails with nothing to commit' ' test_must_fail git commit -m initial --long ' +test_expect_success 'fail to commit untracked file' ' + echo content >baz && + test_must_fail git commit -m "baz" baz +' + +test_expect_success '--only also fail to commit untracked file' ' + test_must_fail git commit --only -m "baz" baz +' + +test_expect_success '--include also fail to commit untracked file' ' + test_must_fail git commit --include -m "baz" baz +' + test_expect_success 'setup: non-initial commit' ' echo bongo bongo bongo >file && git commit -m next -a @@ -117,6 +130,70 @@ test_expect_success '--long with stuff to commit returns ok' ' git commit -m next -a --long ' +test_expect_success 'only commit given path (also excluding additional staged changes)' ' + echo content >file && + echo content >baz && + git add baz && + git commit -m "file" file && + + git diff --name-only >actual && + test_must_be_empty actual && + + git diff --name-only --staged >actual && + test_cmp - actual <<-EOF && + baz + EOF + + git diff --name-only HEAD^ HEAD >actual && + test_cmp - actual <<-EOF + file + EOF +' + +test_expect_success 'same as above with -o/--only' ' + echo change >file && + echo change >baz && + git add baz && + git commit --only -m "file" file && + + git diff --name-only >actual && + test_must_be_empty actual && + + git diff --name-only --staged >actual && + test_cmp - actual <<-EOF && + baz + EOF + + git diff --name-only HEAD^ HEAD >actual && + test_cmp - actual <<-EOF + file + EOF +' + +test_expect_success '-i/--include includes staged changes' ' + echo newcontent >file && + echo newcontent >baz && + git add file && + git commit --include -m "file baz" baz && + + git diff --name-only HEAD >remaining && + test_must_be_empty remaining && + + git diff --name-only HEAD^ HEAD >changes && + test_cmp - changes <<-EOF + baz + file + EOF +' + +test_expect_success '--include and --only do not mix' ' + test_when_finished "git reset --hard" && + echo new >file && + echo new >baz && + test_must_fail git commit --include --only -m "file baz" file baz 2>actual && + test_grep -e "fatal: options .-i/--include. and .-o/--only. cannot be used together" actual +' + test_expect_success 'commit message from non-existing file' ' echo more bongo: bongo bongo bongo bongo >file && test_must_fail git commit -F gah -a -- 2.43.0