diff hgext/clonebundles.py @ 26645:2faa7671a4b3

clonebundles: filter on SNI requirement Server Name Indication (SNI) is commonly used in CDNs and other hosted environments. Unfortunately, Python <2.7.9 does not support SNI and when these older Python versions attempt to negotiate TLS to an SNI server, they raise an opaque error like "_ssl.c:507: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure." We introduce a manifest attribute to denote the URL requires SNI and have clients without SNI support filter these entries.
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 13 Oct 2015 10:59:41 -0700
parents 74de1c59f71c
children 23c0da28c034
line wrap: on
line diff
--- a/hgext/clonebundles.py	Tue Oct 13 11:45:30 2015 -0700
+++ b/hgext/clonebundles.py	Tue Oct 13 10:59:41 2015 -0700
@@ -49,6 +49,19 @@
    The actual value doesn't impact client behavior beyond filtering:
    clients will still sniff the bundle type from the header of downloaded
    files.
+
+REQUIRESNI
+   Whether Server Name Indication (SNI) is required to connect to the URL.
+   SNI allows servers to use multiple certificates on the same IP. It is
+   somewhat common in CDNs and other hosting providers. Older Python
+   versions do not support SNI. Defining this attribute enables clients
+   with older Python versions to filter this entry.
+
+   If this is defined, it is important to advertise a non-SNI fallback
+   URL or clients running old Python releases may not be able to clone
+   with the clonebundles facility.
+
+   Value should be "true".
 """
 
 from mercurial import (