From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Elijah Newren" <newren@gmail.com>,
"Taylor Blau" <me@ttaylorr.com>,
"Peter Baumann" <peter.baumann@gmail.com>,
"Jonathan Tan" <jonathantanmy@google.com>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Jacob Keller" <jacob.keller@gmail.com>,
"Elijah Newren" <newren@gmail.com>
Subject: [PATCH v5 0/4] Beginning of new merge strategy: New API, empty implementation
Date: Mon, 02 Nov 2020 23:45:30 +0000 [thread overview]
Message-ID: <pull.895.v5.git.git.1604360734.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.895.v4.git.git.1604003535.gitgitgadget@gmail.com>
In this series, I show the new merge API I have developed in merge-ort, and
show how it differs from that provided by merge-recursive. I do this in four
steps, each corresponding to a patch.
Changes since v4:
* Fix a bug where 'cherry-pick --continue' would report 'fatal:
cherry-pick: --strategy cannot be used with --continue' when pull.twohead
was set to ort (found by user of internal deployment at $DAYJOB)
Elijah Newren (4):
merge-ort: barebones API of new merge strategy with empty
implementation
merge-ort-wrappers: new convience wrappers to mimic the old merge API
fast-rebase: demonstrate merge-ort's API via new test-tool command
merge,rebase,revert: select ort or recursive by config or environment
Makefile | 3 +
builtin/merge.c | 26 ++++-
builtin/rebase.c | 13 ++-
builtin/revert.c | 7 ++
merge-ort-wrappers.c | 62 +++++++++++
merge-ort-wrappers.h | 25 +++++
merge-ort.c | 52 +++++++++
merge-ort.h | 58 ++++++++++
sequencer.c | 72 ++++++++++--
sequencer.h | 1 +
t/helper/test-fast-rebase.c | 211 ++++++++++++++++++++++++++++++++++++
t/helper/test-tool.c | 1 +
t/helper/test-tool.h | 1 +
13 files changed, 517 insertions(+), 15 deletions(-)
create mode 100644 merge-ort-wrappers.c
create mode 100644 merge-ort-wrappers.h
create mode 100644 merge-ort.c
create mode 100644 merge-ort.h
create mode 100644 t/helper/test-fast-rebase.c
base-commit: 69986e19ffcfb9af674ae5180689ab7bbf92ed28
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-895%2Fnewren%2Fort-api-with-empty-implementation-v5
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-895/newren/ort-api-with-empty-implementation-v5
Pull-Request: https://github.com/git/git/pull/895
Range-diff vs v4:
1: 3357ea415e = 1: 3357ea415e merge-ort: barebones API of new merge strategy with empty implementation
2: d7f6a834ab = 2: d7f6a834ab merge-ort-wrappers: new convience wrappers to mimic the old merge API
3: fce0db8778 = 3: fce0db8778 fast-rebase: demonstrate merge-ort's API via new test-tool command
4: 75d19804bd ! 4: 61217a83bd merge,rebase,revert: select ort or recursive by config or environment
@@ builtin/rebase.c: static struct replay_opts get_replay_opts(const struct rebase_
- replay.strategy = opts->strategy;
+ if (opts->strategy)
+ replay.strategy = opts->strategy;
++ else if (!replay.strategy && replay.default_strategy) {
++ replay.strategy = replay.default_strategy;
++ replay.default_strategy = NULL;
++ }
if (opts->strategy_opts)
parse_strategy_opts(&replay, opts->strategy_opts);
@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
case REBASE_PRESERVE_MERGES:
## builtin/revert.c ##
+@@ builtin/revert.c: static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
+ NULL);
+ }
+
++ if (!opts->strategy && opts->default_strategy) {
++ opts->strategy = opts->default_strategy;
++ opts->default_strategy = NULL;
++ }
++
+ if (opts->allow_ff)
+ verify_opt_compatible(me, "--ff",
+ "--signoff", opts->signoff,
@@ builtin/revert.c: static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
/* These option values will be free()d */
opts->gpg_sign = xstrdup_or_null(opts->gpg_sign);
@@ sequencer.c: static int git_sequencer_config(const char *k, const char *v, void
return 0;
}
-+ if (!opts->strategy && !strcmp(k, "pull.twohead")) {
-+ int ret = git_config_string((const char**)&opts->strategy, k, v);
++ if (!opts->default_strategy && !strcmp(k, "pull.twohead")) {
++ int ret = git_config_string((const char**)&opts->default_strategy, k, v);
+ if (ret == 0) {
+ /*
+ * pull.twohead is allowed to be multi-valued; we only
+ * care about the first value.
+ */
-+ char *tmp = strchr(opts->strategy, ' ');
++ char *tmp = strchr(opts->default_strategy, ' ');
+ if (tmp)
+ *tmp = '\0';
+ }
@@ sequencer.c: static int git_sequencer_config(const char *k, const char *v, void
status = git_gpg_config(k, v, NULL);
if (status)
return status;
+@@ sequencer.c: int sequencer_remove_state(struct replay_opts *opts)
+ free(opts->committer_name);
+ free(opts->committer_email);
+ free(opts->gpg_sign);
++ free(opts->default_strategy);
+ free(opts->strategy);
+ for (i = 0; i < opts->xopts_nr; i++)
+ free(opts->xopts[i]);
@@ sequencer.c: static int do_recursive_merge(struct repository *r,
struct replay_opts *opts)
{
@@ sequencer.c: static int do_merge(struct repository *r,
if (ret <= 0)
fputs(o.obuf.buf, stdout);
strbuf_release(&o.obuf);
+
+ ## sequencer.h ##
+@@ sequencer.h: struct replay_opts {
+ int explicit_cleanup;
+
+ /* Merge strategy */
++ char *default_strategy; /* from config options */
+ char *strategy;
+ char **xopts;
+ size_t xopts_nr, xopts_alloc;
--
gitgitgadget
next prev parent reply other threads:[~2020-11-02 23:45 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-21 13:22 [PATCH 0/4] Beginning of new merge strategy: New API, empty implementation Elijah Newren via GitGitGadget
2020-10-21 13:22 ` [PATCH 1/4] merge-ort: barebones API of new merge strategy with " Elijah Newren via GitGitGadget
2020-10-23 18:12 ` Taylor Blau
2020-10-23 19:02 ` Elijah Newren
2020-10-24 10:46 ` Peter Baumann
[not found] ` <CAJm9OHczJJyn=Oq2RBGvTit4hedqs6vaYH1gto-z6emo6=n2dw@mail.gmail.com>
[not found] ` <CAJm9OHdfxh8SGdteD48eDCA=ihGZmKJD-E67PFhCdFR63RSSTA@mail.gmail.com>
2020-10-24 14:54 ` Elijah Newren
2020-10-21 13:22 ` [PATCH 2/4] merge-ort-wrappers: new convience wrappers to mimic the old merge API Elijah Newren via GitGitGadget
2020-10-21 13:22 ` [PATCH 3/4] fast-rebase: demonstrate merge-ort's API via temporary/hidden command Elijah Newren via GitGitGadget
2020-10-21 13:22 ` [PATCH 4/4] merge,rebase,revert: select ort or recursive by config or environment Elijah Newren via GitGitGadget
2020-10-22 0:16 ` [PATCH 0/4] Beginning of new merge strategy: New API, empty implementation Elijah Newren
2020-10-26 21:56 ` Jonathan Tan
2020-10-27 0:52 ` Elijah Newren
2020-10-26 16:57 ` [PATCH v2 " Elijah Newren via GitGitGadget
2020-10-26 16:57 ` [PATCH v2 1/4] merge-ort: barebones API of new merge strategy with " Elijah Newren via GitGitGadget
2020-10-26 20:45 ` Junio C Hamano
2020-10-26 21:18 ` Elijah Newren
2020-10-26 22:10 ` Junio C Hamano
2020-10-26 22:28 ` Elijah Newren
2020-10-26 16:57 ` [PATCH v2 2/4] merge-ort-wrappers: new convience wrappers to mimic the old merge API Elijah Newren via GitGitGadget
2020-10-26 16:57 ` [PATCH v2 3/4] fast-rebase: demonstrate merge-ort's API via temporary/hidden command Elijah Newren via GitGitGadget
2020-10-26 16:57 ` [PATCH v2 4/4] merge,rebase,revert: select ort or recursive by config or environment Elijah Newren via GitGitGadget
2020-10-27 2:08 ` [PATCH v3 0/4] Beginning of new merge strategy: New API, empty implementation Elijah Newren via GitGitGadget
2020-10-27 2:08 ` [PATCH v3 1/4] merge-ort: barebones API of new merge strategy with " Elijah Newren via GitGitGadget
2020-10-27 2:33 ` Eric Sunshine
2020-10-27 4:57 ` Elijah Newren
2020-10-27 7:54 ` Eric Sunshine
2020-10-27 2:08 ` [PATCH v3 2/4] merge-ort-wrappers: new convience wrappers to mimic the old merge API Elijah Newren via GitGitGadget
2020-10-27 2:08 ` [PATCH v3 3/4] fast-rebase: demonstrate merge-ort's API via temporary/hidden command Elijah Newren via GitGitGadget
2020-10-27 9:47 ` SZEDER Gábor
2020-10-27 2:08 ` [PATCH v3 4/4] merge,rebase,revert: select ort or recursive by config or environment Elijah Newren via GitGitGadget
2020-10-29 20:32 ` [PATCH v4 0/4] Beginning of new merge strategy: New API, empty implementation Elijah Newren via GitGitGadget
2020-10-29 20:32 ` [PATCH v4 1/4] merge-ort: barebones API of new merge strategy with " Elijah Newren via GitGitGadget
2020-10-29 20:32 ` [PATCH v4 2/4] merge-ort-wrappers: new convience wrappers to mimic the old merge API Elijah Newren via GitGitGadget
2020-10-29 20:32 ` [PATCH v4 3/4] fast-rebase: demonstrate merge-ort's API via new test-tool command Elijah Newren via GitGitGadget
2020-10-29 20:32 ` [PATCH v4 4/4] merge,rebase,revert: select ort or recursive by config or environment Elijah Newren via GitGitGadget
2020-11-02 9:27 ` [PATCH v4 0/4] Beginning of new merge strategy: New API, empty implementation Jacob Keller
2020-11-02 18:52 ` Elijah Newren
2020-11-07 6:09 ` Elijah Newren
2020-11-02 23:45 ` Elijah Newren via GitGitGadget [this message]
2020-11-02 23:45 ` [PATCH v5 1/4] merge-ort: barebones API of new merge strategy with " Elijah Newren via GitGitGadget
2020-11-02 23:45 ` [PATCH v5 2/4] merge-ort-wrappers: new convience wrappers to mimic the old merge API Elijah Newren via GitGitGadget
2020-11-02 23:45 ` [PATCH v5 3/4] fast-rebase: demonstrate merge-ort's API via new test-tool command Elijah Newren via GitGitGadget
2020-11-02 23:45 ` [PATCH v5 4/4] merge,rebase,revert: select ort or recursive by config or environment Elijah Newren via GitGitGadget
2020-11-03 1:03 ` [PATCH v5 0/4] Beginning of new merge strategy: New API, empty implementation Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.895.v5.git.git.1604360734.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=jacob.keller@gmail.com \
--cc=jonathantanmy@google.com \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=peter.baumann@gmail.com \
--cc=sunshine@sunshineco.com \
--cc=szeder.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.