Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
t3705: add tests for
git add
in sparse checkouts
We already have a couple tests for `add` with SKIP_WORKTREE entries in t7012, but these only cover the most basic scenarios. As we will be changing how `add` deals with sparse paths in the subsequent commits, let's move these two tests to their own file and add more test cases for different `add` options and situations. This also demonstrates two options that don't currently respect SKIP_WORKTREE entries: `--chmod` and `--renormalize`. Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
1 parent
4e95698
commit 6594afc
Showing
2 changed files
with
96 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
#!/bin/sh | ||
|
||
test_description='git add in sparse checked out working trees' | ||
|
||
. ./test-lib.sh | ||
|
||
SPARSE_ENTRY_BLOB="" | ||
|
||
# Optionally take a printf format string to write to the sparse_entry file | ||
setup_sparse_entry () { | ||
# 'sparse_entry' might already be in the index with the skip-worktree | ||
# bit set. Remove it so that the subsequent git add can update it. | ||
git update-index --force-remove sparse_entry && | ||
if test $# -eq 1 | ||
then | ||
printf "$1" >sparse_entry | ||
else | ||
>sparse_entry | ||
fi && | ||
git add sparse_entry && | ||
git update-index --skip-worktree sparse_entry && | ||
SPARSE_ENTRY_BLOB=$(git rev-parse :sparse_entry) | ||
} | ||
|
||
test_sparse_entry_unchanged () { | ||
echo "100644 $SPARSE_ENTRY_BLOB 0 sparse_entry" >expected && | ||
git ls-files --stage sparse_entry >actual && | ||
test_cmp expected actual | ||
} | ||
|
||
setup_gitignore () { | ||
test_when_finished rm -f .gitignore && | ||
cat >.gitignore <<-EOF | ||
* | ||
!/sparse_entry | ||
EOF | ||
} | ||
|
||
test_expect_success 'git add does not remove sparse entries' ' | ||
setup_sparse_entry && | ||
rm sparse_entry && | ||
git add sparse_entry && | ||
test_sparse_entry_unchanged | ||
' | ||
|
||
test_expect_success 'git add -A does not remove sparse entries' ' | ||
setup_sparse_entry && | ||
rm sparse_entry && | ||
setup_gitignore && | ||
git add -A && | ||
test_sparse_entry_unchanged | ||
' | ||
|
||
test_expect_success 'git add . does not remove sparse entries' ' | ||
setup_sparse_entry && | ||
rm sparse_entry && | ||
setup_gitignore && | ||
git add . && | ||
test_sparse_entry_unchanged | ||
' | ||
|
||
for opt in "" -f -u --ignore-removal --dry-run | ||
do | ||
test_expect_success "git add${opt:+ $opt} does not update sparse entries" ' | ||
setup_sparse_entry && | ||
echo modified >sparse_entry && | ||
git add $opt sparse_entry && | ||
test_sparse_entry_unchanged | ||
' | ||
done | ||
|
||
test_expect_success 'git add --refresh does not update sparse entries' ' | ||
setup_sparse_entry && | ||
git ls-files --debug sparse_entry | grep mtime >before && | ||
test-tool chmtime -60 sparse_entry && | ||
git add --refresh sparse_entry && | ||
git ls-files --debug sparse_entry | grep mtime >after && | ||
test_cmp before after | ||
' | ||
|
||
test_expect_failure 'git add --chmod does not update sparse entries' ' | ||
setup_sparse_entry && | ||
git add --chmod=+x sparse_entry && | ||
test_sparse_entry_unchanged && | ||
! test -x sparse_entry | ||
' | ||
|
||
test_expect_failure 'git add --renormalize does not update sparse entries' ' | ||
test_config core.autocrlf false && | ||
setup_sparse_entry "LINEONE\r\nLINETWO\r\n" && | ||
echo "sparse_entry text=auto" >.gitattributes && | ||
git add --renormalize sparse_entry && | ||
test_sparse_entry_unchanged | ||
' | ||
|
||
test_done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters