diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-03-03 10:08:28 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-03-03 10:08:28 -0500 |
commit | 018fdbb5809469c917eb04c01e929050df30846f (patch) | |
tree | 73b832d3e55f66f7db73d2bcab515094a0500815 | |
parent | 72ca65d538d1e3ab7a9052613412bf121470dfd6 (diff) | |
parent | 09866d6f84a644c4dff258055c570d619fe7bad7 (diff) | |
download | libgit2-018fdbb5809469c917eb04c01e929050df30846f.tar.gz |
Merge pull request #2913 from ethomson/stash_fixup
stash: correctly stash wd modified/index deleted
-rw-r--r-- | src/stash.c | 3 | ||||
-rw-r--r-- | tests/stash/save.c | 19 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/stash.c b/src/stash.c index 1cd64a6fe..8aa48cafe 100644 --- a/src/stash.c +++ b/src/stash.c @@ -313,8 +313,7 @@ static int build_workdir_tree( if ((error = git_commit_tree(&b_tree, b_commit)) < 0) goto cleanup; - if ((error = git_diff_tree_to_workdir_with_index( - &diff, repo, b_tree, &opts)) < 0) + if ((error = git_diff_tree_to_workdir(&diff, repo, b_tree, &opts)) < 0) goto cleanup; data.include_changed = true; diff --git a/tests/stash/save.c b/tests/stash/save.c index 78eee4a04..e07877516 100644 --- a/tests/stash/save.c +++ b/tests/stash/save.c @@ -399,3 +399,22 @@ void test_stash_save__skip_submodules(void) assert_status(repo, "untracked_repo/", GIT_STATUS_WT_NEW); } + +void test_stash_save__deleted_in_index_modified_in_workdir(void) +{ + git_index *index; + + git_repository_index(&index, repo); + + cl_git_pass(git_index_remove_bypath(index, "who")); + cl_git_pass(git_index_write(index)); + + assert_status(repo, "who", GIT_STATUS_WT_NEW | GIT_STATUS_INDEX_DELETED); + + cl_git_pass(git_stash_save(&stash_tip_oid, repo, signature, NULL, GIT_STASH_DEFAULT)); + + assert_blob_oid("stash@{0}^0:who", "a0400d4954659306a976567af43125a0b1aa8595"); + assert_blob_oid("stash@{0}^2:who", NULL); + + git_index_free(index); +} |