[PATCH 3/3] stash: restore untracked files AFTER restoring tracked files

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

 



From: Elijah Newren <newren@xxxxxxxxx>

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 similar problem to worry about in the opposite directory,
because untracked files are always additive.  Said another way, there's
no way to "stash a removal of an untracked file" because if an untracked
file is removed, git simply doesn't know about it.

Signed-off-by: Elijah Newren <newren@xxxxxxxxx>
---
 builtin/stash.c  | 6 +++---
 t/t3903-stash.sh | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/builtin/stash.c b/builtin/stash.c
index b85cf9d267e..9a1f6a5a854 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -530,9 +530,6 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 		}
 	}
 
-	if (info->has_u && restore_untracked(&info->u_tree))
-		return error(_("could not restore untracked files from stash"));
-
 	init_merge_options(&o, the_repository);
 
 	o.branch1 = "Updated upstream";
@@ -567,6 +564,9 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 		unstage_changes_unless_new(&c_tree);
 	}
 
+	if (info->has_u && restore_untracked(&info->u_tree))
+		return error(_("could not restore untracked files from stash"));
+
 	if (!quiet) {
 		struct child_process cp = CHILD_PROCESS_INIT;
 
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index fc74918ccc0..bfd3158a502 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -1325,7 +1325,7 @@ test_expect_success 'git stash succeeds despite directory/file change' '
 	)
 '
 
-test_expect_failure 'git stash can pop directory/file saved changes' '
+test_expect_success 'git stash can pop directory/file saved changes' '
 	test_create_repo directory_file_switch_v2 &&
 	(
 		cd directory_file_switch_v2 &&
-- 
gitgitgadget



[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