#!/bin/sh test_description='test untracked cache' . ./test-lib.sh avoid_racy() { sleep 1 } # It's fine if git update-index returns an error code other than one, # it'll be caught in the first test. test_lazy_prereq UNTRACKED_CACHE ' { git update-index --untracked-cache; ret=$?; } && test $ret -ne 1 ' if ! test_have_prereq UNTRACKED_CACHE; then skip_all='This system does not support untracked cache' test_done fi test_expect_success 'setup' ' git init worktree && cd worktree && mkdir done dtwo dthree && touch one two three done/one dtwo/two dthree/three && git add one two done/one && : >.git/info/exclude && git update-index --untracked-cache ' test_expect_success 'untracked cache is empty' ' test-dump-untracked-cache >../actual && cat >../expect <../status.expect <../dump.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && test_cmp ../status.expect ../actual && cat >../trace.expect <../actual && test_cmp ../dump.expect ../actual ' test_expect_success 'status second time (fully populated cache)' ' avoid_racy && : >../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && test_cmp ../status.expect ../actual && cat >../trace.expect <../actual && test_cmp ../dump.expect ../actual ' test_expect_success 'modify in root directory, one dir invalidation' ' avoid_racy && : >four && : >../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && cat >../status.expect <../trace.expect <../actual && cat >../expect <.gitignore && : >../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && cat >../status.expect <../trace.expect <../actual && cat >../expect <>.git/info/exclude && : >../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && cat >../status.expect <../trace.expect <../actual && cat >../expect <../actual && cat >../expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && cat >../status.expect <../trace.expect <../actual && cat >../expect <../actual && cat >../expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && cat >../status.expect <../trace.expect <../actual && cat >../expect <