diff -r 208303a8172c -r 6509fcec830c mercurial/url.py --- a/mercurial/url.py Wed Sep 26 23:50:14 2018 +0200 +++ b/mercurial/url.py Thu Oct 04 11:28:48 2018 +0200 @@ -317,8 +317,8 @@ class logginghttphandler(httphandler): """HTTP handler that logs socket I/O.""" - def __init__(self, logfh, name, observeropts): - super(logginghttphandler, self).__init__() + def __init__(self, logfh, name, observeropts, timeout=None): + super(logginghttphandler, self).__init__(timeout=timeout) self._logfh = logfh self._logname = name @@ -365,8 +365,8 @@ sslutil.validatesocket(self.sock) class httpshandler(keepalive.KeepAliveHandler, urlreq.httpshandler): - def __init__(self, ui): - keepalive.KeepAliveHandler.__init__(self) + def __init__(self, ui, timeout=None): + keepalive.KeepAliveHandler.__init__(self, timeout=timeout) urlreq.httpshandler.__init__(self) self.ui = ui self.pwmgr = passwordmgr(self.ui, @@ -525,18 +525,19 @@ ``sendaccept`` allows controlling whether the ``Accept`` request header is sent. The header is sent by default. ''' + timeout = ui.configwith(float, 'http', 'timeout') handlers = [] if loggingfh: handlers.append(logginghttphandler(loggingfh, loggingname, - loggingopts or {})) + loggingopts or {}, timeout=timeout)) # We don't yet support HTTPS when logging I/O. If we attempt to open # an HTTPS URL, we'll likely fail due to unknown protocol. else: - handlers.append(httphandler()) + handlers.append(httphandler(timeout=timeout)) if has_https: - handlers.append(httpshandler(ui)) + handlers.append(httpshandler(ui, timeout=timeout)) handlers.append(proxyhandler(ui))