[PATCHv5/RFC 17/17] gitweb: Add startup delay to activity indicator for cache
From: Jakub Narebski <hidden>
Date: 2016-06-15 22:49:43
Subsystem:
the rest · Maintainer:
Linus Torvalds
This adds support for [optional] startup delay to git_generating_data_html()
subroutine, which is used to provide "Generating..." page as activity
indicator when waiting for page to be generated if caching. If the data
(page contents) gets generated within $generating_options{'staryp_delay'}
seconds, the "Generating..." page won't get displayed.
This feature was created in response to complaint by Petr 'Pasky' Baudis'
about "Generating..." feature.
Signed-off-by: Jakub Narebski <redacted>
---
No changes since v4 (previous version).
This patch doesn't have equivalent in J.H. patch, and is rather
extension of idea of progress indicator for (re)generating [cache]
data. It was inspired by comment by Petr 'Pasky' Baudis on #git IRC
channel that one doesn't want to have "Generating..." page to be shown
only to immediately vanish.
gitweb/gitweb.perl | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 07fa825..fee8739 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl@@ -354,6 +354,9 @@ our %cache_options = ( # (which means that $cache_options{'generating_info'} is set to coderef); # override them with $GITWEB_CONFIG as necessary. our %generating_options = ( + # The delay before displaying "Generating..." page, in seconds. It is + # intended for "Generating..." page to be shown only when really needed. + 'startup_delay' => 1, # The time between generating new piece of output to prevent from # redirection before data is ready, i.e. time between printing each # dot in activity indicator / progress info, in seconds.
@@ -3570,6 +3573,23 @@ sub git_generating_data_html { return; } + # Initial delay + if ($generating_options{'startup_delay'} > 0) { + eval { + local $SIG{ALRM} = sub { die "alarm clock restart\n" }; # NB: \n required + alarm $generating_options{'startup_delay'}; + flock($lock_fh, LOCK_SH); # blocking readers lock + alarm 0; + }; + if ($@) { + # propagate unexpected errors + die $@ if $@ !~ /alarm clock restart/; + } else { + # we got response within 'startup_delay' timeout + return; + } + } + my $title = "[Generating...] " . get_page_title(); # TODO: the following line of code duplicates the one # in git_header_html, and it should probably be refactored.
--
1.7.3