Skip to content

Commit bee8691

Browse files
newrengitster
authored andcommitted
stash: restore untracked files AFTER restoring tracked files
If a user deletes a file and places a directory of untracked files there, then stashes all these changes, the untracked directory of files cannot be restored until after the corresponding file in the way is removed. So, restore changes to tracked files before restoring untracked files. There is no counterpart problem to worry about with the user deleting an untracked file and then add a tracked one in its place. Git does not track untracked files, and so will not know the untracked file was deleted, and thus won't be able to stash the removal of that file. Signed-off-by: Elijah Newren <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 3d40e37 commit bee8691

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

builtin/stash.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,9 +535,6 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
535535
}
536536
}
537537

538-
if (info->has_u && restore_untracked(&info->u_tree))
539-
return error(_("could not restore untracked files from stash"));
540-
541538
init_merge_options(&o, the_repository);
542539

543540
o.branch1 = "Updated upstream";
@@ -572,6 +569,9 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
572569
unstage_changes_unless_new(&c_tree);
573570
}
574571

572+
if (info->has_u && restore_untracked(&info->u_tree))
573+
return error(_("could not restore untracked files from stash"));
574+
575575
if (!quiet) {
576576
struct child_process cp = CHILD_PROCESS_INIT;
577577

t/t3903-stash.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ test_expect_success 'git stash succeeds despite directory/file change' '
13241324
)
13251325
'
13261326

1327-
test_expect_failure 'git stash can pop file -> directory saved changes' '
1327+
test_expect_success 'git stash can pop file -> directory saved changes' '
13281328
test_create_repo directory_file_switch_v2 &&
13291329
(
13301330
cd directory_file_switch_v2 &&
@@ -1344,7 +1344,7 @@ test_expect_failure 'git stash can pop file -> directory saved changes' '
13441344
)
13451345
'
13461346

1347-
test_expect_failure 'git stash can pop directory -> file saved changes' '
1347+
test_expect_success 'git stash can pop directory -> file saved changes' '
13481348
test_create_repo directory_file_switch_v3 &&
13491349
(
13501350
cd directory_file_switch_v3 &&

0 commit comments

Comments
 (0)