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,24 @@ test_expect_success \
'Test that "git add -- -q" works' \
'touch -- -q && git add -- -q'
+test_expect_success 'git add: core.fsyncobjectfiles=batch' "
+ test_create_unique_files 2 4 fsync-files &&
+ git -c core.fsyncobjectfiles=batch 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.fsyncobjectfiles=batch' "
+ test_create_unique_files 2 4 fsync-files2 &&
+ find fsync-files2 ! -type d -print | xargs git -c core.fsyncobjectfiles=batch 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
diff_cmp () {
for i in "$1" "$2"
@@ -1293,6 +1294,19 @@ test_expect_success 'stash handles skip-worktree entries nicely' '
git rev-parse --verify refs/stash:A.t
'
+test_expect_success 'stash with core.fsyncobjectfiles=batch' "
+ test_create_unique_files 2 4 fsync-files &&
+ git -c core.fsyncobjectfiles=batch 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 'stash -c stash.useBuiltin=false warning ' '
expected="stash.useBuiltin support has been removed" &&
@@ -162,23 +162,23 @@ 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}
'
+test_expect_success 'unpack without delta (core.fsyncobjectfiles=batch)' '
+ check_unpack test-1-${packname_1} "-c core.fsyncobjectfiles=batch"
+'
+
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 +188,10 @@ test_expect_success 'unpack with REF_DELTA' '
check_unpack test-2-${packname_2}
'
+test_expect_success 'unpack with REF_DELTA (core.fsyncobjectfiles=batch)' '
+ check_unpack test-2-${packname_2} "-c core.fsyncobjectfiles=batch"
+'
+
test_expect_success 'pack with OFS_DELTA' '
packname_3=$(git pack-objects --progress --delta-base-offset test-3 \
<obj-list 2>stderr) &&
@@ -198,6 +202,10 @@ test_expect_success 'unpack with OFS_DELTA' '
check_unpack test-3-${packname_3}
'
+test_expect_success 'unpack with OFS_DELTA (core.fsyncobjectfiles=batch)' '
+ check_unpack test-3-${packname_3} "-c core.fsyncobjectfiles=batch"
+'
+
test_expect_success 'compare delta flavors' '
perl -e '\''
defined($_ = -s $_) or die for @ARGV;