From: "Kyle Zhao via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Elijah Newren" <newren@gmail.com>,
kylezhao <kylezhao@tencent.com>, "Taylor Blau" <me@ttaylorr.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Kyle Zhao" <kylezhao@tencent.com>
Subject: [PATCH v6 0/2] merge-tree: allow specifying a base commit when --write-tree is passed
Date: Thu, 03 Nov 2022 10:50:19 +0000 [thread overview]
Message-ID: <pull.1397.v6.git.1667472621.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1397.v5.git.1667446182.gitgitgadget@gmail.com>
Thanks for Elijah's work. I'm very excited that merge-ort is integrated into
the git merge-tree, which means that we can use merge-ort in bare
repositories to optimize merge performance.
In this patch, I introduce a new --merge-base=<commit> option to allow
callers to specify a merge-base for the merge. This may allow users to
implement git cherry-pick and git rebase in bare repositories with git
merge-tree cmd.
Changes since v1:
* Changed merge_incore_recursive() to merge_incore_nonrecursive() when
merge-base is specified.
* Fixed c style problem.
* Moved commit lookup/die logic out to the parsing logic in
cmd_merge_tree().
* use test_commit for test
Changes since v2:
* commit message
* Rebased on top of en/merge-tree-sequence.
* Set opt.ancestor to o->merge_base. Because opt.ancestor is a *char. To
make it easier to pass parameters, I moved
lookup_commit_reference_by_name() to real_ merge() again.
* Added test comment.
Changes since v3:
* support --merge-base in conjunction with --stdin
Changes since v4:
* commit message
* added input format document
* changed the input format for specifying the merge-base when --stdin is
passed
* changed the output when --stdin and --merge-base are used at the same
time
* add comment for test
Changes since v5:
* improved test: remove the test repo after the test; avoid sub-shell.
Kyle Zhao (2):
merge-tree.c: add --merge-base=<commit> option
merge-tree.c: allow specifying the merge-base when --stdin is passed
Documentation/git-merge-tree.txt | 16 ++++++++
builtin/merge-tree.c | 65 ++++++++++++++++++++++++++------
t/t4301-merge-tree-write-tree.sh | 61 ++++++++++++++++++++++++++++++
3 files changed, 130 insertions(+), 12 deletions(-)
base-commit: ec1edbcb56ac05e9980299b05924c5c1b51d68b4
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1397%2Fkeyu98%2Fkz%2Fmerge-tree-option-merge-base-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1397/keyu98/kz/merge-tree-option-merge-base-v6
Pull-Request: https://github.com/gitgitgadget/git/pull/1397
Range-diff vs v5:
1: 01df0d1a6a7 ! 1: 1cf1c69b8e8 merge-tree.c: add --merge-base=<commit> option
@@ t/t4301-merge-tree-write-tree.sh: test_expect_success '--stdin with both a succe
+
+test_expect_success 'specify merge-base as parent of branch2' '
+ # Setup
-+ git init base-b2-p && (
-+ cd base-b2-p &&
-+ test_commit c1 file1 &&
-+ test_commit c2 file2 &&
-+ test_commit c3 file3
-+ ) &&
++ test_when_finished "rm -rf base-b2-p" &&
++ git init base-b2-p &&
++ test_commit -C base-b2-p c1 file1 &&
++ test_commit -C base-b2-p c2 file2 &&
++ test_commit -C base-b2-p c3 file3 &&
++
+ # Testing
-+ (
-+ cd base-b2-p &&
-+ TREE_OID=$(git merge-tree --write-tree --merge-base=c2 c1 c3) &&
++ TREE_OID=$(git -C base-b2-p merge-tree --write-tree --merge-base=c2 c1 c3) &&
+
-+ q_to_tab <<-EOF >expect &&
-+ 100644 blob $(git rev-parse c1:file1)Qfile1
-+ 100644 blob $(git rev-parse c3:file3)Qfile3
-+ EOF
++ q_to_tab <<-EOF >expect &&
++ 100644 blob $(git -C base-b2-p rev-parse c1:file1)Qfile1
++ 100644 blob $(git -C base-b2-p rev-parse c3:file3)Qfile3
++ EOF
+
-+ git ls-tree $TREE_OID >actual &&
-+ test_cmp expect actual
-+ )
++ git -C base-b2-p ls-tree $TREE_OID >actual &&
++ test_cmp expect actual
+'
+
test_done
2: 3bdfad03cca ! 2: 40d56544e6e merge-tree.c: allow specifying the merge-base when --stdin is passed
@@ t/t4301-merge-tree-write-tree.sh: test_expect_success '--stdin with both a succe
# git merge-tree --write-tree --merge-base=c2 c1 c3
# Commit c1: add file1
@@ t/t4301-merge-tree-write-tree.sh: test_expect_success 'specify merge-base as parent of branch2' '
- )
+ test_cmp expect actual
'
+# Since the earlier tests have verified that individual merge-tree calls
+# are doing the right thing, this test case is only used to test whether
+# the input format is available.
+
-+test_expect_success '--stdin with both a normal merge and a merge-base specified merge' '
-+ cd base-b2-p &&
-+ printf "c1 c3\nc2 -- c1 c3" | git merge-tree --stdin >actual &&
++test_expect_success 'check the input format when --stdin is passed' '
++ test_when_finished "rm -rf repo" &&
++ git init repo &&
++ test_commit -C repo c1 &&
++ test_commit -C repo c2 &&
++ test_commit -C repo c3 &&
++ printf "c1 c3\nc2 -- c1 c3\nc2 c3" | git -C repo merge-tree --stdin >actual &&
+
+ printf "1\0" >expect &&
-+ git merge-tree --write-tree -z c1 c3 >>expect &&
++ git -C repo merge-tree --write-tree -z c1 c3 >>expect &&
+ printf "\0" >>expect &&
+
+ printf "1\0" >>expect &&
-+ git merge-tree --write-tree -z --merge-base=c2 c1 c3 >>expect &&
++ git -C repo merge-tree --write-tree -z --merge-base=c2 c1 c3 >>expect &&
+ printf "\0" >>expect &&
++
++ printf "1\0" >>expect &&
++ git -C repo merge-tree --write-tree -z c2 c3 >>expect &&
++ printf "\0" >>expect &&
++
+ test_cmp expect actual
+'
+
--
gitgitgadget
next prev parent reply other threads:[~2022-11-03 10:50 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 12:12 [PATCH] merge-tree.c: add --merge-base=<commit> option Kyle Zhao via GitGitGadget
2022-10-27 18:09 ` Junio C Hamano
2022-10-28 8:20 ` Elijah Newren
2022-10-28 16:03 ` Junio C Hamano
2022-10-29 1:52 ` Elijah Newren
2022-10-28 11:43 ` [Internet]Re: " kylezhao(赵柯宇)
2022-10-28 8:13 ` Elijah Newren
2022-10-28 11:54 ` [Internet]Re: " kylezhao(赵柯宇)
2022-10-28 11:55 ` [PATCH v2] " Kyle Zhao via GitGitGadget
2022-10-29 1:32 ` Elijah Newren
2022-10-29 3:42 ` [PATCH v3] " Kyle Zhao via GitGitGadget
2022-11-01 1:08 ` Elijah Newren
2022-11-01 8:55 ` [PATCH v4 0/2] merge-tree: allow specifying a base commit when --write-tree is passed Kyle Zhao via GitGitGadget
2022-11-01 8:55 ` [PATCH v4 1/2] merge-tree.c: add --merge-base=<commit> option Kyle Zhao via GitGitGadget
2022-11-01 8:55 ` [PATCH v4 2/2] merge-tree.c: support --merge-base in conjunction with --stdin Kyle Zhao via GitGitGadget
2022-11-03 1:13 ` Elijah Newren
2022-11-03 3:28 ` [Internet]Re: " kylezhao(赵柯宇)
2022-11-01 21:19 ` [PATCH v4 0/2] merge-tree: allow specifying a base commit when --write-tree is passed Taylor Blau
2022-11-03 3:29 ` [PATCH v5 " Kyle Zhao via GitGitGadget
2022-11-03 3:29 ` [PATCH v5 1/2] merge-tree.c: add --merge-base=<commit> option Kyle Zhao via GitGitGadget
2022-11-03 8:36 ` Ævar Arnfjörð Bjarmason
2022-11-03 9:43 ` [Internet]Re: " kylezhao(赵柯宇)
2022-11-03 3:29 ` [PATCH v5 2/2] merge-tree.c: allow specifying the merge-base when --stdin is passed Kyle Zhao via GitGitGadget
2022-11-03 10:50 ` Kyle Zhao via GitGitGadget [this message]
2022-11-03 10:50 ` [PATCH v6 1/2] merge-tree.c: add --merge-base=<commit> option Kyle Zhao via GitGitGadget
2022-11-03 10:50 ` [PATCH v6 2/2] merge-tree.c: allow specifying the merge-base when --stdin is passed Kyle Zhao via GitGitGadget
2022-11-11 19:44 ` Elijah Newren
2022-11-11 23:45 ` [PATCH v7 0/2] merge-tree: allow specifying a base commit when --write-tree " Kyle Zhao via GitGitGadget
2022-11-11 23:45 ` [PATCH v7 1/2] merge-tree.c: add --merge-base=<commit> option Kyle Zhao via GitGitGadget
2022-11-22 3:04 ` Junio C Hamano
2022-11-22 3:52 ` [Internet]Re: " kylezhao(赵柯宇)
2022-11-22 4:28 ` Junio C Hamano
2022-11-22 5:42 ` Junio C Hamano
2022-11-22 7:47 ` [Internet]Re: " kylezhao(赵柯宇)
2022-11-11 23:45 ` [PATCH v7 2/2] merge-tree.c: allow specifying the merge-base when --stdin is passed Kyle Zhao via GitGitGadget
2022-11-12 0:32 ` [PATCH v7 0/2] merge-tree: allow specifying a base commit when --write-tree " Elijah Newren
2022-11-13 4:53 ` Taylor Blau
2022-11-13 4:54 ` Taylor Blau
2022-11-24 3:37 ` [PATCH v8 0/3] " Kyle Zhao via GitGitGadget
2022-11-24 3:37 ` [PATCH v8 1/3] merge-tree.c: add --merge-base=<commit> option Kyle Zhao via GitGitGadget
2022-11-24 3:37 ` [PATCH v8 2/3] merge-tree.c: allow specifying the merge-base when --stdin is passed Kyle Zhao via GitGitGadget
2022-11-24 3:37 ` [PATCH v8 3/3] docs: fix description of the `--merge-base` option Kyle Zhao via GitGitGadget
2022-11-25 5:28 ` 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.1397.v6.git.1667472621.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=kylezhao@tencent.com \
--cc=me@ttaylorr.com \
--cc=newren@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.