Subject: Re: [PATCH] status: add a failing test showing a core.untrackedCache bug

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Wed, 27 Dec 2017 19:50:29 +0100

On Wed, Dec 27 2017, Junio C. Hamano jotted:

> Ævar Arnfjörð Bjarmason  <[email-masked]> writes:
>
>> +status_is_clean() {
>> +	>../status.expect &&
>> +	git status --porcelain >../status.actual &&
>> +	test_cmp ../status.expect ../status.actual
>> +}
>> +
>>  test_lazy_prereq UNTRACKED_CACHE '
>>  	{ git update-index --test-untracked-cache; ret=$?; } &&
>>  	test $ret -ne 1
>> @@ -683,4 +689,43 @@ test_expect_success 'untracked cache survives a commit' '
>>  	test_cmp ../before ../after
>>  '
>>
>> +test_expect_success 'teardown worktree' '
>> +    cd ..
>> +'
>
> Funny indentation.

Thanks. I'll submit a new series with all 3 patches with the issues you
brought up mentioned...

>> +test_expect_success 'setup worktree for symlink test' '
>> +	git init worktree-symlink &&
>> +	cd worktree-symlink &&
>> +	git config core.untrackedCache true &&
>> +	mkdir one two &&
>> +	touch one/file two/file &&
>> +	git add one/file two/file &&
>> +	git commit -m"first commit" &&
>> +	git rm -rf one &&
>> +	ln -s two one &&
>> +	git add one &&
>> +	git commit -m"second commit"
>> +'
>
> This needs SYMLINKS prereq, which in turn means it cannot be tested
> on certain platforms.  I thought Duy's answer was that this does not
> need to involve a symbolic link at all?  If so, perhaps we can have
> another test that does not need symlink?

... as soon as I figure out how to add such a non-symlink test as well
(seems sensible to test both), but I can't bring it to fail without
symlinks, I just adjusted my test script to do this instead:

    (
        rm -rf /tmp/testrepo &&
        git init /tmp/testrepo &&
        cd /tmp/testrepo &&
        mkdir x y &&
        touch x/a y/b &&
        git add x/a y/b &&
        git commit -msnap &&
        git rm -rf y &&
        mkdir y &&
        touch y/c &&
        git add y &&
        git commit -msnap2 &&
        git checkout HEAD~ &&
        git status &&
        git checkout master &&
        sleep 1 &&
        git status &&
        git status
    )

Duy, what am I missing here?