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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 17, 2024 at 05:22:08PM -0800, Junio C Hamano wrote:

> > -<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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux