new file mode 100644
@@ -0,0 +1,36 @@
+# Helper to create files with unique contents
+
+
+# Create multiple files with unique contents. Takes the number of
+# directories, the number of files in each directory, and the base
+# directory.
+#
+# test_create_unique_files 2 3 my_dir -- Creates 2 directories with 3 files
+# each in my_dir, all with unique
+# contents.
+
+test_create_unique_files() {
+ test "$#" -ne 3 && BUG "3 param"
+
+ local dirs=$1
+ local files=$2
+ local basedir=$3
+ local counter=0
+ test_tick
+ local basedata=$test_tick
+
+
+ rm -rf $basedir
+
+ for i in $(test_seq $dirs)
+ do
+ local dir=$basedir/dir$i
+
+ mkdir -p "$dir"
+ for j in $(test_seq $files)
+ do
+ counter=$((counter + 1))
+ echo "$basedata.$counter" >"$dir/file$j.txt"
+ done
+ done
+}
@@ -8,6 +8,8 @@ test_description='Test of git add, including the -- option.'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
+. $TEST_DIRECTORY/lib-unique-files.sh
+
# Test the file mode "$1" of the file "$2" in the index.
test_mode_in_index () {
case "$(git ls-files -s "$2")" in
@@ -34,6 +36,26 @@ test_expect_success \
'Test that "git add -- -q" works' \
'touch -- -q && git add -- -q'
+BATCH_CONFIGURATION='-c core.fsync=loose-object -c core.fsyncmethod=batch'
+
+test_expect_success 'git add: core.fsyncmethod=batch' "
+ test_create_unique_files 2 4 fsync-files &&
+ git $BATCH_CONFIGURATION add -- ./fsync-files/ &&
+ rm -f fsynced_files &&
+ git ls-files --stage fsync-files/ > fsynced_files &&
+ test_line_count = 8 fsynced_files &&
+ awk -- '{print \$2}' fsynced_files | xargs -n1 git cat-file -e
+"
+
+test_expect_success 'git update-index: core.fsyncmethod=batch' "
+ test_create_unique_files 2 4 fsync-files2 &&
+ find fsync-files2 ! -type d -print | xargs git $BATCH_CONFIGURATION update-index --add -- &&
+ rm -f fsynced_files2 &&
+ git ls-files --stage fsync-files2/ > fsynced_files2 &&
+ test_line_count = 8 fsynced_files2 &&
+ awk -- '{print \$2}' fsynced_files2 | xargs -n1 git cat-file -e
+"
+
test_expect_success \
'git add: Test that executable bit is not used if core.filemode=0' \
'git config core.filemode 0 &&
@@ -9,6 +9,7 @@ GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.sh
+. $TEST_DIRECTORY/lib-unique-files.sh
test_expect_success 'usage on cmd and subcommand invalid option' '
test_expect_code 129 git stash --invalid-option 2>usage &&
@@ -1410,6 +1411,22 @@ test_expect_success 'stash handles skip-worktree entries nicely' '
git rev-parse --verify refs/stash:A.t
'
+
+BATCH_CONFIGURATION='-c core.fsync=loose-object -c core.fsyncmethod=batch'
+
+test_expect_success 'stash with core.fsyncmethod=batch' "
+ test_create_unique_files 2 4 fsync-files &&
+ git $BATCH_CONFIGURATION stash push -u -- ./fsync-files/ &&
+ rm -f fsynced_files &&
+
+ # The files were untracked, so use the third parent,
+ # which contains the untracked files
+ git ls-tree -r stash^3 -- ./fsync-files/ > fsynced_files &&
+ test_line_count = 8 fsynced_files &&
+ awk -- '{print \$3}' fsynced_files | xargs -n1 git cat-file -e
+"
+
+
test_expect_success 'git stash succeeds despite directory/file change' '
test_create_repo directory_file_switch_v1 &&
(
@@ -162,23 +162,25 @@ test_expect_success 'pack-objects with bogus arguments' '
check_unpack () {
test_when_finished "rm -rf git2" &&
- git init --bare git2 &&
- git -C git2 unpack-objects -n <"$1".pack &&
- git -C git2 unpack-objects <"$1".pack &&
- (cd .git && find objects -type f -print) |
- while read path
- do
- cmp git2/$path .git/$path || {
- echo $path differs.
- return 1
- }
- done
+ git $2 init --bare git2 &&
+ (
+ git $2 -C git2 unpack-objects -n <"$1".pack &&
+ git $2 -C git2 unpack-objects <"$1".pack &&
+ git $2 -C git2 cat-file --batch-check="%(objectname)"
+ ) <obj-list >current &&
+ cmp obj-list current
}
test_expect_success 'unpack without delta' '
check_unpack test-1-${packname_1}
'
+BATCH_CONFIGURATION='-c core.fsync=loose-object -c core.fsyncmethod=batch'
+
+test_expect_success 'unpack without delta (core.fsyncmethod=batch)' '
+ check_unpack test-1-${packname_1} "$BATCH_CONFIGURATION"
+'
+
test_expect_success 'pack with REF_DELTA' '
packname_2=$(git pack-objects --progress test-2 <obj-list 2>stderr) &&
check_deltas stderr -gt 0
@@ -188,6 +190,10 @@ test_expect_success 'unpack with REF_DELTA' '
check_unpack test-2-${packname_2}
'
+test_expect_success 'unpack with REF_DELTA (core.fsyncmethod=batch)' '
+ check_unpack test-2-${packname_2} "$BATCH_CONFIGURATION"
+'
+
test_expect_success 'pack with OFS_DELTA' '
packname_3=$(git pack-objects --progress --delta-base-offset test-3 \
<obj-list 2>stderr) &&
@@ -198,6 +204,10 @@ test_expect_success 'unpack with OFS_DELTA' '
check_unpack test-3-${packname_3}
'
+test_expect_success 'unpack with OFS_DELTA (core.fsyncmethod=batch)' '
+ check_unpack test-3-${packname_3} "$BATCH_CONFIGURATION"
+'
+
test_expect_success 'compare delta flavors' '
perl -e '\''
defined($_ = -s $_) or die for @ARGV;