doc/cat-file: make synopsis and description less confusing

The DESCRIPTION's "first form" is actually the 1st, 2nd, 3rd and 5th
form in SYNOPSIS, the "second form" is the 4th one.

Interestingly, this state of affairs was introduced in
97fe725075 (cat-file docs: fix SYNOPSIS and "-h" output, 2021-12-28)
with the claim of "Now the two will match again." ("the two" being
DESCRIPTION and SYNOPSIS)...

The description also suffers from other correctness and clarity issues,
e.g., the "first form" paragraph discusses -p, -s and -t, but leaves out
-e, which is included in the corresponding SYNOPSIS section; the second
paragraph mentions <format>, which doesn't occur in SYNOPSIS at all, and
of the three batch options, really only describes the behavior of
--batch-check.  Also the mention of "drivers" seems an implementation
detail not adding much clarity in a short summary (and isn't expanded
upon in the rest of the man page, either).

Rather than trying to maintain one-to-one (or N-to-M) correspondence
between the DESCRIPTION and SYNOPSIS forms, creating duplication and
providing opportunities for error, shorten the former into a concise
summary describing the two general modes of operation: batch and
non-batch, leaving details to the subsequent manual sections.

While here, fix a grammar error in the description of -e and make the
following further minor improvements:

  NAME:
    shorten ("content or type and size" isn't the whole story; say
    "details" and leave the actual details to later sections)

  SYNOPSIS and --help:
    move the (--textconv | --filters) form before --batch, closer
    to the other non-batch forms

Signed-off-by: Štěpán Němec <stepnem@smrk.net>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Štěpán Němec 2023-10-09 19:56:04 +02:00 committed by Junio C Hamano
parent 43c8a30d15
commit cebfaaa333
2 changed files with 16 additions and 18 deletions

View File

@ -3,8 +3,7 @@ git-cat-file(1)
NAME NAME
---- ----
git-cat-file - Provide content or type and size information for repository objects git-cat-file - Provide contents or details of repository objects
SYNOPSIS SYNOPSIS
-------- --------
@ -12,25 +11,24 @@ SYNOPSIS
'git cat-file' <type> <object> 'git cat-file' <type> <object>
'git cat-file' (-e | -p) <object> 'git cat-file' (-e | -p) <object>
'git cat-file' (-t | -s) [--allow-unknown-type] <object> 'git cat-file' (-t | -s) [--allow-unknown-type] <object>
'git cat-file' (--textconv | --filters)
[<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]
'git cat-file' (--batch | --batch-check | --batch-command) [--batch-all-objects] 'git cat-file' (--batch | --batch-check | --batch-command) [--batch-all-objects]
[--buffer] [--follow-symlinks] [--unordered] [--buffer] [--follow-symlinks] [--unordered]
[--textconv | --filters] [-Z] [--textconv | --filters] [-Z]
'git cat-file' (--textconv | --filters)
[<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]
DESCRIPTION DESCRIPTION
----------- -----------
In its first form, the command provides the content or the type of an object in Output the contents or other properties such as size, type or delta
the repository. The type is required unless `-t` or `-p` is used to find the information of one or more objects.
object type, or `-s` is used to find the object size, or `--textconv` or
`--filters` is used (which imply type "blob").
In the second form, a list of objects (separated by linefeeds) is provided on This command can operate in two modes, depending on whether an option
stdin, and the SHA-1, type, and size of each object is printed on stdout. The from the `--batch` family is specified.
output format can be overridden using the optional `<format>` argument. If
either `--textconv` or `--filters` was specified, the input is expected to In non-batch mode, the command provides information on an object
list the object names followed by the path name, separated by a single named on the command line.
whitespace, so that the appropriate drivers can be determined.
In batch mode, arguments are read from standard input.
OPTIONS OPTIONS
------- -------
@ -51,8 +49,8 @@ OPTIONS
-e:: -e::
Exit with zero status if `<object>` exists and is a valid Exit with zero status if `<object>` exists and is a valid
object. If `<object>` is of an invalid format exit with non-zero and object. If `<object>` is of an invalid format, exit with non-zero
emits an error on stderr. status and emit an error on stderr.
-p:: -p::
Pretty-print the contents of `<object>` based on its type. Pretty-print the contents of `<object>` based on its type.

View File

@ -922,11 +922,11 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
N_("git cat-file <type> <object>"), N_("git cat-file <type> <object>"),
N_("git cat-file (-e | -p) <object>"), N_("git cat-file (-e | -p) <object>"),
N_("git cat-file (-t | -s) [--allow-unknown-type] <object>"), N_("git cat-file (-t | -s) [--allow-unknown-type] <object>"),
N_("git cat-file (--textconv | --filters)\n"
" [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"),
N_("git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]\n" N_("git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]\n"
" [--buffer] [--follow-symlinks] [--unordered]\n" " [--buffer] [--follow-symlinks] [--unordered]\n"
" [--textconv | --filters] [-Z]"), " [--textconv | --filters] [-Z]"),
N_("git cat-file (--textconv | --filters)\n"
" [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"),
NULL NULL
}; };
const struct option options[] = { const struct option options[] = {