]> git.proxmox.com Git - libgit2.git/commitdiff
Remove ignored files from the working directory if they were stashed
authorJacques Germishuys <jacquesg@striata.com>
Tue, 4 Mar 2014 10:22:27 +0000 (12:22 +0200)
committerJacques Germishuys <jacquesg@striata.com>
Tue, 4 Mar 2014 10:22:27 +0000 (12:22 +0200)
src/stash.c
tests/stash/save.c

index b1dd87b2293efb007bdc2cc50b17964a32025641..0c910129464d9e3eb8c35bfbcf96e238ab2a3299 100644 (file)
@@ -465,7 +465,8 @@ static int ensure_there_are_changes_to_stash(
 static int reset_index_and_workdir(
        git_repository *repo,
        git_commit *commit,
-       bool remove_untracked)
+       bool remove_untracked,
+       bool remove_ignored)
 {
        git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
 
@@ -474,6 +475,9 @@ static int reset_index_and_workdir(
        if (remove_untracked)
                opts.checkout_strategy |= GIT_CHECKOUT_REMOVE_UNTRACKED;
 
+       if (remove_ignored)
+               opts.checkout_strategy |= GIT_CHECKOUT_REMOVE_IGNORED;
+
        return git_checkout_tree(repo, (git_object *)commit, &opts);
 }
 
@@ -532,7 +536,8 @@ int git_stash_save(
        if ((error = reset_index_and_workdir(
                repo,
                ((flags & GIT_STASH_KEEP_INDEX) != 0) ? i_commit : b_commit,
-               (flags & GIT_STASH_INCLUDE_UNTRACKED) != 0)) < 0)
+               (flags & GIT_STASH_INCLUDE_UNTRACKED) != 0,
+               (flags & GIT_STASH_INCLUDE_IGNORED) != 0)) < 0)
                goto cleanup;
 
 cleanup:
index b5a793eefe36b1e547ab7b7e138870371a8fde0b..f06c1fb71e8816a0a5120e80ee54e7c3b6c0addf 100644 (file)
@@ -159,6 +159,8 @@ void test_stash_save__can_include_untracked_and_ignored_files(void)
        assert_blob_oid("refs/stash^3:who", NULL);
        assert_blob_oid("refs/stash^3:when", "b6ed15e81e2593d7bb6265eb4a991d29dc3e628b");
        assert_blob_oid("refs/stash^3:just.ignore", "78925fb1236b98b37a35e9723033e627f97aa88b");
+
+       cl_assert(!git_path_exists("stash/just.ignore"));
 }
 
 #define MESSAGE "Look Ma! I'm on TV!"