From 94c988f6d6f4930ee4c120f6ce7932b5e49637be Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Mon, 20 Apr 2015 17:19:08 -0400 Subject: rebase: include checkout opts within rebase opts --- include/git2/rebase.h | 5 +++-- src/rebase.c | 20 ++++++-------------- tests/rebase/merge.c | 3 ++- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/include/git2/rebase.h b/include/git2/rebase.h index 370792f58..b85f7e2aa 100644 --- a/include/git2/rebase.h +++ b/include/git2/rebase.h @@ -55,7 +55,7 @@ typedef struct { * and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in * `abort` to match git semantics. */ - git_checkout_options *checkout_options; + git_checkout_options checkout_options; } git_rebase_options; /** @@ -100,7 +100,8 @@ typedef enum { } git_rebase_operation_t; #define GIT_REBASE_OPTIONS_VERSION 1 -#define GIT_REBASE_OPTIONS_INIT {GIT_REBASE_OPTIONS_VERSION} +#define GIT_REBASE_OPTIONS_INIT \ + {GIT_REBASE_OPTIONS_VERSION, 0, NULL, GIT_CHECKOUT_OPTIONS_INIT} /** Indicates that a rebase operation is not (yet) in progress. */ #define GIT_REBASE_NO_OPERATION SIZE_MAX diff --git a/src/rebase.c b/src/rebase.c index 5f1ba563a..b636e7951 100644 --- a/src/rebase.c +++ b/src/rebase.c @@ -58,7 +58,6 @@ struct git_rebase { git_repository *repo; git_rebase_options options; - git_checkout_options checkout_options; git_rebase_type_t type; char *state_path; @@ -264,20 +263,13 @@ static git_rebase *rebase_alloc(const git_rebase_options *rebase_opts) else git_rebase_init_options(&rebase->options, GIT_REBASE_OPTIONS_VERSION); - if (rebase_opts && rebase_opts->checkout_options) - memcpy(&rebase->checkout_options, rebase_opts->checkout_options, sizeof(git_checkout_options)); - else - git_checkout_init_options(&rebase->checkout_options, GIT_CHECKOUT_OPTIONS_VERSION); - if (rebase_opts && rebase_opts->rewrite_notes_ref) { if ((rebase->options.rewrite_notes_ref = git__strdup(rebase_opts->rewrite_notes_ref)) == NULL) return NULL; } - rebase->options.checkout_options = NULL; - - if ((rebase->checkout_options.checkout_strategy & (GIT_CHECKOUT_SAFE | GIT_CHECKOUT_FORCE)) == 0) - rebase->checkout_options.checkout_strategy = GIT_CHECKOUT_SAFE; + if ((rebase->options.checkout_options.checkout_strategy & (GIT_CHECKOUT_SAFE | GIT_CHECKOUT_FORCE)) == 0) + rebase->options.checkout_options.checkout_strategy = GIT_CHECKOUT_SAFE; return rebase; } @@ -287,7 +279,7 @@ static int rebase_check_versions(const git_rebase_options *given_opts) GITERR_CHECK_VERSION(given_opts, GIT_REBASE_OPTIONS_VERSION, "git_rebase_options"); if (given_opts) - GITERR_CHECK_VERSION(given_opts->checkout_options, GIT_CHECKOUT_OPTIONS_VERSION, "git_checkout_options"); + GITERR_CHECK_VERSION(&given_opts->checkout_options, GIT_CHECKOUT_OPTIONS_VERSION, "git_checkout_options"); return 0; } @@ -701,7 +693,7 @@ int git_rebase_init( (error = git_buf_printf(&reflog, "rebase: checkout %s", rebase_onto_name(onto))) < 0 || (error = git_checkout_tree( - repo, (git_object *)onto_commit, &rebase->checkout_options)) < 0 || + repo, (git_object *)onto_commit, &rebase->options.checkout_options)) < 0 || (error = git_reference_create(&head_ref, repo, GIT_HEAD_FILE, git_annotated_commit_id(onto), 1, reflog.ptr)) < 0) goto done; @@ -726,7 +718,7 @@ static void normalize_checkout_options_for_apply( git_rebase *rebase, git_commit *current_commit) { - memcpy(checkout_opts, &rebase->checkout_options, sizeof(git_checkout_options)); + memcpy(checkout_opts, &rebase->options.checkout_options, sizeof(git_checkout_options)); if (!checkout_opts->ancestor_label) checkout_opts->ancestor_label = "ancestor"; @@ -969,7 +961,7 @@ int git_rebase_abort(git_rebase *rebase) if ((error = git_commit_lookup( &orig_head_commit, rebase->repo, &rebase->orig_head_id)) < 0 || (error = git_reset(rebase->repo, (git_object *)orig_head_commit, - GIT_RESET_HARD, &rebase->checkout_options)) < 0) + GIT_RESET_HARD, &rebase->options.checkout_options)) < 0) goto done; error = rebase_cleanup(rebase); diff --git a/tests/rebase/merge.c b/tests/rebase/merge.c index 4371f1f1f..12f0de5a0 100644 --- a/tests/rebase/merge.c +++ b/tests/rebase/merge.c @@ -533,7 +533,8 @@ void test_rebase_merge__custom_checkout_options(void) checkout_options.progress_cb = rebase_checkout_progress_cb; checkout_options.progress_payload = &called; - rebase_options.checkout_options = &checkout_options; + memcpy(&rebase_options.checkout_options, &checkout_options, + sizeof(git_checkout_options)); cl_git_pass(git_reference_lookup(&branch_ref, repo, "refs/heads/beef")); cl_git_pass(git_reference_lookup(&upstream_ref, repo, "refs/heads/master")); -- cgit v1.2.1