Skip to content

Commit

Permalink
Merge branch 'en/stash-df-fix'
Browse files Browse the repository at this point in the history
"git stash apply" forgot to attempt restoring untracked files when
it failed to restore changes to tracked ones.

* en/stash-df-fix:
  stash: do not return before restoring untracked files
  • Loading branch information
gitster committed Jan 10, 2022
2 parents 27a70fa + 71cade5 commit 6e22345
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
9 changes: 5 additions & 4 deletions builtin/stash.c
Original file line number Diff line number Diff line change
Expand Up @@ -561,18 +561,19 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
if (index)
fprintf_ln(stderr, _("Index was not unstashed."));

return ret;
goto restore_untracked;
}

if (has_index) {
if (reset_tree(&index_tree, 0, 0))
return -1;
ret = -1;
} else {
unstage_changes_unless_new(&c_tree);
}

restore_untracked:
if (info->has_u && restore_untracked(&info->u_tree))
return error(_("could not restore untracked files from stash"));
ret = error(_("could not restore untracked files from stash"));

if (!quiet) {
struct child_process cp = CHILD_PROCESS_INIT;
Expand All @@ -592,7 +593,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
run_command(&cp);
}

return 0;
return ret;
}

static int apply_stash(int argc, const char **argv, const char *prefix)
Expand Down
24 changes: 24 additions & 0 deletions t/t3903-stash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1395,4 +1395,28 @@ test_expect_success 'git stash can pop directory -> file saved changes' '
)
'

test_expect_success 'restore untracked files even when we hit conflicts' '
git init restore_untracked_after_conflict &&
(
cd restore_untracked_after_conflict &&
echo hi >a &&
echo there >b &&
git add . &&
git commit -m first &&
echo hello >a &&
echo something >c &&
git stash push --include-untracked &&
echo conflict >a &&
git add a &&
git commit -m second &&
test_must_fail git stash pop &&
test_path_is_file c
)
'

test_done

0 comments on commit 6e22345

Please sign in to comment.