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

[PATCH 1/3] gitweb: Add option to force version match

From
John 'Warthog9' Hawley <warthog9@eaglescrag.net>
Date
Oct 28, 2010, 00:42 UTC
Message-ID
<1288226574-19068-2-git-send-email-warthog9@eaglescrag.net>
In-Reply-To
<1288226574-19068-1-git-send-email-warthog9@eaglescrag.net>

This adds $git_versions_must_match variable, which is set to true, checks that we are running on the same version of git that we shipped with, and if not throw '500 Internal Server Error' error. What is checked is the version of gitweb (embedded in building gitweb.cgi), against version of runtime git binary used.

Gitweb can usually run with a mismatched git install. This is more here to give an obvious warning as to whats going on vs. silently failing.

By default this feature is turned on.
Signed-off-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
 gitweb/README      |    4 ++++
 gitweb/gitweb.perl |   27 +++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/gitweb/README b/gitweb/README
index bf3664f..7ee8450 100644
--- a/gitweb/README
+++ b/gitweb/README
@@ -246,6 +246,10 @@ not include variables usually directly set during build):
    http://www.andre-simon.de due to assumptions about parameters and output).
    Useful if highlight is not installed on your webserver's PATH.
    [Default: highlight]
+ * $git_versions_must_match
+   If set, gitweb fails with 500 Internal Server Error if the version of gitweb
+   doesn't match version of git binary.  The default is true.
+
 
 Projects list file format
 ~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 8d7e4c5..215a4e9 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -232,6 +232,9 @@ our %avatar_size = (
 	'double'  => 32
 );
 
+# If it is true, exit if gitweb version and git binary version don't match
+our $git_versions_must_match = 1;
+
 # Used to set the maximum load that we will still respond to gitweb queries.
 # If server load exceed this value then return "503 server busy" error.
 # If gitweb cannot determined server load, it is taken to be 0.
@@ -649,6 +652,29 @@ sub check_loadavg {
 	}
 }
 
+sub check_versionmatch {
+	# Throw an error if git versions does not match, if $git_versions_must_match is true.
+	if ($git_versions_must_match &&
+	    $git_version ne $version) {
+		my $admin_contact =
+			defined $ENV{'SERVER_ADMIN'} ? ", $ENV{'SERVER_ADMIN'}," : '';
+		my $err_msg = <<EOT;
+<h1 align="center">*** Warning ***</h1>
+<p>
+This version of gitweb was compiled for <b>@{[esc_html($version)]}</b>,
+however git version <b>@{[esc_html($git_version)]}</b> was found on server,
+and administrator requested strict version checking.
+</p>
+<p>
+Please contact the server administrator${admin_contact} to either configure
+gitweb to allow mismatched versions, or update git or gitweb installation.
+</p>
+EOT
+		die_error(500, 'Internal server error', $err_msg);
+	}
+
+}
+
 # ======================================================================
 # input validation and dispatch
 
@@ -1075,6 +1101,7 @@ sub run_request {
 	evaluate_uri();
 	evaluate_gitweb_config();
 	check_loadavg();
+	check_versionmatch();
 
 	# $projectroot and $projects_list might be set in gitweb config file
 	$projects_list ||= $projectroot;
Previous: John 'Warthog9' HawleyNext: Jakub Narebski
Message 2 of 43 in “Gitweb caching v7”
  1. 0/3 Gitweb caching v7John 'Warthog9' Hawley, Oct 28, 2010
  2. 1/3 gitweb: Add option to force version matchJohn 'Warthog9' Hawley, Oct 28, 2010
  3. Jakub NarebskiOct 28, 2010
  4. Junio C HamanoOct 28, 2010
  5. 2/3 gitweb: add output buffering and associated functionsJohn 'Warthog9' Hawley, Oct 28, 2010
  6. Jakub NarebskiOct 28, 2010
  7. 3/3 gitweb: File based caching layer (from git.kernel.org)John 'Warthog9' Hawley, Oct 28, 2010
  8. Jakub NarebskiOct 28, 2010
  9. Junio C HamanoOct 28, 2010
  10. Junio C HamanoOct 29, 2010
  11. Jakub NarebskiOct 30, 2010
  12. Junio C HamanoOct 31, 2010
  13. Jakub NarebskiOct 31, 2010
  14. 0/4 Gitweb caching v7.1Jakub Narebski, Nov 1, 2010
  15. 0/4 Gitweb caching v7.2Jakub Narebski, Nov 12, 2010
  16. 1/4 gitweb: Prepare for splitting gitwebJakub Narebski, Nov 12, 2010
  17. Junio C HamanoNov 17, 2010
  18. Jakub NarebskiNov 18, 2010
  19. 1/4 gitweb: Prepare for splitting gitwebJakub Narebski, Dec 2, 2010
  20. Junio C HamanoDec 2, 2010
  21. Jakub NarebskiDec 2, 2010
  22. Junio C HamanoDec 2, 2010
  23. Jakub NarebskiDec 2, 2010
  24. 2/4 gitweb: add output buffering and associated functionsJakub Narebski, Nov 12, 2010
  25. 3/4 gitweb: File based caching layer (from git.kernel.org)Jakub Narebski, Nov 12, 2010
  26. 3/4 gitweb: File based caching layer (from git.kernel.org)Jakub Narebski, Nov 28, 2010
  27. Jakub NarebskiNov 28, 2010
  28. Junio C HamanoNov 29, 2010
  29. Junio C HamanoNov 29, 2010
  30. 3/4 gitweb: File based caching layer (from git.kernel.org)Jakub Narebski, Nov 29, 2010
  31. Junio C HamanoNov 30, 2010
  32. Jakub NarebskiNov 30, 2010
  33. demerphqNov 29, 2010
  34. demerphqNov 29, 2010
  35. Jakub NarebskiNov 29, 2010
  36. 4/4 gitweb: Minimal testing of gitweb cachingJakub Narebski, Nov 13, 2010
  37. Junio C HamanoNov 17, 2010
  38. Jakub NarebskiNov 17, 2010
  39. 1/4 gitweb: Prepare for splitting gitwebJakub Narebski, Nov 1, 2010
  40. 1/4 gitweb: Prepare for splitting gitwebJakub Narebski, Nov 1, 2010
  41. 2/4 gitweb: add output buffering and associated functionsJakub Narebski, Nov 1, 2010
  42. 3/4 gitweb: File based caching layer (from git.kernel.org)Jakub Narebski, Nov 1, 2010
  43. 4/4 gitweb: Minimal testing of gitweb cachingJakub Narebski, Nov 1, 2010

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.