# HG changeset patch # User Augie Fackler # Date 1531779386 14400 # Node ID 569d662816de326ff2c687edda586aaedf4cb416 # Parent eabdf3c25b8b0ddaa3f13813fae4ed7a0c2d5c62 mail: modernize check for Python-with-TLS We used to be going indirectly through the socket module, but now we just check for the ssl module. Differential Revision: https://phab.mercurial-scm.org/D3955 diff -r eabdf3c25b8b -r 569d662816de mercurial/mail.py --- a/mercurial/mail.py Mon Jul 16 17:49:17 2018 -0400 +++ b/mercurial/mail.py Mon Jul 16 18:16:26 2018 -0400 @@ -82,6 +82,15 @@ self.file = smtplib.SSLFakeFile(new_socket) return new_socket +def _pyhastls(): + """Returns true iff Python has TLS support, false otherwise.""" + try: + import ssl + getattr(ssl, 'HAS_TLS', False) + return True + except ImportError: + return False + def _smtp(ui): '''build an smtp connection and return a function to send mail''' local_hostname = ui.config('smtp', 'local_hostname') @@ -89,7 +98,7 @@ # backward compatible: when tls = true, we use starttls. starttls = tls == 'starttls' or stringutil.parsebool(tls) smtps = tls == 'smtps' - if (starttls or smtps) and not util.safehasattr(socket, 'ssl'): + if (starttls or smtps) and not _pyhastls(): raise error.Abort(_("can't use TLS: Python SSL support not installed")) mailhost = ui.config('smtp', 'host') if not mailhost: