1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-11-16 06:03:44 +01:00
git/t/t3010-ls-files-killed-modified.sh
Junio C Hamano e03a5010b3 Merge branch 'jc/ls-files-killed-optim' into maint
"git ls-files -k" needs to crawl only the part of the working tree
that may overlap the paths in the index to find killed files, but
shared code with the logic to find all the untracked files, which
made it unnecessarily inefficient.

* jc/ls-files-killed-optim:
  dir.c::test_one_path(): work around directory_exists_in_index_icase() breakage
  t3010: update to demonstrate "ls-files -k" optimization pitfalls
  ls-files -k: a directory only can be killed if the index has a non-directory
  dir.c: use the cache_* macro to access the current index
2013-10-23 13:33:08 -07:00

129 lines
2.9 KiB
Bash
Executable file

#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#
test_description='git ls-files -k and -m flags test.
This test prepares the following in the cache:
path0 - a file
path1 - a symlink
path2/file2 - a file in a directory
path3/file3 - a file in a directory
pathx/ju - a file in a directory
submod1/ - a submodule
submod2/ - another submodule
and the following on the filesystem:
path0/file0 - a file in a directory
path1/file1 - a file in a directory
path2 - a file
path3 - a symlink
path4 - a file
path5 - a symlink
path6/file6 - a file in a directory
pathx/ju/nk - a file in a directory to be killed
submod1/ - a submodule (modified from the cache)
submod2/ - a submodule (matches the cache)
git ls-files -k should report that existing filesystem objects
path0/*, path1/*, path2 and path3 to be killed.
Also for modification test, the cache and working tree have:
path7 - an empty file, modified to a non-empty file.
path8 - a non-empty file, modified to an empty file.
path9 - an empty file, cache dirtied.
path10 - a non-empty file, cache dirtied.
We should report path0, path1, path2/file2, path3/file3, path7 and path8
modified without reporting path9 and path10. submod1 is also modified.
'
. ./test-lib.sh
test_expect_success 'git update-index --add to add various paths.' '
date >path0 &&
test_ln_s_add xyzzy path1 &&
mkdir path2 path3 pathx &&
date >path2/file2 &&
date >path3/file3 &&
>pathx/ju &&
: >path7 &&
date >path8 &&
: >path9 &&
date >path10 &&
git update-index --add -- path0 path?/file? pathx/ju path7 path8 path9 path10 &&
for i in 1 2
do
git init submod$i &&
(
cd submod$i && git commit --allow-empty -m "empty $i"
) || break
done &&
git update-index --add submod[12]
(
cd submod1 &&
git commit --allow-empty -m "empty 1 (updated)"
) &&
rm -fr path? # leave path10 alone
'
test_expect_success 'git ls-files -k to show killed files.' '
date >path2 &&
if test_have_prereq SYMLINKS
then
ln -s frotz path3 &&
ln -s nitfol path5
else
date >path3 &&
date >path5
fi &&
mkdir -p path0 path1 path6 pathx/ju &&
date >path0/file0 &&
date >path1/file1 &&
date >path6/file6 &&
date >path7 &&
: >path8 &&
: >path9 &&
touch path10 &&
>pathx/ju/nk &&
cat >.expected <<-\EOF
path0/file0
path1/file1
path2
path3
pathx/ju/nk
EOF
'
test_expect_success 'git ls-files -k output (w/o icase)' '
git ls-files -k >.output
test_cmp .expected .output
'
test_expect_success 'git ls-files -k output (w/ icase)' '
git -c core.ignorecase=true ls-files -k >.output
test_cmp .expected .output
'
test_expect_success 'git ls-files -m to show modified files.' '
git ls-files -m >.output
'
test_expect_success 'validate git ls-files -m output.' '
cat >.expected <<-\EOF &&
path0
path1
path2/file2
path3/file3
path7
path8
pathx/ju
submod1
EOF
test_cmp .expected .output
'
test_done