diff mbox series

doc: clarify that most --abbrev[=<n>] are about minimum length

Message ID xmqqblgdq4k0.fsf_-_@gitster.c.googlers.com (mailing list archive)
State New, archived
Headers show
Series doc: clarify that most --abbrev[=<n>] are about minimum length | expand

Commit Message

Junio C Hamano Nov. 4, 2020, 1:44 a.m. UTC
Early text written in 2006 explains the "--abbrev=<n>" option to
"show only a partial prefix", without saying that the length of the
partial prefix is not necessarily the number given to the option to
ensure that the output names the object uniquely.

Luckily, the text written for "git describe" in 2011 explains that
the output is made to name the object uniquely using at least <n>
hexdigits much clearly.

Model the explanation and update documentation for the diff family
of commands, "blame", "branch --verbose", "ls-files" and "ls-tree".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Documentation/diff-options.txt   | 3 ++-
 Documentation/git-blame.txt      | 4 +++-
 Documentation/git-branch.txt     | 8 +++++---
 Documentation/git-ls-files.txt   | 5 +++--
 Documentation/git-ls-tree.txt    | 3 ++-
 Documentation/pretty-options.txt | 3 ++-
 6 files changed, 17 insertions(+), 9 deletions(-)

Comments

Derrick Stolee Nov. 4, 2020, 1:24 p.m. UTC | #1
On 11/3/2020 8:44 PM, Junio C Hamano wrote:
> Early text written in 2006 explains the "--abbrev=<n>" option to
> "show only a partial prefix", without saying that the length of the
> partial prefix is not necessarily the number given to the option to
> ensure that the output names the object uniquely.
> 
> Luckily, the text written for "git describe" in 2011 explains that
> the output is made to name the object uniquely using at least <n>
> hexdigits much clearly.
> 
> Model the explanation and update documentation for the diff family
> of commands, "blame", "branch --verbose", "ls-files" and "ls-tree".

Thanks for being thorough here! Your patch is already an
improvement on what we have. I hope that my suggestions
below help to improve it further.

> --- a/Documentation/diff-options.txt
> +++ b/Documentation/diff-options.txt
> @@ -446,7 +446,8 @@ endif::git-format-patch[]
>  --abbrev[=<n>]::
>  	Instead of showing the full 40-byte hexadecimal object
>  	name in diff-raw format output and diff-tree header
> -	lines, show only a partial prefix.
> +	lines, show <n> hexadecimal digits, or as many digits
> +	as needed to form a unique object name.

A reoccurring theme in this patch is that the --abbrev option
provides a lower bound, even if fewer digits are needed for a
unique object name. Using these two phrases with an "or" has
some ambiguity about which is chosen.

Perhaps we should try to describe it as "<n> is the default,
but can grow as needed". Here is an attempt:

-	lines, show only a partial prefix.
+	lines, show at least <n> hexadecimal digits, increasing the
+	prefix length as needed to uniquely identify an object.

If you prefer wording like this, then there are a few very
similar snippets later in git-branch.txt and git-ls-files.txt.

> --- a/Documentation/git-blame.txt
> +++ b/Documentation/git-blame.txt
> @@ -87,7 +87,9 @@ include::blame-options.txt[]
>  
>  --abbrev=<n>::
>  	Instead of using the default 7+1 hexadecimal digits as the
> -	abbreviated object name, use <n>+1 digits. Note that 1 column
> +	abbreviated object name, use <m>+1 digits, where <m> is at
> +	least <n> but ensures the commit object names are unique.
> +	Note that 1 column
>  	is used for a caret to mark the boundary commit.

This captures the "at least <n>" pretty well, especially considering
the complications around "+1".

> ---abbrev=<length>::
> -	Alter the sha1's minimum display length in the output listing.
> +--abbrev=<n>::
> +	In the verbose listing that show the commit object name,
> +	use <n>, or as many hexdigits as needed to form a unique
> +	object name.

Adapting from your wording here made me think that this might
be a simpler way to phrase it:

+--abbrev=<n>::
+	In the verbose listing that show the commit object name,
+	use at least <n> hexdigits to form a unique object name.

> diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
> index 17c5aac4b7..da6ab0de0c 100644
> --- a/Documentation/pretty-options.txt
> +++ b/Documentation/pretty-options.txt
> @@ -16,7 +16,8 @@ configuration (see linkgit:git-config[1]).
>  
>  --abbrev-commit::
>  	Instead of showing the full 40-byte hexadecimal commit object
> -	name, show only a partial prefix.  Non default number of
> +	name, show only a partial prefix that names the object uniquely.

