This adds $missmatch_git so that gitweb can run with a miss-matched git install. Gitweb, generally, runs fine on a very broad range of git versions, but it's not always practicle or useful to upgrade it every time you upgrade git. This allows the administrator to realize they are miss-matched, and should they be so inclined, disable the check entirely and run in a miss-matched fasion. This is more here to give an obvious warning as to whats going on vs. silently failing. Signed-off-by: John 'Warthog9' Hawley <warthog9@xxxxxxxxxxxxxx> --- gitweb/gitweb.perl | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 813e48f..d84f4c0 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -221,6 +221,9 @@ our %avatar_size = ( 'double' => 32 ); +# This is here to allow for missmatch git & gitweb versions +our $missmatch_git = ''; + # Used to set the maximum load that we will still respond to gitweb queries. # if we exceed this than we do the processing to figure out if there's a mirror # and redirect to it, or to just return 503 server busy @@ -579,6 +582,25 @@ if (get_loadavg() > $maxload) { our $git_version = qx("$GIT" --version) =~ m/git version (.*)$/ ? $1 : "unknown"; $number_of_git_cmds++; +# There's a pretty serious flaw that we silently fail if git doesn't find something it needs +# a quick and simple check is to have gitweb do a simple check - are we running on the same +# version of git that we shipped with - if not, throw up an error so that people doing +# first installs don't have to debug perl to figure out whats going on +if ( + $git_version ne $version + && + $missmatch_git eq '' +){ + git_header_html(); + print "<p><b>*** Warning ***</b></p>\n"; + print "<p>\n"; + print "This version of gitweb was compiled for <b>$version</b> however git version <b>$git_version</b> was found<br/>\n"; + print "If you are sure this version of git works with this version of gitweb - please define <b>\$missmatch_git</b> to a non empty string in your git config file.\n"; + print "</p>\n"; + git_footer_html(); + exit; +} + $projects_list ||= $projectroot; # ======================================================================