summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2015-04-20 20:05:23 -0400
committerEdward Thomson <ethomson@microsoft.com>2015-05-11 14:12:31 -0400
commit12149a20ef7cfb67563c639f2583bce0cadb4df9 (patch)
tree5c3c060c4bece603c80efca52d47996d478588c1
parentf78bb2afb3a7f23264c4adf2e9debfa415ca8107 (diff)
downloadlibgit2-12149a20ef7cfb67563c639f2583bce0cadb4df9.tar.gz
stash apply: default to at least GIT_CHECKOUT_SAFE
-rw-r--r--include/git2/stash.h4
-rw-r--r--src/stash.c5
2 files changed, 6 insertions, 3 deletions
diff --git a/include/git2/stash.h b/include/git2/stash.h
index 070aa9b76..bb17933bc 100644
--- a/include/git2/stash.h
+++ b/include/git2/stash.h
@@ -96,7 +96,9 @@ typedef enum {
* @param repo The owning repository.
* @param index The position within the stash list. 0 points to the
* most recent stashed state.
- * @param checkout_options Options to control how files are checked out
+ * @param checkout_options Options to control how files are checked out.
+ * A minimum strategy of `GIT_CHECKOUT_SAFE` is
+ * implied.
* @param flags Flags to control the applying process. (see GIT_APPLY_* above)
*
* @return 0 on success, GIT_ENOTFOUND if there's no stashed state for the
diff --git a/src/stash.c b/src/stash.c
index e3e025771..3f60ee017 100644
--- a/src/stash.c
+++ b/src/stash.c
@@ -681,11 +681,12 @@ static void normalize_checkout_options(
memcpy(checkout_opts, given_checkout_opts, sizeof(git_checkout_options));
} else {
git_checkout_options default_checkout_opts = GIT_CHECKOUT_OPTIONS_INIT;
- default_checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
-
memcpy(checkout_opts, &default_checkout_opts, sizeof(git_checkout_options));
}
+ if ((checkout_opts->checkout_strategy & (GIT_CHECKOUT_SAFE | GIT_CHECKOUT_FORCE)) == 0)
+ checkout_opts->checkout_strategy = GIT_CHECKOUT_SAFE;
+
if (!checkout_opts->our_label)
checkout_opts->our_label = "Updated upstream";