Perhaps "show a prefix that uniquely identifies the object" ?

> +	Non default number of
>  	digits can be specified with "--abbrev=<n>" (which also modifies
>  	diff output, if it is displayed).

I know this is in the existing docs, but this last sentence should
probably start with "A non-default number of digits..." Alternatively,
we could rephrase the entire thing to use more active voice:

+ The `--abbrev=<n>` option modifies the minimum number of digits
+ for these prefixes, including objects reported in displayed diff
+ output.

Thanks,
-Stolee
diff mbox series

Patch

diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 573fb9bb71..d73fdb8567 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -446,7 +446,8 @@  endif::git-format-patch[]
 --abbrev[=<n>]::
 	Instead of showing the full 40-byte hexadecimal object
 	name in diff-raw format output and diff-tree header
-	lines, show only a partial prefix.
+	lines, show <n> hexadecimal digits, or as many digits
+	as needed to form a unique object name.
 	In diff-patch output format, `--full-index` takes higher
 	precedence, i.e. if `--full-index` is specified, full blob
 	names will be shown regardless of `--abbrev`.
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt
index 7e81541996..34b496d485 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.txt
@@ -87,7 +87,9 @@  include::blame-options.txt[]
 
 --abbrev=<n>::
 	Instead of using the default 7+1 hexadecimal digits as the
-	abbreviated object name, use <n>+1 digits. Note that 1 column
+	abbreviated object name, use <m>+1 digits, where <m> is at
+	least <n> but ensures the commit object names are unique.
+	Note that 1 column
 	is used for a caret to mark the boundary commit.
 
 
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index ace4ad3da8..89611c3959 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -9,7 +9,7 @@  SYNOPSIS
 --------
 [verse]
 'git branch' [--color[=<when>] | --no-color] [--show-current]
-	[-v [--abbrev=<length> | --no-abbrev]]
+	[-v [--abbrev=<n> | --no-abbrev]]
 	[--column[=<options>] | --no-column] [--sort=<key>]
 	[--merged [<commit>]] [--no-merged [<commit>]]
 	[--contains [<commit>]] [--no-contains [<commit>]]
@@ -194,8 +194,10 @@  This option is only applicable in non-verbose mode.
 	Be more quiet when creating or deleting a branch, suppressing
 	non-error messages.
 
---abbrev=<length>::
-	Alter the sha1's minimum display length in the output listing.
+--abbrev=<n>::
+	In the verbose listing that show the commit object name,
+	use <n>, or as many hexdigits as needed to form a unique
+	object name.
 	The default value is 7 and can be overridden by the `core.abbrev`
 	config option.
 
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt
index 3cb2ebb438..60e3063fed 100644
--- a/Documentation/git-ls-files.txt
+++ b/Documentation/git-ls-files.txt
@@ -19,7 +19,7 @@  SYNOPSIS
 		[--exclude-standard]
 		[--error-unmatch] [--with-tree=<tree-ish>]
 		[--full-name] [--recurse-submodules]
-		[--abbrev] [--] [<file>...]
+		[--abbrev[=<n>]] [--] [<file>...]
 
 DESCRIPTION
 -----------
@@ -153,7 +153,8 @@  a space) at the start of each line:
 
 --abbrev[=<n>]::
 	Instead of showing the full 40-byte hexadecimal object
-	lines, show only a partial prefix.
+	lines, show <n>, or as many hexadecimal digits
+	as needed, to form a unique object name.
 	Non default number of digits can be specified with --abbrev=<n>.
 
 --debug::
diff --git a/Documentation/git-ls-tree.txt b/Documentation/git-ls-tree.txt
index a7515714da..480c668d0f 100644
--- a/Documentation/git-ls-tree.txt
+++ b/Documentation/git-ls-tree.txt
@@ -62,7 +62,8 @@  OPTIONS
 
 --abbrev[=<n>]::
 	Instead of showing the full 40-byte hexadecimal object
-	lines, show only a partial prefix.
+	lines, show <n>, or as many hexadecimal digits
+	as needed, to form a unique object name.
 	Non default number of digits can be specified with --abbrev=<n>.
 
 --full-name::
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
index 17c5aac4b7..da6ab0de0c 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.txt
@@ -16,7 +16,8 @@  configuration (see linkgit:git-config[1]).
 
 --abbrev-commit::
 	Instead of showing the full 40-byte hexadecimal commit object
-	name, show only a partial prefix.  Non default number of
+	name, show only a partial prefix that names the object uniquely.
+	Non default number of
 	digits can be specified with "--abbrev=<n>" (which also modifies
 	diff output, if it is displayed).
 +