worktree: checkout options suggestions from code review
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
diff --git a/include/git2/worktree.h b/include/git2/worktree.h
index ee6b04b..8691f96 100644
--- a/include/git2/worktree.h
+++ b/include/git2/worktree.h
@@ -90,7 +90,7 @@ typedef struct git_worktree_add_options {
/**
* Options for the checkout.
*/
- git_checkout_options checkout_opts;
+ git_checkout_options checkout_options;
} git_worktree_add_options;
#define GIT_WORKTREE_ADD_OPTIONS_VERSION 1
diff --git a/src/worktree.c b/src/worktree.c
index 6bf6042..2ac2274 100644
--- a/src/worktree.c
+++ b/src/worktree.c
@@ -304,16 +304,13 @@ int git_worktree_add(git_worktree **out, git_repository *repo,
git_reference *ref = NULL, *head = NULL;
git_commit *commit = NULL;
git_repository *wt = NULL;
- git_checkout_options coopts = GIT_CHECKOUT_OPTIONS_INIT;
+ git_checkout_options coopts;
git_worktree_add_options wtopts = GIT_WORKTREE_ADD_OPTIONS_INIT;
int err;
GIT_ERROR_CHECK_VERSION(
opts, GIT_WORKTREE_ADD_OPTIONS_VERSION, "git_worktree_add_options");
- if (opts)
- memcpy(&wtopts, opts, sizeof(wtopts));
-
GIT_ASSERT_ARG(out);
GIT_ASSERT_ARG(repo);
GIT_ASSERT_ARG(name);
@@ -321,6 +318,11 @@ int git_worktree_add(git_worktree **out, git_repository *repo,
*out = NULL;
+ if (opts)
+ memcpy(&wtopts, opts, sizeof(wtopts));
+
+ memcpy(&coopts, &wtopts.checkout_options, sizeof(coopts));
+
if (wtopts.ref) {
if (!git_reference_is_branch(wtopts.ref)) {
git_error_set(GIT_ERROR_WORKTREE, "reference is not a branch");
@@ -405,8 +407,6 @@ int git_worktree_add(git_worktree **out, git_repository *repo,
goto out;
/* Checkout worktree's HEAD */
- if (opts != NULL)
- memcpy(&coopts, &wtopts.checkout_opts, sizeof(coopts));
if ((err = git_checkout_head(wt, &coopts)) < 0)
goto out;
diff --git a/tests/worktree/worktree.c b/tests/worktree/worktree.c
index ccb6cde..66273d1 100644
--- a/tests/worktree/worktree.c
+++ b/tests/worktree/worktree.c
@@ -300,7 +300,7 @@ void test_worktree_worktree__add_no_checkout(void)
git_str path = GIT_STR_INIT;
git_worktree_add_options opts = GIT_WORKTREE_ADD_OPTIONS_INIT;
- opts.checkout_opts.checkout_strategy = GIT_CHECKOUT_NONE;
+ opts.checkout_options.checkout_strategy = GIT_CHECKOUT_NONE;
cl_git_pass(git_str_joinpath(&path, fixture.repo->workdir, "../worktree-no-checkout"));
cl_git_pass(git_worktree_add(&wt, fixture.repo, "worktree-no-checkout", path.ptr, &opts));