Skip to content

Commit 5932e4b

Browse files
committed
Merge branch 'pw/stash-p-pathspec-fixes' into next
"git stash -p <pathspec>" improvements. * pw/stash-p-pathspec-fixes: stash: allow "git stash [<options>] --patch <pathspec>" to assume push stash: allow "git stash -p <pathspec>" to assume push again
2 parents 041162a + 468817b commit 5932e4b

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

builtin/stash.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,11 +1789,15 @@ static int push_stash(int argc, const char **argv, const char *prefix,
17891789
int ret;
17901790

17911791
if (argc) {
1792-
force_assume = !strcmp(argv[0], "-p");
1792+
int flags = PARSE_OPT_KEEP_DASHDASH;
1793+
1794+
if (push_assumed)
1795+
flags |= PARSE_OPT_STOP_AT_NON_OPTION;
1796+
17931797
argc = parse_options(argc, argv, prefix, options,
17941798
push_assumed ? git_stash_usage :
1795-
git_stash_push_usage,
1796-
PARSE_OPT_KEEP_DASHDASH);
1799+
git_stash_push_usage, flags);
1800+
force_assume |= patch_mode;
17971801
}
17981802

17991803
if (argc) {

t/t3903-stash.sh

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,28 @@ test_expect_success 'stash -- <pathspec> stashes and restores the file' '
11771177
test_path_is_file bar
11781178
'
11791179

1180+
test_expect_success 'stash --patch <pathspec> stash and restores the file' '
1181+
test_write_lines b c >file &&
1182+
git commit -m "add a few lines" file &&
1183+
test_write_lines a b c d >file &&
1184+
test_write_lines b c d >expect-file &&
1185+
echo changed-other-file >other-file &&
1186+
test_write_lines s y n | git stash -m "stash bar" --patch file &&
1187+
test_cmp expect-file file &&
1188+
echo changed-other-file >expect &&
1189+
test_cmp expect other-file &&
1190+
git checkout HEAD -- file &&
1191+
git stash pop &&
1192+
test_cmp expect other-file &&
1193+
test_write_lines a b c >expect &&
1194+
test_cmp expect file
1195+
'
1196+
1197+
test_expect_success 'stash <pathspec> -p is rejected' '
1198+
test_must_fail git stash file -p 2>err &&
1199+
test_grep "subcommand wasn${SQ}t specified; ${SQ}push${SQ} can${SQ}t be assumed due to unexpected token ${SQ}file${SQ}" err
1200+
'
1201+
11801202
test_expect_success 'stash -- <pathspec> stashes in subdirectory' '
11811203
mkdir sub &&
11821204
>foo &&

0 commit comments

Comments
 (0)