[PATCH 17/18] gitweb: Prepare for cached error pages & better error page handling
- From
John 'Warthog9' Hawley <warthog9@eaglescrag.net>
- Date
- Dec 9, 2010, 21:57 UTC
- Message-ID
- <1291931844-28454-18-git-send-email-warthog9@eaglescrag.net>
- In-Reply-To
- <1291931844-28454-1-git-send-email-warthog9@eaglescrag.net>
To quote myself from an e-mail of mine:
I've got a hammer, it clearly solves all problems!
This is the prepatory work to set up a mechanism inside the caching engine to cache the error pages instead of throwing them straight out to the client.
This adds two functions:
die_error_cache() - this gets back called from die_error() so that the error message generated can be cached.
cacheDisplayErr() - this is a simplified version of cacheDisplay() that does an initial check, if the error page exists - display it and exit. If not, return.
Signed-off-by: John 'Warthog9' Hawley <warthog9@eaglescrag.net> --- gitweb/lib/cache.pl | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/gitweb/lib/cache.pl b/gitweb/lib/cache.pl index a8c902d..6cb82c8 100644 --- a/gitweb/lib/cache.pl +++ b/gitweb/lib/cache.pl @@ -302,6 +302,36 @@ sub cacheUpdate { } } +sub die_error_cache { + my ($output) = @_; + + open(my $cacheFileErr, '>:utf8', "$fullhashpath.err"); + my $lockStatus = flock($cacheFileErr,LOCK_EX|LOCK_NB); + + if (! $lockStatus ){ + if ( $areForked ){ + exit(0); + }else{ + return; + } + } + + # Actually dump the output to the proper file handler + local $/ = undef; + $|++; + print $cacheFileErr "$output"; + $|--; + + flock($cacheFileErr,LOCK_UN); + close($cacheFileErr); + + if ( $areForked ){ + exit(0); + }else{ + return; + } +} + sub cacheWaitForUpdate { my ($action) = @_; @@ -380,6 +410,28 @@ EOF return; } +sub cacheDisplayErr { + + return if ( ! -e "$fullhashpath.err" ); + + open($cacheFileErr, '<:utf8', "$fullhashpath.err"); + $lockStatus = flock($cacheFileErr,LOCK_SH|LOCK_NB); + + if (! $lockStatus ){ + show_warning( + "<p>". + "<strong>*** Warning ***:</strong> Locking error when trying to lock error cache page, file $fullhashpath.err<br/>/\n". + "This is about as screwed up as it gets folks - see your systems administrator for more help with this.". + "<p>" + ); + } + + while( <$cacheFileErr> ){ + print $_; + } + exit(0); +} + sub cacheDisplay { local $/ = undef; $|++;
-- 1.7.2.3