[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