summaryrefslogtreecommitdiff
path: root/GIT-VERSION-GEN
AgeCommit message (Collapse)Author
2025-11-19Start 2.53 cycleJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-11-17Git 2.52v2.52.0origin/maintJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-11-12Git 2.52-rc2v2.52.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-11-05Git 2.52-rc1v2.52.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-11-03Git 2.52-rc0v2.52.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-08-21Start 2.52 cycle, the first batchJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-08-17Git 2.51v2.51.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-08-13Git 2.51-rc2v2.51.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-08-07Git 2.51-rc1v2.51.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-06-17Start 2.51 cycle, the first batchJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-06-15Git 2.50v2.50.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-06-13Merge branch 'jc/sed-build-fixes'Junio C Hamano
Build fix. * jc/sed-build-fixes: build: sed portability fixes
2025-06-12build: sed portability fixesJunio C Hamano
Recently generating the version-def.h file and the config-list.h file have been updated, which broke versions of "sed" that do not want to be fed a file that ends with an incomplete line, and/or that do not understand the more recent "-E" option to use extended regular expression. Fix them in response to a build-failure reported on Solaris boxes. cf. https://lore.kernel.org/git/09f954b8-d9c3-418f-ad4b-9cb9b063f4ae@comstyle.com/ Reported-by: Brad Smith <brad@comstyle.com> Reviewed-by: Collin Funk <collin.funk1@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-06-09Git 2.50-rc2v2.50.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-06-03Git 2.50-rc1v2.50.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-05-28Git 2.50-rc0v2.50.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-03-26Start 2.50 cycle (batch #1)Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-03-14Git 2.49v2.49.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-03-10Git 2.49-rc2v2.49.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-03-04Git 2.49-rc1v2.49.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-02-26Git 2.49-rc0v2.49.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-02-03Merge branch 'ps/build-meson-fixes'Junio C Hamano
More build fixes and enhancements on meson based build procedure. * ps/build-meson-fixes: ci: wire up Visual Studio build with Meson ci: raise error when Meson generates warnings meson: fix compilation with Visual Studio meson: make the CSPRNG backend configurable meson: wire up fuzzers meson: wire up generation of distribution archive meson: wire up development environments meson: fix dependencies for generated headers meson: populate project version via GIT-VERSION-GEN GIT-VERSION-GEN: allow running without input and output files GIT-VERSION-GEN: simplify computing the dirty marker
2025-01-22GIT-VERSION-GEN: allow running without input and output filesPatrick Steinhardt
The GIT-VERSION-GEN script requires an input file containing formatting directives to be replaced as well as an output file that will get overwritten in case the file contents have changed. When computing the project version for Meson we don't want to have either though: - We only want to compute the version without anything else, but don't have an input file that would match that exact format. While we could of course introduce a new file just for that usecase, it feels suboptimal to add another file every time we want to have a slightly different format for versioned data. - The computed version needs to be read from stdout so that Meson can wire it up for the project. Extend the script to handle both usecases by recognizing `--format=` as alternative to providing an input path and by writing to stdout in case no output file was given. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-01-22GIT-VERSION-GEN: simplify computing the dirty markerPatrick Steinhardt
The GIT-VERSION-GEN script computes the version that Git is being built from. When building from a commit with an unclean worktree it knows to append "-dirty" to that version to indicate that there were custom changes applied and that it isn't the exact same as that commit. The dirtiness check is done manually via git-diff-index(1), which is somewhat puzzling though: we already use git-describe(1) to compute the version, which also knows to compute dirtiness via the "--dirty" flag. But digging back in history explains why: the "-dirty" suffix was added in 31e0b2ca81 (GIT 1.5.4.3, 2008-02-23), and git-describe(1) didn't yet have support for "--dirty" back then. Refactor the script to use git-describe(1). Despite being simpler, it also results in a small speedup: Benchmark 1: git describe --dirty --match "v[0-9]*" Time (mean ± σ): 12.5 ms ± 0.3 ms [User: 6.3 ms, System: 8.8 ms] Range (min … max): 12.0 ms … 13.5 ms 200 runs Benchmark 2: git describe --match "v[0-9]*" HEAD && git update-index -q --refresh && git diff-index --name-only HEAD -- Time (mean ± σ): 17.9 ms ± 1.1 ms [User: 8.8 ms, System: 14.4 ms] Range (min … max): 17.0 ms … 30.6 ms 148 runs Summary git describe --dirty --match "v[0-9]*" ran 1.43 ± 0.09 times faster than git describe --match "v[0-9]*" && git update-index -q --refresh && git diff-index --name-only HEAD -- While the speedup doesn't really matter on Unix-based systems, where filesystem operations are typically fast, they do matter on Windows where the commands take a couple hundred milliseconds. A quick and dirty check on that system shows a speedup from ~800ms to ~400ms. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-01-13Start the Git 2.49 cycleJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-01-10Git 2.48v2.48.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-01-10GIT-VERSION-GEN: allow it to be run in parallelJohannes Schindelin
"Why would one want to run it in parallel?" I hear you ask. I am glad you are curious, because a curious story is what it is, indeed. The `GIT-VERSION-GEN` script is quite a pillar of Git's source code, with most lines being unchanged for the past 15 years. Until the v2.48.0 release candidate cycle. Its original purpose was to generate the version string and store it in the `GIT-VERSION-FILE`. This paradigm changed quite dramatically when support for building with Meson was introduced. Most crucially, a38edab7c88b (Makefile: generate doc versions via GIT-VERSION-GEN, 2024-12-06) changed the way the documentation is built by using the `GIT-VERSION-GEN` file to write out the `asciidocor-extensions.rb` and `asciidoc.conf` files with now hard-coded version strings. Crucially, the Makefile rule to generate those files needs to be run in every build because `GIT_VERSION` could have been specified in the `make` command-line, which would require these files to be modified. This introduced a surprising race condition! And this is how that race surfaces: When calling `make -j2 html man` from the top-level directory (a variant of which is invoked in Git for Windows' release process), two sub-processes are spawned, a `make -C Documentation html` one and a `make -C Documentation man` one. Both run the rule to (re-)generate `asciidoctor-extensions.rb` or `asciidoc.conf`, invoking `GIT-VERSION-GEN` to do so. That script first generates a temporary file (appending the `+` character to the filename), then looks whether it contains something different than the already existing file (if it exists, that is), and either replaces it if needed, or removes the temporary file. If one of the two parallel invocations removes that temporary file before the other can compare it, or even worse: if one tries to replace the target file just after the other _started_ writing the temporary file (but did not finish writing it yet), that race condition now causes bad builds. This may sound highly theoretical, but due to the design of Git's build process, Git for Windows is forced to use a (slow) POSIX emulation layer to run that script and in the blink of an eye it becomes very much not theoretical at all. See Exhibit A: These GitHub workflow runs failed because one of the two competing `make` processes tried to remove the temporary file when the other process had already done so: https://github.com/git-for-windows/git-sdk-32/actions/runs/12663456654 https://github.com/git-for-windows/git-sdk-32/actions/runs/12683174970 https://github.com/git-for-windows/git-sdk-64/actions/runs/12649348496 While it is undesirable to run this script over and over again, certainly when this involves above-mentioned slow POSIX emulation layer, the stage of the release cycle in which we are presently finding ourselves does not lend itself to a re-design where this script could be run once, and once only, but instead dictates that a quick and reliable work-around be implemented that prevents the race condition without changing the overall architecture of the build process. This patch does that: By using a filename suffix for the temporary file which is based on the currently-executing script's process ID, We guarantee that the two competing invocations cannot overwrite or remove each others' temporary files. The filename suffix still ends in `+` to ensure that the temporary artifacts are matched by the `*+` pattern in `.gitignore` that was added in f9bbaa384ef (Add intermediate build products to .gitignore, 2009-11-08). Helped-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-01-06Git 2.48-rc2v2.48.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-23Hopefully the final batch before 2.48-rc1Junio C Hamano
Let's wait for git-gui, gitk, and possibly po/ and delay the tagging of the -rc1. Many people are already offline for the end-of-year holidays and it is a slow week, and 'master' front has too many new things graduated from 'next' a bit too early for me to feel comfortable. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-23Merge branch 'ps/build-hotfix'Junio C Hamano
A topic to optionally build with meson, which has graduated to 'master' recently, has regressed the normal Makefile build, which is being corrected. * ps/build-hotfix: meson: add options to override build information GIT-VERSION-GEN: fix overriding GIT_BUILT_FROM_COMMIT and GIT_DATE GIT-VERSION-GEN: fix overriding GIT_VERSION Makefile: introduce template for GIT-VERSION-GEN Makefile: drop unneeded indirection for GIT-VERSION-GEN outputs Makefile: stop including "GIT-VERSION-FILE" in docs
2024-12-20GIT-VERSION-GEN: fix overriding GIT_BUILT_FROM_COMMIT and GIT_DATEPatrick Steinhardt
Same as with the preceding commit, neither GIT_BUILT_FROM_COMMIT nor GIT_DATE can be overridden via the environment. Especially the latter is of importance given that we set it in our own "Documentation/doc-diff" script. Make the values of both variables overridable. Luckily we don't pull in these values via any included Makefiles, so the fix is trivial compared to the fix for GIT_VERSON. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-20GIT-VERSION-GEN: fix overriding GIT_VERSIONPatrick Steinhardt
GIT-VERSION-GEN tries to derive the version that Git is being built from via multiple different sources in the following order: 1. A file called "version" in the source tree's root directory, if it exists. 2. The current commit in case Git is built from a Git repository. 3. Otherwise, we use a fallback version stored in a variable which is bumped whenever a new Git version is getting tagged. It used to be possible to override the version by overriding the `GIT_VERSION` Makefile variable (e.g. `make GIT_VERSION=foo`). This worked somewhat by chance, only: `GIT-VERSION-GEN` would write the actual Git version into `GIT-VERSION-FILE`, not the overridden value, but when including the file into our Makefile we would not override the `GIT_VERSION` variable because it has already been set by the user. And because our Makefile used the variable to propagate the version to our build tools instead of using `GIT-VERSION-FILE` the resulting build artifacts used the overridden version. But that subtle mechanism broke with 4838deab65 (Makefile: refactor GIT-VERSION-GEN to be reusable, 2024-12-06) and subsequent commits because the version information is not propagated via the Makefile variable anymore, but instead via the files that `GIT-VERSION-GEN` started to write. And as the script never knew about the `GIT_VERSION` environment variable in the first place it uses one of the values listed above instead of the overridden value. Fix this issue by making `GIT-VERSION-GEN` handle the case where `GIT_VERSION` has been set via the environment. Note that this requires us to introduce a new GIT_VERSION_OVERRIDE variable that stores a potential user-provided value, either via the environment or via "config.mak". Ideally we wouldn't need it and could just continue to use GIT_VERSION for this. But unfortunately, Makefiles will first include all sub-Makefiles before figuring out whether it needs to re-make any of them [1]. Consequently, if there already is a GIT-VERSION-FILE, we would have slurped in its value of GIT_VERSION before we call GIT-VERSION-GEN, and because GIT-VERSION-GEN now uses that value as an override it would mean that the first generated value for GIT_VERSION will remain unchanged. Furthermore we have to move the include for "GIT-VERSION-FILE" after the includes for "config.mak" and related so that GIT_VERSION_OVERRIDE can be set to the value provided by "config.mak". [1]: https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-16Git 2.48-rc0v2.48.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-07Makefile: generate doc versions via GIT-VERSION-GENPatrick Steinhardt
The documentation we generate embeds information for the exact Git version used as well as the date of the commit. This information is injected by injecting attributes into the build process via command line argument. Refactor the logic so that we write the information into "asciidoc.conf" and "asciidoctor-extensions.rb" via `GIT-VERSION-GEN` for AsciiDoc and AsciiDoctor, respectively. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-07Makefile: generate "git.rc" via GIT-VERSION-GENPatrick Steinhardt
The "git.rc" is used on Windows to embed information like the project name and version into the resulting executables. As such we need to inject the version information, which we do by using preprocessor defines. The logic to do so is non-trivial and needs to be kept in sync with the different build systems. Refactor the logic so that we generate "git.rc" via `GIT-VERSION-GEN`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-07Makefile: propagate Git version via generated headerPatrick Steinhardt
We set up a couple of preprocessor macros when compiling Git that propagate the version that Git was built from to `git version` et al. The way this is set up makes it harder than necessary to reuse the infrastructure across the different build systems. Refactor this such that we generate a "version-def.h" header via `GIT-VERSION-GEN` instead. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-07Makefile: refactor GIT-VERSION-GEN to be reusablePatrick Steinhardt
Our "GIT-VERSION-GEN" script always writes the "GIT-VERSION-FILE" into the current directory, where the expectation is that it should exist in the source directory. But other build systems that support out-of-tree builds may not want to do that to keep the source directory pristine, even though CMake currently doesn't care. Refactor the script such that it won't write the "GIT-VERSION-FILE" directly anymore, but instead knows to replace @PLACEHOLDERS@ in an arbitrary input file. This allows us to simplify the logic in CMake to determine the project version, but can also be reused later on in order to generate other files that need to contain version information like our "git.rc" file. While at it, change the format of the version file by removing the spaces around the equals sign. Like this we can continue to include the file in our Makefiles, but can also start to source it in shell scripts in subsequent steps. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-10-10Start the 2.48 cycleJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-10-06Git 2.47v2.47.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-10-02Git 2.47-rc1v2.47.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-09-25Git 2.47-rc0v2.47.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-07-31Start the 2.47 cycleJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-07-29Git 2.46v2.46.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-07-23Git 2.46-rc2v2.46.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-07-18Git 2.46-rc1v2.46.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-07-12Git 2.46-rc0v2.46.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-04-30Start the 2.46 cycleJunio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-04-29Git 2.45v2.45.0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-04-23Git 2.45-rc1v2.45.0-rc1Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-04-19Git 2.45-rc0v2.45.0-rc0Junio C Hamano
Signed-off-by: Junio C Hamano <gitster@pobox.com>