##// END OF EJS Templates
sslutil: require TLS 1.1+ when supported...
sslutil: require TLS 1.1+ when supported Currently, Mercurial will use TLS 1.0 or newer when connecting to remote servers, selecting the highest TLS version supported by both peers. On older Pythons, only TLS 1.0 is available. On newer Pythons, TLS 1.1 and 1.2 should be available. Security professionals recommend avoiding TLS 1.0 if possible. PCI DSS 3.1 "strongly encourages" the use of TLS 1.2. Known attacks like BEAST and POODLE exist against TLS 1.0 (although mitigations are available and properly configured servers aren't vulnerable). I asked Eric Rescorla - Mozilla's resident crypto expert - whether Mercurial should drop support for TLS 1.0. His response was "if you can get away with it." Essentially, a number of servers on the Internet don't support TLS 1.1+. This is why web browsers continue to support TLS 1.0 despite desires from security experts. This patch changes Mercurial's default behavior on modern Python versions to require TLS 1.1+, thus avoiding known security issues with TLS 1.0 and making Mercurial more secure by default. Rather than drop TLS 1.0 support wholesale, we still allow TLS 1.0 to be used if configured. This is a compromise solution - ideally we'd disallow TLS 1.0. However, since we're not sure how many Mercurial servers don't support TLS 1.1+ and we're not sure how much user inconvenience this change will bring, I think it is prudent to ship an escape hatch that still allows usage of TLS 1.0. In the default case our users get better security. In the worst case, they are no worse off than before this patch. This patch has no effect when running on Python versions that don't support TLS 1.1+. As the added test shows, connecting to a server that doesn't support TLS 1.1+ will display a warning message with a link to our wiki, where we can guide people to configure their client to allow less secure connections.

File last commit:

r28881:d9f7f590 default
r29560:303e9300 default
Show More
test-progress.t
350 lines | 13.1 KiB | text/troff | Tads3Lexer
Matt Mackall
tests: unify test-progress
r12479
$ cat > loop.py <<EOF
Gregory Szorc
tests: declare commands using decorator
r21254 > from mercurial import cmdutil, commands
Augie Fackler
progress: stop getting stuck in a nested topic during a long inner step...
r19619 > import time
Gregory Szorc
tests: declare commands using decorator
r21254 >
> cmdtable = {}
> command = cmdutil.command(cmdtable)
>
Augie Fackler
progress: stop getting stuck in a nested topic during a long inner step...
r19619 > class incrementingtime(object):
> def __init__(self):
> self._time = 0.0
> def __call__(self):
> self._time += 0.25
> return self._time
> time.time = incrementingtime()
Matt Mackall
tests: unify test-progress
r12479 >
Gregory Szorc
tests: declare commands using decorator
r21254 > @command('loop',
> [('', 'total', '', 'override for total'),
> ('', 'nested', False, 'show nested results'),
> ('', 'parallel', False, 'show parallel sets of results')],
Gregory Szorc
tests: define norepo in command decorator
r21773 > 'hg loop LOOPS',
> norepo=True)
Matt Mackall
tests: unify test-progress
r12479 > def loop(ui, loops, **opts):
> loops = int(loops)
> total = None
> if loops >= 0:
> total = loops
> if opts.get('total', None):
> total = int(opts.get('total'))
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838 > nested = False
> if opts.get('nested', None):
> nested = True
Matt Mackall
tests: unify test-progress
r12479 > loops = abs(loops)
>
> for i in range(loops):
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 > ui.progress(topiclabel, i, getloopitem(i), 'loopnum', total)
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838 > if opts.get('parallel'):
> ui.progress('other', i, 'other.%d' % i, 'othernum', total)
> if nested:
Augie Fackler
progress: stop getting stuck in a nested topic during a long inner step...
r19619 > nested_steps = 2
> if i and i % 4 == 0:
> nested_steps = 5
> for j in range(nested_steps):
> ui.progress(
> 'nested', j, 'nested.%d' % j, 'nestnum', nested_steps)
> ui.progress(
> 'nested', None, 'nested.done', 'nestnum', nested_steps)
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim output line correctly...
r21859 > ui.progress(topiclabel, None, 'loop.done', 'loopnum', total)
>
> topiclabel = 'loop'
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 > def getloopitem(i):
> return 'loop.%d' % i
Matt Mackall
tests: unify test-progress
r12479 >
> EOF
Matt Mackall
check-code: fix issues with finding patterns in unified tests, fix tests...
r15372 $ cp $HGRCPATH $HGRCPATH.orig
Matt Mackall
tests: unify test-progress
r12479 $ echo "[extensions]" >> $HGRCPATH
$ echo "progress=" >> $HGRCPATH
$ echo "loop=`pwd`/loop.py" >> $HGRCPATH
$ echo "[progress]" >> $HGRCPATH
Martin Geisler
test-progress: fix whitespace typo
r16675 $ echo "format = topic bar number" >> $HGRCPATH
Matt Mackall
tests: unify test-progress
r12479 $ echo "assume-tty=1" >> $HGRCPATH
Martin Geisler
progress: test setting progress.width...
r13142 $ echo "width=60" >> $HGRCPATH
Matt Mackall
tests: unify test-progress
r12479
test default params, display nothing because of delay
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop 3
Matt Mackall
tests: unify test-progress
r12479 $ echo "delay=0" >> $HGRCPATH
$ echo "refresh=0" >> $HGRCPATH
test with delay=0, refresh=0
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop 3
\r (no-eol) (esc)
loop [ ] 0/3\r (no-eol) (esc)
loop [===============> ] 1/3\r (no-eol) (esc)
loop [===============================> ] 2/3\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
progress: respect ui.quiet (issue4726)...
r25581 no progress with --quiet
$ hg -y loop 3 --quiet
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838
Matt Anderson
progress: display progress bar when HGPLAINEXCEPT contains "progress"...
r28171 test plain mode exception
$ HGPLAINEXCEPT=progress hg -y loop 1
\r (no-eol) (esc)
loop [ ] 0/1\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838 test nested short-lived topics (which shouldn't display with nestdelay):
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop 3 --nested
\r (no-eol) (esc)
loop [ ] 0/3\r (no-eol) (esc)
loop [===============> ] 1/3\r (no-eol) (esc)
loop [===============================> ] 2/3\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838
Augie Fackler
progress: stop getting stuck in a nested topic during a long inner step...
r19619 Test nested long-lived topic which has the same name as a short-lived
peer. We shouldn't get stuck showing the short-lived inner steps, and
should go back to skipping the inner steps when the slow nested step
finishes.
$ hg -y loop 7 --nested
\r (no-eol) (esc)
loop [ ] 0/7\r (no-eol) (esc)
loop [=====> ] 1/7\r (no-eol) (esc)
loop [============> ] 2/7\r (no-eol) (esc)
loop [===================> ] 3/7\r (no-eol) (esc)
loop [==========================> ] 4/7\r (no-eol) (esc)
nested [==========================> ] 3/5\r (no-eol) (esc)
nested [===================================> ] 4/5\r (no-eol) (esc)
loop [=================================> ] 5/7\r (no-eol) (esc)
loop [========================================> ] 6/7\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg --config progress.changedelay=0 -y loop 3 --nested
\r (no-eol) (esc)
loop [ ] 0/3\r (no-eol) (esc)
nested [ ] 0/2\r (no-eol) (esc)
nested [======================> ] 1/2\r (no-eol) (esc)
loop [===============> ] 1/3\r (no-eol) (esc)
nested [ ] 0/2\r (no-eol) (esc)
nested [======================> ] 1/2\r (no-eol) (esc)
loop [===============================> ] 2/3\r (no-eol) (esc)
nested [ ] 0/2\r (no-eol) (esc)
nested [======================> ] 1/2\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
progress: add a changedelay to prevent parallel topics from flapping (issue2698)...
r14838
test two topics being printed in parallel (as when we're doing a local
--pull clone, where you get the unbundle and bundle progress at the
same time):
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg loop 3 --parallel
\r (no-eol) (esc)
loop [ ] 0/3\r (no-eol) (esc)
loop [===============> ] 1/3\r (no-eol) (esc)
loop [===============================> ] 2/3\r (no-eol) (esc)
\r (no-eol) (esc)
Matt Mackall
tests: unify test-progress
r12479 test refresh is taken in account
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y --config progress.refresh=100 loop 3
Matt Mackall
tests: unify test-progress
r12479
test format options 1
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y --config 'progress.format=number topic item+2' loop 2
\r (no-eol) (esc)
0/2 loop lo\r (no-eol) (esc)
1/2 loop lo\r (no-eol) (esc)
\r (no-eol) (esc)
Matt Mackall
tests: unify test-progress
r12479
test format options 2
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y --config 'progress.format=number item-3 bar' loop 2
\r (no-eol) (esc)
0/2 p.0 [ ]\r (no-eol) (esc)
1/2 p.1 [=======================> ]\r (no-eol) (esc)
\r (no-eol) (esc)
Matt Mackall
tests: unify test-progress
r12479
test format options and indeterminate progress
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y --config 'progress.format=number item bar' loop -- -2
\r (no-eol) (esc)
0 loop.0 [ <=> ]\r (no-eol) (esc)
1 loop.1 [ <=> ]\r (no-eol) (esc)
\r (no-eol) (esc)
Matt Mackall
tests: unify test-progress
r12479
make sure things don't fall over if count > total
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop --total 4 6
\r (no-eol) (esc)
loop [ ] 0/4\r (no-eol) (esc)
loop [===========> ] 1/4\r (no-eol) (esc)
loop [=======================> ] 2/4\r (no-eol) (esc)
loop [===================================> ] 3/4\r (no-eol) (esc)
loop [===============================================>] 4/4\r (no-eol) (esc)
loop [ <=> ] 5/4\r (no-eol) (esc)
\r (no-eol) (esc)
Matt Mackall
tests: unify test-progress
r12479
test immediate progress completion
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop 0
Augie Fackler
test-progress: test completion estimates and progress bar delay
r13145
test delay time estimates
Yuya Nishihara
test-progress: disable mocking-time tests on chg...
r28881 #if no-chg
Augie Fackler
test-progress: test completion estimates and progress bar delay
r13145 $ cat > mocktime.py <<EOF
> import os
> import time
>
> class mocktime(object):
> def __init__(self, increment):
> self.time = 0
> self.increment = increment
> def __call__(self):
> self.time += self.increment
> return self.time
>
> def uisetup(ui):
> time.time = mocktime(int(os.environ.get('MOCKTIME', '11')))
> EOF
Matt Mackall
check-code: fix issues with finding patterns in unified tests, fix tests...
r15372 $ cp $HGRCPATH.orig $HGRCPATH
$ echo "[extensions]" >> $HGRCPATH
Augie Fackler
test-progress: test completion estimates and progress bar delay
r13145 $ echo "mocktime=`pwd`/mocktime.py" >> $HGRCPATH
$ echo "progress=" >> $HGRCPATH
$ echo "loop=`pwd`/loop.py" >> $HGRCPATH
$ echo "[progress]" >> $HGRCPATH
$ echo "assume-tty=1" >> $HGRCPATH
$ echo "delay=25" >> $HGRCPATH
$ echo "width=60" >> $HGRCPATH
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop 8
\r (no-eol) (esc)
loop [=========> ] 2/8 1m07s\r (no-eol) (esc)
loop [===============> ] 3/8 56s\r (no-eol) (esc)
loop [=====================> ] 4/8 45s\r (no-eol) (esc)
loop [==========================> ] 5/8 34s\r (no-eol) (esc)
loop [================================> ] 6/8 23s\r (no-eol) (esc)
loop [=====================================> ] 7/8 12s\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
test-progress: test completion estimates and progress bar delay
r13145
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ MOCKTIME=10000 hg -y loop 4
\r (no-eol) (esc)
loop [ ] 0/4\r (no-eol) (esc)
loop [=========> ] 1/4 8h21m\r (no-eol) (esc)
loop [====================> ] 2/4 5h34m\r (no-eol) (esc)
loop [==============================> ] 3/4 2h47m\r (no-eol) (esc)
\r (no-eol) (esc)
Augie Fackler
test-progress: test completion estimates and progress bar delay
r13145
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ MOCKTIME=1000000 hg -y loop 4
\r (no-eol) (esc)
loop [ ] 0/4\r (no-eol) (esc)
loop [=========> ] 1/4 5w00d\r (no-eol) (esc)
loop [====================> ] 2/4 3w03d\r (no-eol) (esc)
loop [=============================> ] 3/4 11d14h\r (no-eol) (esc)
\r (no-eol) (esc)
timeless
progress: handle days, weeks and years...
r13236
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ MOCKTIME=14000000 hg -y loop 4
\r (no-eol) (esc)
loop [ ] 0/4\r (no-eol) (esc)
loop [=========> ] 1/4 1y18w\r (no-eol) (esc)
loop [===================> ] 2/4 46w03d\r (no-eol) (esc)
loop [=============================> ] 3/4 23w02d\r (no-eol) (esc)
\r (no-eol) (esc)
timeless
progress: handle days, weeks and years...
r13236
Augie Fackler
progress: don't compute estimate without a total...
r13154 Time estimates should not fail when there's no end point:
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg -y loop -- -4
\r (no-eol) (esc)
Durham Goode
blackbox: fix recording exit codes (issue3938)...
r19229 loop [ <=> ] 2\r (no-eol) (esc)
loop [ <=> ] 3\r (no-eol) (esc)
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 \r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim output line correctly...
r21859
Yuya Nishihara
test-progress: disable mocking-time tests on chg...
r28881 #endif
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim output line correctly...
r21859 test line trimming by '[progress] width', when progress topic contains
multi-byte characters, of which length of byte sequence and columns in
display are different from each other.
$ cp $HGRCPATH.orig $HGRCPATH
$ cat >> $HGRCPATH <<EOF
> [extensions]
> progress=
> loop=`pwd`/loop.py
> [progress]
> assume-tty = 1
> delay = 0
> refresh = 0
> EOF
$ rm -f loop.pyc
$ cat >> loop.py <<EOF
> # use non-ascii characters as topic label of progress
> # 2 x 4 = 8 columns, but 3 x 4 = 12 bytes
> topiclabel = u'\u3042\u3044\u3046\u3048'.encode('utf-8')
> EOF
$ cat >> $HGRCPATH <<EOF
> [progress]
> format = topic number
> width= 12
> EOF
$ hg --encoding utf-8 -y loop --total 3 3
\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 0/3\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 1/3\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 2/3\r (no-eol) (esc)
\r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.colwidth' to get column width of output line correctly...
r21860
test calculation of bar width, when progress topic contains multi-byte
characters, of which length of byte sequence and columns in display
are different from each other.
$ cat >> $HGRCPATH <<EOF
> [progress]
> format = topic bar
> width= 21
> # progwidth should be 9 (= 21 - (8+1) - 3)
> EOF
$ hg --encoding utf-8 -y loop --total 3 3
\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [ ]\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [==> ]\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [=====> ]\r (no-eol) (esc)
\r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862
Mads Kiilerich
spelling: fixes from proofreading of spell checker issues
r23139 test trimming progress items, when they contain multi-byte characters,
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 of which length of byte sequence and columns in display are different
from each other.
$ rm -f loop.pyc
$ cat >> loop.py <<EOF
> # use non-ascii characters as loop items of progress
> loopitems = [
FUJIWARA Katsunori
progress: use 'encoding.colwidth' to get column width of items correctly...
r21863 > u'\u3042\u3044'.encode('utf-8'), # 2 x 2 = 4 columns
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 > u'\u3042\u3044\u3046'.encode('utf-8'), # 2 x 3 = 6 columns
> u'\u3042\u3044\u3046\u3048'.encode('utf-8'), # 2 x 4 = 8 columns
> ]
> def getloopitem(i):
> return loopitems[i % len(loopitems)]
> EOF
$ cat >> $HGRCPATH <<EOF
> [progress]
> # trim at tail side
> format = item+6
> EOF
FUJIWARA Katsunori
progress: use 'encoding.colwidth' to get column width of items correctly...
r21863 $ hg --encoding utf-8 -y loop --total 3 3
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 \r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.colwidth' to get column width of items correctly...
r21863 \xe3\x81\x82\xe3\x81\x84 \r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc)
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc)
\r (no-eol) (esc)
$ cat >> $HGRCPATH <<EOF
> [progress]
> # trim at left side
> format = item-6
> EOF
FUJIWARA Katsunori
progress: use 'encoding.colwidth' to get column width of items correctly...
r21863 $ hg --encoding utf-8 -y loop --total 3 3
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 \r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.colwidth' to get column width of items correctly...
r21863 \xe3\x81\x82\xe3\x81\x84 \r (no-eol) (esc)
FUJIWARA Katsunori
progress: use 'encoding.trim' to trim items in output line correctly...
r21862 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc)
\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\r (no-eol) (esc)
\r (no-eol) (esc)