On 03/03/2022 16:52, Ævar Arnfjörð Bjarmason wrote:
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?
Maybe I'm missing what this test is actually needs to do. I thought it
just needed to check that the deleted stash is removed from the reflog
and the others are unchanged. You're right that it wont show the LHS and
if that is important then you need to read the log file directly.
Best Wishes
Phillip
+ 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 &&