Merge branch 'en/stash-df-fix'
"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
This commit is contained in:
@ -561,18 +561,19 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
|
|||||||
if (index)
|
if (index)
|
||||||
fprintf_ln(stderr, _("Index was not unstashed."));
|
fprintf_ln(stderr, _("Index was not unstashed."));
|
||||||
|
|
||||||
return ret;
|
goto restore_untracked;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_index) {
|
if (has_index) {
|
||||||
if (reset_tree(&index_tree, 0, 0))
|
if (reset_tree(&index_tree, 0, 0))
|
||||||
return -1;
|
ret = -1;
|
||||||
} else {
|
} else {
|
||||||
unstage_changes_unless_new(&c_tree);
|
unstage_changes_unless_new(&c_tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
restore_untracked:
|
||||||
if (info->has_u && restore_untracked(&info->u_tree))
|
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) {
|
if (!quiet) {
|
||||||
struct child_process cp = CHILD_PROCESS_INIT;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
@ -592,7 +593,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
|
|||||||
run_command(&cp);
|
run_command(&cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int apply_stash(int argc, const char **argv, const char *prefix)
|
static int apply_stash(int argc, const char **argv, const char *prefix)
|
||||||
|
@ -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
|
test_done
|
||||||
|
Reference in New Issue
Block a user