[PATCH V2] hgweb: make refresh interval configurable
Yuya Nishihara
yuya at tcha.org
Sun Aug 23 09:00:08 CDT 2015
On Sat, 22 Aug 2015 23:01:30 -0700, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1440309591 25200
> # Sat Aug 22 22:59:51 2015 -0700
> # Node ID 3ea9ccc86445b39ae41af1621ad87663e5ad6ed0
> # Parent d9d3d49c4cf77049d12920980e91bf8e4a4ecda2
> hgweb: make refresh interval configurable
>
> hgwebdir refreshes the set of known repositories periodically. This
> is necessary because refreshing on every request could add significant
> request latency.
>
> More than once I've found myself wanting to tweak this interval at
> Mozilla. I've also wanted the ability to always refresh (often when
> writing tests for our replication setup).
>
> This patch makes the refresh interval configurable. Negative values
> indicate to always refresh. The default is left unchanged.
>
> diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
> --- a/mercurial/help/config.txt
> +++ b/mercurial/help/config.txt
> @@ -1751,8 +1751,16 @@ The full set of options is:
> ``push_ssl``
> Whether to require that inbound pushes be transported over SSL to
> prevent password sniffing. Default is True.
>
> +``refreshinterval``
> + How frequently directory listings re-scan the filesystem for new
> + repositories, in seconds. This is relevant when wildcards are used
> + to define paths. Depending on how much filesystem traversal is
> + required, refreshing may negatively impact performance.
> +
> + Default is 20. Values less than or equal to 0 always refresh.
> +
> ``staticurl``
> Base URL to use for static files. If unset, static files (e.g. the
> hgicon.png favicon) will be served by the CGI script itself. Use
> this setting to serve them directly with the HTTP server.
> diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py
> --- a/mercurial/hgweb/hgwebdir_mod.py
> +++ b/mercurial/hgweb/hgwebdir_mod.py
> @@ -78,19 +78,25 @@ def geturlcgivars(baseurl, port):
>
> return name, str(port), path
>
> class hgwebdir(object):
> - refreshinterval = 20
> -
> def __init__(self, conf, baseui=None):
> self.conf = conf
> self.baseui = baseui
> + self.ui = None
> self.lastrefresh = 0
> self.motd = None
> self.refresh()
>
> def refresh(self):
> - if self.lastrefresh + self.refreshinterval > time.time():
> + refreshinterval = 20
> + if self.ui:
OT: not sure how important it is to delay the initialization of self.ui.
> + refreshinterval = self.ui.configint('web', 'refreshinterval',
> + refreshinterval)
> +
> + # refreshinterval <= 0 means to always refresh.
> + if (refreshinterval > 0 and
> + self.lastrefresh + refreshinterval > time.time()):
> return
refreshinterval > 0 isn't necessary?
if
lastrefresh <= time.time(),
refreshinterval <= 0
then
lastrefresh + refreshinterval <= time.time()
(always refresh)
More information about the Mercurial-devel
mailing list