Thread (3 messages) 3 messages, 3 authors, 2024-12-18

make GIT_VERSION=foo broken, was Re: [PATCH v2] doc: remove extra quotes in generated docs

From: Jeff King <hidden>
Date: 2024-12-18 11:33:34

On Tue, Dec 17, 2024 at 05:22:08PM -0800, Junio C Hamano wrote:
quoted
-<refmiscinfo class="source">Git 2.47.1.409.g9bb10d27e7</refmiscinfo>
-<refmiscinfo class="manual">Git Manual</refmiscinfo>
+<refmiscinfo class="source">'Git 2.47.1.410.ga38edab7c8'</refmiscinfo>^M
+<refmiscinfo class="manual">'Git Manual'</refmiscinfo>^M
 </refmeta>
 <refnamediv>
     <refname>git-bisect</refname>

Thanks for filling the blanks in ;-)

The above differences however seem to be absorbed before these
strings reach git-bisect.1 by the documentation toolchain;
Running Documentation/doc-diff with --asciidoc or --asciidoctor
options do not show the difference in single quotes.
Hmm. I thought that might be because we override the version and date
strings in doc-diff to prevent extra output. But it seems that was
broken by the same commit. Try:

  ./doc-diff a38edab7^ a38edab7

and you'll get a bunch of:

-Git omitted                        1970-01-01                        GIT-ADD(1)
+Git 2.47.1.410.ga                  2024-12-06                        GIT-ADD(1)

diffs which show the breakage starting (and after that, you get further
changes as each version changes by one commit).

The override is done by setting GIT_VERSION on the make command line.
And indeed, it seems like:

  make GIT_VERSION=foobar

no longer has any effect. That could be a problem for packagers, as
well, if they try to inject a custom version string (e.g., to represent
the upstream version plus their patches). I don't know if anybody does
that, though.

The root of the problem is that we used to generate GIT-VERSION-FILE and
source it as a Makefile snippet. That let the usual Makefile precedence
rules override what was in the file. But after that commit, we use the
script to directly generate the version _and_ replace the contents of
asciidoc.conf, etc.

I think the workaround here would be to manually override asciidoc's
config like this:

  make ASCIIDOC='asciidoc -amansource="Git omitted" -arevdate=1970-01-01'

But besides being horrible, I think that only works because asciidoc
gives us a layer of indirection. The same problem exists for the
built-in version-def.h. Try this:

  $ git checkout v2.47.0
  $ make GIT_VERSION=super-secret
  [...]
  $ bin-wrappers/git version
  git version super-secret

  $ git checkout v2.48.0-rc0
  $ make GIT_VERSION=super-secret
  [...]
  $ bin-wrappers/git version
  git version 2.48.0.rc0

I wondered if this would also leak out over the network via the agent
string, but it doesn't seem to. I think because GIT_USER_AGENT is
handled specially in the script; we accept the value from the
environment and only default it to git/$GIT_VERSION.

Perhaps the script should be doing the same for GIT_VERSION itself,
along with GIT_DATE?

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help