git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/2] version --build-options: report commit, too, if possible

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 14, 2017, 23:34 UTC
Message-ID
<9b379e2060ca06e9cac44cdc69df327022be9c80.1513294410.git.johannes.schindelin@gmx.de>
In-Reply-To
<cover.1513294410.git.johannes.schindelin@gmx.de>

In particular when local tags are used (or tags that are pushed to some fork) to build Git, it is very hard to figure out from which particular revision a particular Git executable was built. It gets worse when those tags are deleted, or even updated.

Let's just report an exact, unabbreviated commit name in our build options.

We need to be careful, though, to report when the current commit cannot be determined, e.g. when building from a tarball without any associated Git repository. This could be the case also when extracting Git's source code into an unrelated Git worktree.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Makefile  | 4 +++-
 help.c    | 5 +++++
 version.c | 1 +
 version.h | 1 +
 4 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 5587bccc932..2ce70d205d9 100644
--- a/Makefile
+++ b/Makefile
@@ -1902,7 +1902,9 @@ builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
 version.sp version.s version.o: GIT-VERSION-FILE GIT-USER-AGENT
 version.sp version.s version.o: EXTRA_CPPFLAGS = \
 	'-DGIT_VERSION="$(GIT_VERSION)"' \
-	'-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)'
+	'-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)' \
+	'-DGIT_BUILT_FROM_COMMIT="$(shell GIT_CEILING_DIRECTORIES=\"$(CURDIR)/..\" \
+		git rev-parse -q --verify HEAD || :)"'
 
 $(BUILT_INS): git$X
 	$(QUIET_BUILT_IN)$(RM) $@ && \
diff --git a/help.c b/help.c
index cbcb159f367..60071a9beaa 100644
--- a/help.c
+++ b/help.c
@@ -413,6 +413,11 @@ int cmd_version(int argc, const char **argv, const char *prefix)
 
 	if (build_options) {
 		printf("cpu: %s\n", GIT_HOST_CPU);
+		if (git_built_from_commit_string[0])
+			printf("built from commit: %s\n",
+			       git_built_from_commit_string);
+		else
+			printf("no commit associated with this build\n");
 		printf("sizeof-long: %d\n", (int)sizeof(long));
 		/* NEEDSWORK: also save and output GIT-BUILD_OPTIONS? */
 	}
diff --git a/version.c b/version.c
index 6106a8098c8..41b718c29e1 100644
--- a/version.c
+++ b/version.c
@@ -3,6 +3,7 @@
 #include "strbuf.h"
 
 const char git_version_string[] = GIT_VERSION;
+const char git_built_from_commit_string[] = GIT_BUILT_FROM_COMMIT;
 
 const char *git_user_agent(void)
 {
diff --git a/version.h b/version.h
index 6911a4f1558..7c62e805771 100644
--- a/version.h
+++ b/version.h
@@ -2,6 +2,7 @@
 #define VERSION_H
 
 extern const char git_version_string[];
+extern const char git_built_from_commit_string[];
 
 const char *git_user_agent(void);
 const char *git_user_agent_sanitized(void);
-- 
2.15.1.windows.2
Previous: Johannes SchindelinNext: Junio C Hamano
Message 16 of 19 in “Offer more information in `git version --build-options`'s output”
  1. 0/2 Offer more information in `git version --build-options`'s outputJohannes Schindelin, Dec 8, 2017
  2. 1/2 git version --build-options: report the build platform, tooJohannes Schindelin, Dec 8, 2017
  3. Jonathan NiederDec 8, 2017
  4. Junio C HamanoDec 8, 2017
  5. Eric SunshineDec 8, 2017
  6. Eric SunshineDec 8, 2017
  7. Eric SunshineDec 9, 2017
  8. Johannes SchindelinDec 9, 2017
  9. 2/2 version --build-options: report commit, too, if possibleJohannes Schindelin, Dec 8, 2017
  10. Jonathan NiederDec 8, 2017
  11. Junio C HamanoDec 8, 2017
  12. Johannes SchindelinDec 14, 2017
  13. Johannes SchindelinDec 14, 2017
  14. 0/2 Offer more information in `git version --build-options`'s outputJohannes Schindelin, Dec 14, 2017
  15. 1/2 version --build-options: also report host CPUJohannes Schindelin, Dec 14, 2017
  16. 2/2 version --build-options: report commit, too, if possibleJohannes Schindelin, Dec 14, 2017
  17. Junio C HamanoDec 15, 2017
  18. Eric SunshineDec 15, 2017
  19. Junio C HamanoDec 15, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.