Re: [PATCH v2 1/2] stash: allow "git stash -p <pathspec>" to assume push again

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 20 May 2025 at 11:27, Phillip Wood <phillip.wood123@xxxxxxxxx> wrote:
>
> Fix this by regression by checking argv[1] instead of argv[0] and add a
> couple of tests to prevent future regressions.

>         if (argc) {
> -               force_assume = !strcmp(argv[0], "-p");
> +               force_assume = argc > 1 && !strcmp(argv[1], "-p");
>                 argc = parse_options(argc, argv, prefix, options,
>                                      push_assumed ? git_stash_usage :
>                                      git_stash_push_usage,

After reading up on 8c3713cede (stash: eliminate crude option parsing,
2020-02-17), I share your analysis. This fix looks correct to me.

> +test_expect_success 'stash -p <pathspec> stash and restores the file' '
> +       cat file >expect-file &&
> +       echo changed-file >file &&
> +       echo changed-other-file >other-file &&
> +       echo a | git stash -p file &&
> +       test_cmp expect-file file &&
> +       echo changed-other-file >expect &&
> +       test_cmp expect other-file &&
> +       git stash pop &&
> +       test_cmp expect other-file &&
> +       echo changed-file >expect &&
> +       test_cmp expect file
> +'

This only exercises the patch machinery fairly trivially: all hunks are
added. The implementation under test could miss `-p` completely and
behave as `git stash push -- file` or some variant of it, and this test
would continue to pass. (Confirmed by editing the test to not use `-p`
and seeing it run successfully.)

It might be worthwhile to set up some more elaborate scenario where you
pick only some hunks, e.g., this (whitespace-damaged) diff:

diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index d24559a328..3b28504126 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -1178,16 +1178,19 @@ test_expect_success 'stash -- <pathspec>
stashes and restores the file' '
 '

test_expect_success 'stash -p <pathspec> stash and restores the file' '
-       cat file >expect-file &&
-       echo changed-file >file &&
+       test_write_lines b c >file &&
+       git commit -m "a few lines" -- file &&
+       test_write_lines a b c d >file &&
+       test_write_lines b c d >expect-file &&
       echo changed-other-file >other-file &&
-       echo a | git stash -p file &&
+       test_write_lines s y n | git stash -p file &&
       test_cmp expect-file file &&
       echo changed-other-file >expect &&
       test_cmp expect other-file &&
+       test_write_lines b c >file &&
       git stash pop &&
       test_cmp expect other-file &&
-       echo changed-file >expect &&
+       test_write_lines a b c >expect &&
       test_cmp expect file
 '


Martin




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux