On Thu, Mar 03 2022, Phillip Wood wrote: > On 02/03/2022 23:32, Junio C Hamano wrote: >> "John Cai via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: >> [...] >>> +test_expect_success REFFILES 'drop stash reflog updates refs/stash with rewrite' ' >>> + git init repo && >>> + ( >>> + cd repo && >>> + setup_stash >>> + ) && >> Hmph, so this is done inside the subdirectory. The implementation >> of the helper in this iteration does look cleaner than in the >> previous iteration. >> But these many references to "repo/" and "-C repo" we see below >> makes me wonder why we do not put the whole thing inside the >> subshell we started earlier. >> i.e. >> git init repo && >> ( >> cd repo && >> setup_stash_test && >> echo 9 >file && >> old=$(git rev-parse stash@{0}) && >> git stash && >> new=$(git rev-parse stash@{0}) && >> ... >> test_cmp expect actual >> ) >> > > I wonder if we could avoid the subshell entirely and avoid relying on > REFFILES (assuming we're not trying to test the implementation details > of that refs backend) by doing something like > > test_expect_success 'drop stash reflog updates refs/stash with rewrite' ' > old=$(git rev-parse stash@{0}) && > setup_stash_test && > git rev-list -g stash >tmp && > sed /$old/d tmp >expect && > git rev-list -g stash >actual && > test_cmp expect actual > ' Unless I'm missing something that "rev-list -g" will emit only the RHS of the stash logs, i.e. no "0000..." etc. And if we only look at that the difference with specifying the flag isn't visible, no? >>> + echo 9 >repo/file && >>> + >>> + old_oid="$(git -C repo rev-parse stash@{0})" && >>> + git -C repo stash && >>> + new_oid="$(git -C repo rev-parse stash@{0})" && >>> + >>> + cat >expect <<-EOF && >>> + $(test_oid zero) $old_oid >>> + $old_oid $new_oid >>> + EOF >>> + cut -d" " -f1-2 repo/.git/logs/refs/stash >actual && >>> + test_cmp expect actual && >>> + >>> + git -C repo stash drop stash@{1} && >>> + cut -d" " -f1-2 repo/.git/logs/refs/stash >actual && >>> + cat >expect <<-EOF && >>> + $(test_oid zero) $new_oid >>> + EOF >>> + test_cmp expect actual >>> +' >>> + >>> test_expect_success 'stash pop' ' >>> git reset --hard && >>> git stash pop &&