Re: --no-decorate and %d in git-log(1)
From: Marc Branchaud <hidden>
Date: 2026-02-25 21:46:16
On 2026-02-25 13:08, Junio C Hamano wrote:
Marc Branchaud [off-list ref] writes:quoted
BTW, --decorate=auto is documented as "if the output is going to a terminal, the ref names are shown as if `short` were given, otherwise no ref names are shown." But in my experiments %d still shows refs even when the output is piped to a file. Seems like another symptom of the same bug?Isn't that documentation merely referring to "git log" without "--format=... %d ..." and not about the case where you explicitly ask for "%d"? That is, the description is there to explain the differences between git log --oneline --decorate=auto -1 git log --oneline --decorate=auto -1 | cat isn't it?
I'm sure that's how the code works, but I don't see any indication in the documentation that this is for when --format isn't used or when the format doesn't contain %d. The descriptions of --decorate and --format mostly just ignore each other. We do have this at the end of the --format section: The %d and %D placeholders will use the "short" decoration format if --decorate was not already provided on the command line. Given this documented connection between %d/%D and --decorate, it seems reasonable for a reader to assume that --decorate=auto would do the same thing regardless of whether or not a --format=...%d... was present.
I think --decorate=auto is the default so the above without --decorate=auto would behave similarly.quoted
(Do people who use `--format` (with or without %d) *also* use `--decorate`? It seems like the two are naturally exclusive, even if the code allows them both.)That is an interesting question, but I am not sure if it affects how we decide to resolve this discussion.
Yeah, it's more philosophical, though if we did know the answer was "the two are almost never used together" we'd be more comfortable changing how --decorate=no and --format=%d interact. I note that currently --decorate has no effect at all if the --format doesn't contain %d or %D. To me this bolsters the argument for making --decorate=no suppress %d/%D. To expand on my earlier point: --decorate=no currently has the same effect on %d/%D as --decorate=short, so it seems to me that we can change what --decorate=no does because if anyone needs to preserve the existing behavior for their favorite --format they can just use --decorate=short. (I'd be surprised if anyone is using --decorate=no to ensure that they get the short ref names). M.