From: Justin Tobler <jltobler@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, Justin Tobler <jltobler@gmail.com>
Subject: [PATCH v3 0/4] rev-list: print additional missing object information
Date: Sat, 1 Feb 2025 14:16:54 -0600 [thread overview]
Message-ID: <20250201201658.11562-1-jltobler@gmail.com> (raw)
In-Reply-To: <20250110053417.2602109-2-jltobler@gmail.com>
Greetings,
It is possible to configure git-rev-list(1) to print the OID of missing
objects by setting the `--missing=print` option. While it is useful
knowing about these objects, it would be nice to have even more context
about the objects that are missing. Luckily, from an object containing
the missing object, it is possible to infer additional information the
missing object. For example, if the tree containing a missing blob still
exists, the tree entry for the missing object should contain path and
type information.
This series aims to provide git-rev-list(1) with a new `print-info`
missing action for the `--missing` option that, when set, behaves like
the existing `print` action but also prints other potentially
interesting information about the missing object.
Missing object info is printed in the form `?<oid> [<token>=<value>]...`
where multiple `<token>=<value>` pairs may be specified each separated
from each other with a SP. Values that contain SP or LF characters are
expected to be encoded in a manner such that these problematic bytes are
handled. For missing object path information this is handled by quoting
the path in the C style if it contains SP or special characters.
One concern I currently have with this quoting approach is that it is a
bit more challenging to machine parse compared to something like using a
null byte to delimit between missing info. One option is, in a followup
series, introduce a git-for-each-ref(1) style format syntax. Maybe
something like: `--missing=print-info:%(path)%00%(type)`. I'm curious if
anyone may have thoughts around this. My goal is to ensure that there is
an easy to use machine parsable interface to get this information. I
could see something like `?<oid> path="foo \"bar" type=blob`, being a
bit complex.
The series is set up as follows:
- Pathes 1 and 2 provide the `quote_c_style` and `quote_path` functions
with a way print consistent output regardless of how core.quotePath is
set.
- Patch 3 introduces the `print-info` missing action and supports
printing missing object path information.
- Patch 4 extends the `print-info` missing action to also print object
type information about the missing object.
Changes in V3:
- This missing info is provided once again through an explicit
`--missing=print-info` action instead of combining the
`--missing=print` and `--missing-info` flag. This was done to make the
interface a bit straightforward to use and not introduce a flag and is
dependent on another.
- Added flag to `quote_path()` to disable core.quotePath from impacting
quoted output and use it when print missing object path info.
- Update documentation to not use the term "attribute" which could be
confused with gitattributes.
Due to all rearranging/changes in this version, I opted not to include a
range-diff.
Thanks,
-Justin
Justin Tobler (4):
quote: add c quote flag to ignore core.quotePath
quote: add quote_path() flag to ignore config
rev-list: add print-info action to print missing object path
rev-list: extend print-info to print missing object type
Documentation/rev-list-options.txt | 19 +++++
builtin/rev-list.c | 107 ++++++++++++++++++++++++-----
quote.c | 27 +++++---
quote.h | 6 +-
t/t6022-rev-list-missing.sh | 53 ++++++++++++++
5 files changed, 184 insertions(+), 28 deletions(-)
base-commit: b74ff38af58464688b211140b90ec90598d340c6
--
2.48.1.157.g3b0d05c4a7
next prev parent reply other threads:[~2025-02-01 20:20 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-08 3:40 [PATCH] rev-list: print missing object type with --missing=print-type Justin Tobler
2025-01-08 10:08 ` Christian Couder
2025-01-08 22:28 ` Justin Tobler
2025-01-08 15:17 ` Junio C Hamano
2025-01-08 22:18 ` Justin Tobler
2025-01-08 22:43 ` Junio C Hamano
2025-01-08 23:13 ` Justin Tobler
2025-01-10 5:34 ` [PATCH v2 0/2] rev-list: print additional missing object information Justin Tobler
2025-02-01 20:16 ` Justin Tobler [this message]
2025-02-01 20:16 ` [PATCH v3 1/4] quote: add c quote flag to ignore core.quotePath Justin Tobler
2025-02-03 9:51 ` Christian Couder
2025-02-03 22:14 ` Junio C Hamano
2025-02-03 22:33 ` Junio C Hamano
2025-02-04 16:40 ` Junio C Hamano
2025-02-04 22:50 ` Justin Tobler
2025-02-01 20:16 ` [PATCH v3 2/4] quote: add quote_path() flag to ignore config Justin Tobler
2025-02-02 10:52 ` Phillip Wood
2025-02-04 22:39 ` Justin Tobler
2025-02-11 16:51 ` Phillip Wood
2025-02-03 10:07 ` Christian Couder
2025-02-03 22:52 ` Junio C Hamano
2025-02-01 20:16 ` [PATCH v3 3/4] rev-list: add print-info action to print missing object path Justin Tobler
2025-02-01 20:16 ` [PATCH v3 4/4] rev-list: extend print-info to print missing object type Justin Tobler
2025-02-03 10:45 ` [PATCH v3 0/4] rev-list: print additional missing object information Christian Couder
2025-02-04 22:51 ` Justin Tobler
2025-02-05 0:41 ` [PATCH v4 0/2] " Justin Tobler
2025-02-05 0:41 ` [PATCH v4 1/2] rev-list: add print-info action to print missing object path Justin Tobler
2025-02-05 0:41 ` [PATCH v4 2/2] rev-list: extend print-info to print missing object type Justin Tobler
2025-02-05 10:35 ` [PATCH v4 0/2] rev-list: print additional missing object information Christian Couder
2025-02-05 17:18 ` Justin Tobler
2025-02-05 13:18 ` Junio C Hamano
2025-02-05 17:17 ` Justin Tobler
2025-02-05 18:29 ` Junio C Hamano
2025-01-10 5:34 ` [PATCH v2 1/2] rev-list: add --missing-info to print missing object path Justin Tobler
2025-01-10 8:47 ` Christian Couder
2025-01-10 15:22 ` Junio C Hamano
2025-01-10 5:34 ` [PATCH v2 2/2] rev-list: extend --missing-info to print missing object type Justin Tobler
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=20250201201658.11562-1-jltobler@gmail.com \
--to=jltobler@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
/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 NNTP newsgroup(s).