Subject: [PATCH 0/8] fetch: introduce machine-parseable output

From: Patrick Steinhardt <[email-masked]>
Date: Wed, 19 Apr 2023 14:31:22 +0200

Hi,

this is the second part of my quest to introduce a machine-parseable
output for git-fetch(1) after the initial refactorings that have been
merged via e9dffbc7f1 (Merge branch 'ps/fetch-ref-update-reporting',
2023-04-06).

Parsing the output of fetches is mostly impossible. It prettifies
reference names that are about to be updated, doesn't print the old and
new object IDs the refs are being updated from and to, and prints all of
that information in nice columns. In short, it is designed to be read by
humans rather than machines.

This makes it hard to use in a script way though, e.g. to learn about
which references actually have been updated or which have not been
updated. This patch series intends to fix that by introducing a new
machine-parseable interface:

```
$ git fetch --output-format=porcelain --no-progress
  fff5a5e7f528b2ed2c335991399a766c2cf01103 af67688dca57999fd848f051eeea1d375ba546b2 refs/remotes/origin/master
* 0000000000000000000000000000000000000000 e046fe5a36a970bc14fbfbcb2074a48776f6b671 refs/remotes/origin/x86-rep-insns
* 0000000000000000000000000000000000000000 bb81ed6862b864c9eb99447f04d49a84ecb647e5 refs/tags/v6.3-rc4
* 0000000000000000000000000000000000000000 83af7b1468c0dca86b4dc9e43e73bfa4f38d9637 refs/tags/v6.3-rc5
* 0000000000000000000000000000000000000000 ab3affb8ed84f68638162fe7e6fd4055e15bff5b refs/tags/v6.3-rc6
* 0000000000000000000000000000000000000000 1c8c28415e8743368a2b800520a6dd0b22ee6ec2 refs/tags/v6.3-rc7
```

The series is structured as following:

    - Patches 1 and 2 improve test coverage for output formats.

    - Patch 3 fixes a bug with the current output format.

    - Patch 4 to 6 perform some preliminary refactorings.

    - Patch 7 introduces a new `--output-format=` option for
      git-fetch(1) that allows the user to configure the output more
      directly.

    - Patch 8 introduces the new "porcelain" output format.

Patrick

Patrick Steinhardt (8):
  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 new `--output-format` option
  fetch: introduce machine-parseable "porcelain" output format

 Documentation/config/fetch.txt  |   4 +-
 Documentation/fetch-options.txt |   5 +
 Documentation/git-fetch.txt     |  17 +-
 builtin/fetch.c                 | 406 +++++++++++++++++++-------------
 t/t5510-fetch.sh                |  53 -----
 t/t5574-fetch-output.sh         | 209 ++++++++++++++++
 6 files changed, 475 insertions(+), 219 deletions(-)
 create mode 100755 t/t5574-fetch-output.sh

-- 
2.40.0