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

[PATCH 2/7] gitweb: Add option to force version match

From
John 'Warthog9' Hawley <warthog9@eaglescrag.net>
Date
Jan 13, 2010, 09:34 UTC
Message-ID
<1263375282-15508-3-git-send-email-warthog9@eaglescrag.net>
In-Reply-To
<1263375282-15508-2-git-send-email-warthog9@eaglescrag.net>
From: John 'Warthog9' Hawley <warthog9@kernel.org>

This adds $git_versions_must_match variable, which is set to true value 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 off.

v3 - warthog9: adjust to use die_error instead of recreating it v2 - Jakub: Changes to make non-default, and change naming v1 - warthog9: Initial

Signed-off-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
 gitweb/README      |    3 +++
 gitweb/gitweb.perl |   28 ++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/gitweb/README b/gitweb/README
index 6c2c8e1..608b0f8 100644
--- a/gitweb/README
+++ b/gitweb/README
@@ -233,6 +233,9 @@ not include variables usually directly set during build):
    If server load exceed this value then return "503 Service Unavaliable" error.
    Server load is taken to be 0 if gitweb cannot determine its value.  Set it to
    undefined value to turn it off.  The default is 300.
+ * $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 false.
 
 
 Projects list file format
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 0a07d3a..f17593f 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -221,6 +221,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 = 0;
+
 # 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.
@@ -587,6 +590,31 @@ if (defined $maxload && get_loadavg() > $maxload) {
 our $git_version = qx("$GIT" --version) =~ m/git version (.*)$/ ? $1 : "unknown";
 $number_of_git_cmds++;
 
+# 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;
+Internal Server Error
+<br />
+</div>
+<hr />
+<div class="readme">
+<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, $err_msg);
+}
+
 $projects_list ||= $projectroot;
 
 # ======================================================================
-- 
1.6.5.2
Previous: John 'Warthog9' HawleyNext: John 'Warthog9' Hawley
Message 3 of 11 in “Gitweb caching v4”
  1. 0/7 Gitweb caching v4John 'Warthog9' Hawley, Jan 13, 2010
  2. 1/7 gitweb: Load checkingJohn 'Warthog9' Hawley, Jan 13, 2010
  3. 2/7 gitweb: Add option to force version matchJohn 'Warthog9' Hawley, Jan 13, 2010
  4. 3/7 gitweb: Makefile improvementsJohn 'Warthog9' Hawley, Jan 13, 2010
  5. 4/7 gitweb: Optionally add "git" links in project list pageJohn 'Warthog9' Hawley, Jan 13, 2010
  6. 5/7 gitweb: Convert output to using indirect file handleJohn 'Warthog9' Hawley, Jan 13, 2010
  7. 6/7 gitweb: add a get function to compliment print_local_timeJohn 'Warthog9' Hawley, Jan 13, 2010
  8. 7/7 gitweb: File based caching layer (from git.kernel.org)John 'Warthog9' Hawley, Jan 13, 2010
  9. Junio C HamanoJan 14, 2010
  10. J.H.Jan 14, 2010
  11. Junio C HamanoJan 14, 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.