sslutil: improve messaging around unsupported protocols (
issue5303)
There are various causes for the inability to negotiate common SSL/TLS
protocol between client and server. Previously, we had a single, not
very actionable warning message for all of them.
As people encountered TLS 1.0 servers in real life, it was quickly
obvious that the existing messaging was inadequate to help users
rectify the situation.
This patch makes the warning messages much more verbose in hopes of
making them more actionable while simultaneously encouraging users
and servers to adopt better security practices.
This messaging flirts with the anti-pattern of "never blame the
user" by signaling out poorly-configured servers. But if we're going to
disallow TLS 1.0 by default, I think we need to say *something* or
people are just going to blame Mercurial for not being able to connect.
The messaging tries to exonerate Mercurial from being the at fault
party by pointing out the server is the entity that doesn't support
proper security (when appropriate, of course).
from __future__ import absolute_import, print_function
import os
from mercurial import (
hg,
merge,
ui as uimod,
)
u = uimod.ui()
repo = hg.repository(u, 'test1', create=1)
os.chdir('test1')
def commit(text, time):
repo.commit(text=text, date="%d 0" % time)
def addcommit(name, time):
f = open(name, 'w')
f.write('%s\n' % name)
f.close()
repo[None].add([name])
commit(name, time)
def update(rev):
merge.update(repo, rev, False, True)
def merge_(rev):
merge.update(repo, rev, True, False)
if __name__ == '__main__':
addcommit("A", 0)
addcommit("B", 1)
update(0)
addcommit("C", 2)
merge_(1)
commit("D", 3)
update(2)
addcommit("E", 4)
addcommit("F", 5)
update(3)
addcommit("G", 6)
merge_(5)
commit("H", 7)
update(5)
addcommit("I", 8)
# Ancestors
print('Ancestors of 5')
for r in repo.changelog.ancestors([5]):
print(r, end=' ')
print('\nAncestors of 6 and 5')
for r in repo.changelog.ancestors([6, 5]):
print(r, end=' ')
print('\nAncestors of 5 and 4')
for r in repo.changelog.ancestors([5, 4]):
print(r, end=' ')
print('\nAncestors of 7, stop at 6')
for r in repo.changelog.ancestors([7], 6):
print(r, end=' ')
print('\nAncestors of 7, including revs')
for r in repo.changelog.ancestors([7], inclusive=True):
print(r, end=' ')
print('\nAncestors of 7, 5 and 3, including revs')
for r in repo.changelog.ancestors([7, 5, 3], inclusive=True):
print(r, end=' ')
# Descendants
print('\n\nDescendants of 5')
for r in repo.changelog.descendants([5]):
print(r, end=' ')
print('\nDescendants of 5 and 3')
for r in repo.changelog.descendants([5, 3]):
print(r, end=' ')
print('\nDescendants of 5 and 4')
print(*repo.changelog.descendants([5, 4]), sep=' ')