D4878: url: Allow to configure timeout on http connection
ced (Cédric Krier)
phabricator at mercurial-scm.org
Thu Oct 4 11:46:59 EDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGe4a73d589006: url: Allow to configure timeout on http connection (authored by ced, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D4878?vs=11669&id=11677
REVISION DETAIL
https://phab.mercurial-scm.org/D4878
AFFECTED FILES
mercurial/configitems.py
mercurial/help/config.txt
mercurial/keepalive.py
mercurial/url.py
CHANGE DETAILS
diff --git a/mercurial/url.py b/mercurial/url.py
--- a/mercurial/url.py
+++ b/mercurial/url.py
@@ -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))
diff --git a/mercurial/keepalive.py b/mercurial/keepalive.py
--- a/mercurial/keepalive.py
+++ b/mercurial/keepalive.py
@@ -172,8 +172,9 @@
return dict(self._hostmap)
class KeepAliveHandler(object):
- def __init__(self):
+ def __init__(self, timeout=None):
self._cm = ConnectionManager()
+ self._timeout = timeout
self.requestscount = 0
self.sentbytescount = 0
@@ -234,7 +235,7 @@
h = self._cm.get_ready_conn(host)
else:
# no (working) free connections were found. Create a new one.
- h = http_class(host)
+ h = http_class(host, timeout=self._timeout)
if DEBUG:
DEBUG.info("creating new connection to %s (%d)",
host, id(h))
diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -1322,6 +1322,16 @@
Optional. Always use the proxy, even for localhost and any entries
in ``http_proxy.no``. (default: False)
+``http``
+----------
+
+Used to configure access to Mercurial repositories via HTTP.
+
+``timeout``
+ If set, blocking operations will timeout after that many seconds.
+ (default: None)
+
+
``merge``
---------
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -737,6 +737,11 @@
coreconfigitem('http_proxy', 'user',
default=None,
)
+
+coreconfigitem('http', 'timeout',
+ default=None,
+)
+
coreconfigitem('logtoprocess', 'commandexception',
default=None,
)
To: ced, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list