From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Felipe Contreras <felipe.contreras@gmail.com>,
Glen Choo <chooglen@google.com>,
Jonathan Tan <jonathantanmy@google.com>,
Jacob Keller <jacob.e.keller@intel.com>
Subject: [PATCH v4 0/8] fetch: introduce machine-parseable output
Date: Tue, 9 May 2023 15:01:58 +0200 [thread overview]
Message-ID: <cover.1683636885.git.ps@pks.im> (raw)
In-Reply-To: <cover.1681906948.git.ps@pks.im>
[-- Attachment #1: Type: text/plain, Size: 7818 bytes --]
Hi,
this is the fourth version of my patch series to introduce a
machine-parseable output format for git-fetch(1). It applies on top of
e9dffbc7f1 (Merge branch 'ps/fetch-ref-update-reporting', 2023-04-06).
There's only a small set of change compared to v3:
- Patch 1/8: The test added by this change has been significantly
simplified.
- Patch 8/8: Reworded the commit message to clarify that parallel
fetches and `--recurse-submodules` aren't niche on their own, but
are likely niche combined with `--porcelain` given that they are
user-facing while `--porcelain` is script-facing.
- Patch 8/8: Clarified that `--porcelain` takes precedence over the
`fetch.output` config option in the user-facing documentation.
I've also added a test to verify that this is the case.
- Patch 8/8: Amended one test to not depend on the state that its
preceding test cretaes.
Thanks to Glen for the feedback.
Patrick
Patrick Steinhardt (8):
fetch: fix `--no-recurse-submodules` with multi-remote fetches
fetch: split out tests for output format
fetch: add a test to exercise invalid output formats
fetch: fix missing from-reference when fetching HEAD:foo
fetch: introduce `display_format` enum
fetch: move display format parsing into main function
fetch: move option related variables into main function
fetch: introduce machine-parseable "porcelain" output format
Documentation/fetch-options.txt | 7 +
Documentation/git-fetch.txt | 9 +
builtin/fetch.c | 437 +++++++++++++++++++-------------
t/t5510-fetch.sh | 53 ----
t/t5526-fetch-submodules.sh | 19 ++
t/t5574-fetch-output.sh | 251 ++++++++++++++++++
6 files changed, 552 insertions(+), 224 deletions(-)
create mode 100755 t/t5574-fetch-output.sh
Range-diff against v3:
1: 4b2b0cfe15 ! 1: d82b42ed34 fetch: fix `--no-recurse-submodules` with multi-remote fetches
@@ t/t5526-fetch-submodules.sh: test_expect_success 'fetch --all with --recurse-sub
'
+test_expect_success "fetch --all with --no-recurse-submodules only fetches superproject" '
-+ test_when_finished "git -C downstream remote remove second" &&
++ test_when_finished "rm -rf src_clone" &&
+
-+ # We need to add a second remote, otherwise --all falls back to the
-+ # normal fetch-one case.
-+ git -C downstream remote add second .. &&
-+ git -C downstream fetch --all &&
++ git clone --recurse-submodules src src_clone &&
++ (
++ cd src_clone &&
++ git remote add secondary ../src &&
++ git config submodule.recurse true &&
++ git config fetch.parallel 0 &&
++ git fetch --all --no-recurse-submodules 2>../actual
++ ) &&
+
-+ add_submodule_commits &&
-+ add_superproject_commits &&
-+ old_commit=$(git rev-parse --short HEAD~) &&
-+ new_commit=$(git rev-parse --short HEAD) &&
-+
-+ git -C downstream fetch --all --no-recurse-submodules >actual.out 2>actual.err &&
-+
-+ cat >expect.out <<-EOF &&
-+ Fetching origin
-+ Fetching second
++ cat >expect <<-EOF &&
++ From ../src
++ * [new branch] master -> secondary/master
+ EOF
-+
-+ cat >expect.err <<-EOF &&
-+ From $(test-tool path-utils real_path .)/.
-+ $old_commit..$new_commit super -> origin/super
-+ From ..
-+ $old_commit..$new_commit super -> second/super
-+ EOF
-+
-+ test_cmp expect.out actual.out &&
-+ test_cmp expect.err actual.err
++ test_cmp expect actual
+'
+
test_done
2: 6ebc7450ba = 2: 33112dc51a fetch: split out tests for output format
3: 78479922ac = 3: 006ea93afb fetch: add a test to exercise invalid output formats
4: 46e1266ab0 = 4: e599ea6d33 fetch: fix missing from-reference when fetching HEAD:foo
5: acc0f7f520 = 5: 80ac00b0c4 fetch: introduce `display_format` enum
6: cd23440128 = 6: 826b8b7bc0 fetch: move display format parsing into main function
7: edbc31013f = 7: 20f2e061d6 fetch: move option related variables into main function
8: e132d9494e ! 8: 24ae381950 fetch: introduce machine-parseable "porcelain" output format
@@ Commit message
be ambiguous without also printing the repository in which the update
happens.
- Considering that both multi-remote and submodule fetches are rather
- niche and likely not going to be useful for the majority of usecases
- these omissions feel acceptable. If usecases for either of these come up
- in the future though it is easy enough to add a new "porcelain-v2"
- format that adds this information.
+ Considering that both multi-remote and submodule fetches are user-facing
+ features, using them in conjunction with `--porcelain` that is intended
+ for scripting purposes is likely not going to be useful in the majority
+ of cases. With that in mind these restrictions feel acceptable. If
+ usecases for either of these come up in the future though it is easy
+ enough to add a new "porcelain-v2" format that adds this information.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
@@ Documentation/fetch-options.txt: linkgit:git-config[1].
+ Print the output to standard output in an easy-to-parse format for
+ scripts. See section OUTPUT in linkgit:git-fetch[1] for details.
++
-+This is incompatible with `--recurse-submodules=[yes|on-demand]`.
++This is incompatible with `--recurse-submodules=[yes|on-demand]` and takes
++precedence over the `fetch.output` config option.
+
ifndef::git-pull[]
--[no-]write-fetch-head::
@@ t/t5574-fetch-output.sh: test_expect_success 'fetch compact output' '
+test_expect_success 'fetch porcelain with multiple remotes' '
+ test_when_finished "rm -rf porcelain" &&
+
++ git switch --create multiple-remotes &&
+ git clone . porcelain &&
+ git -C porcelain remote add second-remote "$PWD" &&
+ git -C porcelain fetch second-remote &&
@@ t/t5574-fetch-output.sh: test_expect_success 'fetch compact output' '
+ new_commit=$(git rev-parse HEAD) &&
+
+ cat >expect <<-EOF &&
-+ $old_commit $new_commit refs/remotes/origin/force-updated
-+ $old_commit $new_commit refs/remotes/second-remote/force-updated
++ $old_commit $new_commit refs/remotes/origin/multiple-remotes
++ $old_commit $new_commit refs/remotes/second-remote/multiple-remotes
+ EOF
+
+ git -C porcelain fetch --porcelain --all >actual 2>stderr &&
@@ t/t5574-fetch-output.sh: test_expect_success 'fetch compact output' '
+ test_must_fail git -C porcelain fetch --porcelain --recurse-submodules=on-demand 2>stderr &&
+ test_cmp expect stderr
+'
++
++test_expect_success 'fetch porcelain overrides fetch.output config' '
++ test_when_finished "rm -rf porcelain" &&
++
++ git switch --create config-override &&
++ git clone . porcelain &&
++ test_commit new-commit &&
++ old_commit=$(git rev-parse HEAD~) &&
++ new_commit=$(git rev-parse HEAD) &&
++
++ cat >expect <<-EOF &&
++ $old_commit $new_commit refs/remotes/origin/config-override
++ * $ZERO_OID $new_commit refs/tags/new-commit
++ EOF
++
++ git -C porcelain -c fetch.output=compact fetch --porcelain >stdout 2>stderr &&
++ test_must_be_empty stderr &&
++ test_cmp expect stdout
++'
+
test_expect_success 'fetch output with HEAD' '
test_when_finished "rm -rf head" &&
--
2.40.1
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-05-09 13:02 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-19 12:31 [PATCH 0/8] fetch: introduce machine-parseable output Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 1/8] fetch: split out tests for output format Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 2/8] fetch: add a test to exercise invalid output formats Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 3/8] fetch: fix missing from-reference when fetching HEAD:foo Patrick Steinhardt
2023-04-26 19:20 ` Jacob Keller
2023-04-27 10:58 ` Patrick Steinhardt
2023-04-26 19:21 ` Jacob Keller
2023-04-27 10:58 ` Patrick Steinhardt
2023-04-26 19:25 ` Glen Choo
2023-04-27 10:58 ` Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 4/8] fetch: introduce `display_format` enum Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 5/8] fetch: move display format parsing into main function Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 6/8] fetch: move option related variables " Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 7/8] fetch: introduce new `--output-format` option Patrick Steinhardt
2023-04-26 19:40 ` Glen Choo
2023-04-27 10:58 ` Patrick Steinhardt
2023-04-19 12:31 ` [PATCH 8/8] fetch: introduce machine-parseable "porcelain" output format Patrick Steinhardt
2023-04-26 19:52 ` Glen Choo
2023-04-27 10:58 ` Patrick Steinhardt
2023-04-27 23:20 ` Glen Choo
2023-04-28 8:51 ` Patrick Steinhardt
2023-04-28 17:20 ` Glen Choo
2023-05-02 20:55 ` Felipe Contreras
2023-04-24 20:17 ` [PATCH 0/8] fetch: introduce machine-parseable output Felipe Contreras
2023-04-25 9:58 ` Patrick Steinhardt
2023-04-26 19:14 ` Jacob Keller
2023-04-26 20:23 ` Junio C Hamano
2023-04-26 20:30 ` Jacob Keller
2023-04-27 10:58 ` Patrick Steinhardt
2023-04-27 19:46 ` Jacob Keller
2023-04-27 22:49 ` Glen Choo
2023-04-26 20:24 ` Junio C Hamano
2023-04-26 18:54 ` Glen Choo
2023-04-26 21:14 ` Glen Choo
2023-04-26 19:17 ` Jacob Keller
2023-04-27 11:13 ` [PATCH v2 " Patrick Steinhardt
2023-04-27 11:13 ` [PATCH v2 1/8] fetch: split out tests for output format Patrick Steinhardt
2023-04-29 17:34 ` SZEDER Gábor
2023-05-03 11:21 ` Patrick Steinhardt
2023-04-27 11:13 ` [PATCH v2 2/8] fetch: add a test to exercise invalid output formats Patrick Steinhardt
2023-04-27 11:13 ` [PATCH v2 3/8] fetch: fix missing from-reference when fetching HEAD:foo Patrick Steinhardt
2023-04-27 17:26 ` Glen Choo
2023-04-27 19:49 ` Jacob Keller
2023-04-27 11:13 ` [PATCH v2 4/8] fetch: introduce `display_format` enum Patrick Steinhardt
2023-04-27 11:13 ` [PATCH v2 5/8] fetch: move display format parsing into main function Patrick Steinhardt
2023-04-27 11:13 ` [PATCH v2 6/8] fetch: move option related variables " Patrick Steinhardt
2023-04-27 21:52 ` Junio C Hamano
2023-04-27 11:13 ` [PATCH v2 7/8] fetch: introduce new `--output-format` option Patrick Steinhardt
2023-04-27 22:01 ` Junio C Hamano
2023-04-28 22:03 ` Glen Choo
2023-05-03 9:12 ` Patrick Steinhardt
2023-04-28 22:31 ` Glen Choo
2023-05-03 9:43 ` Patrick Steinhardt
2023-05-03 11:36 ` Patrick Steinhardt
2023-04-27 11:13 ` [PATCH v2 8/8] fetch: introduce machine-parseable "porcelain" output format Patrick Steinhardt
2023-04-27 19:52 ` Jacob Keller
2023-04-28 22:42 ` Glen Choo
2023-05-03 11:34 ` [PATCH v3 0/8] fetch: introduce machine-parseable output Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 1/8] fetch: fix `--no-recurse-submodules` with multi-remote fetches Patrick Steinhardt
2023-05-08 22:51 ` Glen Choo
2023-05-09 12:41 ` Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 2/8] fetch: split out tests for output format Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 3/8] fetch: add a test to exercise invalid output formats Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 4/8] fetch: fix missing from-reference when fetching HEAD:foo Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 5/8] fetch: introduce `display_format` enum Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 6/8] fetch: move display format parsing into main function Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 7/8] fetch: move option related variables " Patrick Steinhardt
2023-05-03 11:34 ` [PATCH v3 8/8] fetch: introduce machine-parseable "porcelain" output format Patrick Steinhardt
2023-05-08 23:42 ` Glen Choo
2023-05-09 12:41 ` Patrick Steinhardt
2023-05-09 0:03 ` Glen Choo
2023-05-03 16:48 ` [PATCH v3 0/8] fetch: introduce machine-parseable output Junio C Hamano
2023-05-03 16:53 ` Junio C Hamano
2023-05-04 7:57 ` Patrick Steinhardt
2023-05-09 0:06 ` Glen Choo
2023-05-09 12:42 ` Patrick Steinhardt
2023-05-09 13:01 ` Patrick Steinhardt [this message]
2023-05-09 13:02 ` [PATCH v4 1/8] fetch: fix `--no-recurse-submodules` with multi-remote fetches Patrick Steinhardt
2023-05-09 17:49 ` Junio C Hamano
2023-05-09 18:27 ` Glen Choo
2023-05-10 12:34 ` Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 2/8] fetch: split out tests for output format Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 3/8] fetch: add a test to exercise invalid output formats Patrick Steinhardt
2023-05-09 17:58 ` Junio C Hamano
2023-05-10 12:34 ` Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 4/8] fetch: fix missing from-reference when fetching HEAD:foo Patrick Steinhardt
2023-05-09 19:28 ` Junio C Hamano
2023-05-10 12:34 ` Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 5/8] fetch: introduce `display_format` enum Patrick Steinhardt
2023-05-09 20:19 ` Junio C Hamano
2023-05-10 12:35 ` Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 6/8] fetch: move display format parsing into main function Patrick Steinhardt
2023-05-09 20:35 ` Junio C Hamano
2023-05-09 22:30 ` Glen Choo
2023-05-10 12:35 ` Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 7/8] fetch: move option related variables " Patrick Steinhardt
2023-05-09 13:02 ` [PATCH v4 8/8] fetch: introduce machine-parseable "porcelain" output format Patrick Steinhardt
2023-05-09 20:43 ` Junio C Hamano
2023-05-10 12:35 ` Patrick Steinhardt
2023-05-10 12:33 ` [PATCH v5 0/9] fetch: introduce machine-parseable output Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 1/9] fetch: fix `--no-recurse-submodules` with multi-remote fetches Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 2/9] fetch: split out tests for output format Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 3/9] fetch: add a test to exercise invalid output formats Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 4/9] fetch: print left-hand side when fetching HEAD:foo Patrick Steinhardt
2023-05-12 0:16 ` Glen Choo
2023-05-13 16:59 ` Jeff King
2023-05-15 5:15 ` Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 5/9] fetch: refactor calculation of the display table width Patrick Steinhardt
2023-05-12 0:49 ` Glen Choo
2023-05-10 12:34 ` [PATCH v5 6/9] fetch: introduce `display_format` enum Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 7/9] fetch: lift up parsing of "fetch.output" config variable Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 8/9] fetch: move option related variables into main function Patrick Steinhardt
2023-05-10 12:34 ` [PATCH v5 9/9] fetch: introduce machine-parseable "porcelain" output format Patrick Steinhardt
2023-05-12 1:02 ` Glen Choo
2023-05-10 18:05 ` [PATCH v5 0/9] fetch: introduce machine-parseable output Junio C Hamano
2023-05-11 11:05 ` Patrick Steinhardt
2023-05-11 16:53 ` Junio C Hamano
2023-05-11 17:24 ` Felipe Contreras
2023-05-12 1:09 ` Glen Choo
2023-05-12 7:16 ` Patrick Steinhardt
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=cover.1683636885.git.ps@pks.im \
--to=ps@pks.im \
--cc=chooglen@google.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jacob.e.keller@intel.com \
--cc=jonathantanmy@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).