]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Sync with 2.29.3
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 12 Feb 2021 14:51:12 +0000 (15:51 +0100)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 12 Feb 2021 14:51:12 +0000 (15:51 +0100)
* maint-2.29:
  Git 2.29.3
  Git 2.28.1
  Git 2.27.1
  Git 2.26.3
  Git 2.25.5
  Git 2.24.4
  Git 2.23.4
  Git 2.22.5
  Git 2.21.4
  Git 2.20.5
  Git 2.19.6
  Git 2.18.5
  Git 2.17.6
  unpack_trees(): start with a fresh lstat cache
  run-command: invalidate lstat cache after a command finished
  checkout: fix bug that makes checkout follow symlinks in leading path

1  2 
cache.h
git-compat-util.h
run-command.c
t/t0021-conversion.sh
t/t2006-checkout-index-basic.sh

diff --cc cache.h
Simple merge
Simple merge
diff --cc run-command.c
Simple merge
Simple merge
index 8e181dbf01c46a324b54471cc62e1c9291852079,19aada33a338da86629baca816436c38f2243286..7b25a3572e2f0823fa74b126d87d0cf8777cb36a
@@@ -21,15 -21,50 +21,60 @@@ test_expect_success 'checkout-index -h 
        test_i18ngrep "[Uu]sage" broken/usage
  '
  
 +test_expect_success 'checkout-index reports errors (cmdline)' '
 +      test_must_fail git checkout-index -- does-not-exist 2>stderr &&
 +      test_i18ngrep not.in.the.cache stderr
 +'
 +
 +test_expect_success 'checkout-index reports errors (stdin)' '
 +      echo does-not-exist |
 +      test_must_fail git checkout-index --stdin 2>stderr &&
 +      test_i18ngrep not.in.the.cache stderr
 +'
+ for mode in 'case' 'utf-8'
+ do
+       case "$mode" in
+       case)   dir='A' symlink='a' mode_prereq='CASE_INSENSITIVE_FS' ;;
+       utf-8)
+               dir=$(printf "\141\314\210") symlink=$(printf "\303\244")
+               mode_prereq='UTF8_NFD_TO_NFC' ;;
+       esac
+       test_expect_success SYMLINKS,$mode_prereq \
+       "checkout-index with $mode-collision don't write to the wrong place" '
+               git init $mode-collision &&
+               (
+                       cd $mode-collision &&
+                       mkdir target-dir &&
+                       empty_obj_hex=$(git hash-object -w --stdin </dev/null) &&
+                       symlink_hex=$(printf "%s" "$PWD/target-dir" | git hash-object -w --stdin) &&
+                       cat >objs <<-EOF &&
+                       100644 blob ${empty_obj_hex}    ${dir}/x
+                       100644 blob ${empty_obj_hex}    ${dir}/y
+                       100644 blob ${empty_obj_hex}    ${dir}/z
+                       120000 blob ${symlink_hex}      ${symlink}
+                       EOF
+                       git update-index --index-info <objs &&
+                       # Note: the order is important here to exercise the
+                       # case where the file at ${dir} has its type changed by
+                       # the time Git tries to check out ${dir}/z.
+                       #
+                       # Also, we use core.precomposeUnicode=false because we
+                       # want Git to treat the UTF-8 paths transparently on
+                       # Mac OS, matching what is in the index.
+                       #
+                       git -c core.precomposeUnicode=false checkout-index -f \
+                               ${dir}/x ${dir}/y ${symlink} ${dir}/z &&
+                       # Should not create ${dir}/z at ${symlink}/z
+                       test_path_is_missing target-dir/z
+               )
+       '
+ done
  
  test_done