[Python-checkins] bpo-33522: Enable CI builds on Visual Studio Team Services (#6865)

Steve Dower webhook-mailer at python.org
Wed May 16 17:50:39 EDT 2018


https://github.com/python/cpython/commit/e5f41d2f1e0b8b8e61d5fa427c19bd1ea90fd9a3
commit: e5f41d2f1e0b8b8e61d5fa427c19bd1ea90fd9a3
branch: master
author: Steve Dower <steve.dower at microsoft.com>
committer: GitHub <noreply at github.com>
date: 2018年05月16日T17:50:29-04:00
summary:
bpo-33522: Enable CI builds on Visual Studio Team Services (#6865)
files:
A .vsts/docs-release.yml
A .vsts/docs.yml
A .vsts/linux-buildbot.yml
A .vsts/linux-coverage.yml
A .vsts/linux-deps.yml
A .vsts/linux-pr.yml
A .vsts/macos-buildbot.yml
A .vsts/macos-pr.yml
A .vsts/windows-buildbot.yml
A .vsts/windows-pr.yml
A Misc/NEWS.d/next/Build/2018-05-15-12-44-50.bpo-33522.mJoNcA.rst
A Misc/NEWS.d/next/Library/2018-05-16-17-05-48.bpo-33548.xWslmx.rst
M Doc/make.bat
M Lib/tempfile.py
M Lib/test/support/__init__.py
M Lib/test/test_asyncio/test_base_events.py
M Lib/test/test_bdb.py
M Lib/test/test_pathlib.py
M Lib/test/test_poplib.py
M Lib/test/test_selectors.py
M PCbuild/rt.bat
M Tools/ssl/multissltests.py
diff --git a/.vsts/docs-release.yml b/.vsts/docs-release.yml
new file mode 100644
index 000000000000..e90428a42494
--- /dev/null
+++ b/.vsts/docs-release.yml
@@ -0,0 +1,43 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted Linux Preview
+
+#variables:
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+- script: sudo apt-get update && sudo apt-get install -qy --force-yes texlive-full 
+ displayName: 'Install LaTeX'
+
+- task: UsePythonVersion at 0
+ displayName: 'Use Python 3.6 or later'
+ inputs:
+ versionSpec: '>=3.6'
+
+- script: python -m pip install sphinx blurb python-docs-theme
+ displayName: 'Install build dependencies'
+
+- script: make dist PYTHON=python SPHINXBUILD='python -m sphinx' BLURB='python -m blurb'
+ workingDirectory: '$(build.sourcesDirectory)/Doc'
+ displayName: 'Build documentation'
+
+- task: PublishBuildArtifacts at 1
+ displayName: 'Publish build'
+ inputs:
+ PathToPublish: '$(build.sourcesDirectory)/Doc/build'
+ ArtifactName: build
+ publishLocation: Container
+
+- task: PublishBuildArtifacts at 1
+ displayName: 'Publish dist'
+ inputs:
+ PathToPublish: '$(build.sourcesDirectory)/Doc/dist'
+ ArtifactName: dist
+ publishLocation: Container
diff --git a/.vsts/docs.yml b/.vsts/docs.yml
new file mode 100644
index 000000000000..efa1e871656d
--- /dev/null
+++ b/.vsts/docs.yml
@@ -0,0 +1,43 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted Linux Preview
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ include:
+ - Doc/*
+
+#variables:
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+- task: UsePythonVersion at 0
+ displayName: 'Use Python 3.6 or later'
+ inputs:
+ versionSpec: '>=3.6'
+
+- script: python -m pip install sphinx~=1.6.1 blurb python-docs-theme
+ displayName: 'Install build dependencies'
+
+- script: make check suspicious html PYTHON=python
+ workingDirectory: '$(build.sourcesDirectory)/Doc'
+ displayName: 'Build documentation'
+
+- task: PublishBuildArtifacts at 1
+ displayName: 'Publish build'
+ inputs:
+ PathToPublish: '$(build.sourcesDirectory)/Doc/build'
+ ArtifactName: build
+ publishLocation: Container
diff --git a/.vsts/linux-buildbot.yml b/.vsts/linux-buildbot.yml
new file mode 100644
index 000000000000..d75d7f57650e
--- /dev/null
+++ b/.vsts/linux-buildbot.yml
@@ -0,0 +1,71 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted Linux Preview
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+variables:
+ # Copy-pasted from linux-deps.yml until template support arrives
+ OPENSSL: 1.1.0g
+ OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
+
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+#- template: linux-deps.yml
+
+# See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md
+# For now, we copy/paste the steps
+- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
+ displayName: 'Update apt-get lists'
+
+- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
+ displayName: 'Add $(OPENSSL_DIR) to PATH'
+- script: >
+ sudo apt-get -yq install
+ build-essential
+ zlib1g-dev
+ libbz2-dev
+ liblzma-dev
+ libncurses5-dev
+ libreadline6-dev
+ libsqlite3-dev
+ libssl-dev
+ libgdbm-dev
+ tk-dev
+ lzma
+ lzma-dev
+ liblzma-dev
+ libffi-dev
+ uuid-dev
+ displayName: 'Install dependencies'
+- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
+ displayName: 'python multissltests.py'
+
+- script: ./configure --with-pydebug
+ displayName: 'Configure CPython (debug)'
+
+- script: make -s -j4
+ displayName: 'Build CPython'
+
+- script: make pythoninfo
+ displayName: 'Display build info'
+
+- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
+ displayName: 'Tests'
diff --git a/.vsts/linux-coverage.yml b/.vsts/linux-coverage.yml
new file mode 100644
index 000000000000..3657b1720ee2
--- /dev/null
+++ b/.vsts/linux-coverage.yml
@@ -0,0 +1,77 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted Linux Preview
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+variables:
+ # Copy-pasted from linux-deps.yml until template support arrives
+ OPENSSL: 1.1.0g
+ OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+#- template: linux-deps.yml
+
+# See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md
+# For now, we copy/paste the steps
+- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
+ displayName: 'Update apt-get lists'
+
+- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
+ displayName: 'Add $(OPENSSL_DIR) to PATH'
+- script: >
+ sudo apt-get -yq install
+ build-essential
+ zlib1g-dev
+ libbz2-dev
+ liblzma-dev
+ libncurses5-dev
+ libreadline6-dev
+ libsqlite3-dev
+ libssl-dev
+ libgdbm-dev
+ tk-dev
+ lzma
+ lzma-dev
+ liblzma-dev
+ libffi-dev
+ uuid-dev
+ displayName: 'Install dependencies'
+- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
+ displayName: 'python multissltests.py'
+
+
+- script: ./configure --with-pydebug
+ displayName: 'Configure CPython (debug)'
+
+- script: make -s -j4
+ displayName: 'Build CPython'
+
+- script: ./python -m venv venv && ./venv/bin/python -m pip install -U coverage
+ displayName: 'Set up virtual environment'
+
+- script: ./venv/bin/python -m test.pythoninfo
+ displayName: 'Display build info'
+
+- script: ./venv/bin/python -m coverage run --pylib -m test --fail-env-changed -uall,-cpu -x test_multiprocessing_fork -x test_multiprocessing_forkserver -x test_multiprocessing_spawn -x test_concurrent_futures
+ displayName: 'Tests with coverage'
+
+- script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash)
+ displayName: 'Publish code coverage results'
diff --git a/.vsts/linux-deps.yml b/.vsts/linux-deps.yml
new file mode 100644
index 000000000000..b6c8a3690ea1
--- /dev/null
+++ b/.vsts/linux-deps.yml
@@ -0,0 +1,36 @@
+# Note: this file is not currently used, but when template support comes to VSTS it
+# will be referenced from the other scripts..
+
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+parameters:
+ OPENSSL: 1.1.0g
+ OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
+
+steps:
+- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
+ displayName: 'Update apt-get lists'
+
+- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
+ displayName: 'Add $(OPENSSL_DIR) to PATH'
+- script: >
+ sudo apt-get -yq install
+ build-essential
+ zlib1g-dev
+ libbz2-dev
+ liblzma-dev
+ libncurses5-dev
+ libreadline6-dev
+ libsqlite3-dev
+ libssl-dev
+ libgdbm-dev
+ tk-dev
+ lzma
+ lzma-dev
+ liblzma-dev
+ libffi-dev
+ uuid-dev
+ displayName: 'Install dependencies'
+- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
+ displayName: 'python multissltests.py'
diff --git a/.vsts/linux-pr.yml b/.vsts/linux-pr.yml
new file mode 100644
index 000000000000..7f4d458f5a7c
--- /dev/null
+++ b/.vsts/linux-pr.yml
@@ -0,0 +1,75 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted Linux Preview
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+variables:
+ # Copy-pasted from linux-deps.yml until template support arrives
+ OPENSSL: 1.1.0g
+ OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+#- template: linux-deps.yml
+
+# See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md
+# For now, we copy/paste the steps
+- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
+ displayName: 'Update apt-get lists'
+
+- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
+ displayName: 'Add $(OPENSSL_DIR) to PATH'
+- script: >
+ sudo apt-get -yq install
+ build-essential
+ zlib1g-dev
+ libbz2-dev
+ liblzma-dev
+ libncurses5-dev
+ libreadline6-dev
+ libsqlite3-dev
+ libssl-dev
+ libgdbm-dev
+ tk-dev
+ lzma
+ lzma-dev
+ liblzma-dev
+ libffi-dev
+ uuid-dev
+ displayName: 'Install dependencies'
+- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
+ displayName: 'python multissltests.py'
+
+
+- script: ./configure --with-pydebug
+ displayName: 'Configure CPython (debug)'
+
+- script: make -s -j4
+ displayName: 'Build CPython'
+
+- script: make pythoninfo
+ displayName: 'Display build info'
+
+# Run patchcheck and fail if anything is discovered
+- script: ./python Tools/scripts/patchcheck.py --travis true
+ displayName: 'Run patchcheck.py'
+
+- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
+ displayName: 'Tests'
diff --git a/.vsts/macos-buildbot.yml b/.vsts/macos-buildbot.yml
new file mode 100644
index 000000000000..8a4f6ba8cb8b
--- /dev/null
+++ b/.vsts/macos-buildbot.yml
@@ -0,0 +1,37 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted macOS Preview
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+#variables:
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl
+ displayName: 'Configure CPython (debug)'
+
+- script: make -s -j4
+ displayName: 'Build CPython'
+
+- script: make pythoninfo
+ displayName: 'Display build info'
+
+- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
+ displayName: 'Tests'
diff --git a/.vsts/macos-pr.yml b/.vsts/macos-pr.yml
new file mode 100644
index 000000000000..8a4f6ba8cb8b
--- /dev/null
+++ b/.vsts/macos-pr.yml
@@ -0,0 +1,37 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted macOS Preview
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+#variables:
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl
+ displayName: 'Configure CPython (debug)'
+
+- script: make -s -j4
+ displayName: 'Build CPython'
+
+- script: make pythoninfo
+ displayName: 'Display build info'
+
+- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
+ displayName: 'Tests'
diff --git a/.vsts/windows-buildbot.yml b/.vsts/windows-buildbot.yml
new file mode 100644
index 000000000000..5ec4522796ce
--- /dev/null
+++ b/.vsts/windows-buildbot.yml
@@ -0,0 +1,49 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted VS2017
+ parallel: 2
+ matrix:
+ amd64:
+ buildOpt: -p x64
+ outDirSuffix: amd64
+ win32:
+ buildOpt:
+ outDirSuffix: win32
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+variables:
+ # Relocate build outputs outside of source directory to make cleaning faster
+ Py_IntDir: $(Build.BinariesDirectory)\obj
+ # UNDONE: Do not build to a different directory because of broken tests
+ Py_OutDir: $(Build.SourcesDirectory)\PCbuild
+ EXTERNAL_DIR: $(Build.BinariesDirectory)\externals
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+- script: PCbuild\build.bat -e $(buildOpt)
+ displayName: 'Build CPython'
+
+- script: python.bat -m test.pythoninfo
+ displayName: 'Display build info'
+
+- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
+ displayName: 'Tests'
+ env:
+ PREFIX: $(Py_OutDir)\$(outDirSuffix)
diff --git a/.vsts/windows-pr.yml b/.vsts/windows-pr.yml
new file mode 100644
index 000000000000..5ec4522796ce
--- /dev/null
+++ b/.vsts/windows-pr.yml
@@ -0,0 +1,49 @@
+# Current docs for the syntax of this file are at:
+# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
+
+name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+queue:
+ name: Hosted VS2017
+ parallel: 2
+ matrix:
+ amd64:
+ buildOpt: -p x64
+ outDirSuffix: amd64
+ win32:
+ buildOpt:
+ outDirSuffix: win32
+
+trigger:
+ branches:
+ include:
+ - master
+ - 3.7
+ - 3.6
+ paths:
+ exclude:
+ - Doc/*
+ - Tools/*
+
+variables:
+ # Relocate build outputs outside of source directory to make cleaning faster
+ Py_IntDir: $(Build.BinariesDirectory)\obj
+ # UNDONE: Do not build to a different directory because of broken tests
+ Py_OutDir: $(Build.SourcesDirectory)\PCbuild
+ EXTERNAL_DIR: $(Build.BinariesDirectory)\externals
+
+steps:
+- checkout: self
+ clean: true
+ fetchDepth: 5
+
+- script: PCbuild\build.bat -e $(buildOpt)
+ displayName: 'Build CPython'
+
+- script: python.bat -m test.pythoninfo
+ displayName: 'Display build info'
+
+- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
+ displayName: 'Tests'
+ env:
+ PREFIX: $(Py_OutDir)\$(outDirSuffix)
diff --git a/Doc/make.bat b/Doc/make.bat
index 3f201de1db79..c69cfae31941 100644
--- a/Doc/make.bat
+++ b/Doc/make.bat
@@ -6,17 +6,20 @@ pushd %~dp0
 set this=%~n0
 
 call ..\PCbuild\find_python.bat %PYTHON%
-if not defined SPHINXBUILD if defined PYTHON (
+
+if not defined PYTHON set PYTHON=py
+
+if not defined SPHINXBUILD (
 %PYTHON% -c "import sphinx" > nul 2> nul
 if errorlevel 1 (
 echo Installing sphinx with %PYTHON%
- %PYTHON% -m pip install sphinx
+ %PYTHON% -m pip install sphinx python-docs-theme
 if errorlevel 1 exit /B
 )
 set SPHINXBUILD=%PYTHON% -c "import sphinx, sys; sys.argv[0] = 'sphinx-build'; sphinx.main()"
 )
 
-if not defined BLURB if defined PYTHON (
+if not defined BLURB (
 %PYTHON% -c "import blurb" > nul 2> nul
 if errorlevel 1 (
 echo Installing blurb with %PYTHON%
@@ -26,7 +29,6 @@ if not defined BLURB if defined PYTHON (
 set BLURB=%PYTHON% -m blurb
 )
 
-if not defined PYTHON set PYTHON=py
 if not defined SPHINXBUILD set SPHINXBUILD=sphinx-build
 if not defined BLURB set BLURB=blurb
 
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index e5b7a92fad7b..214322416963 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -169,7 +169,9 @@ def _candidate_tempdir_list():
 
 # Failing that, try OS-specific locations.
 if _os.name == 'nt':
- dirlist.extend([ r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ])
+ dirlist.extend([ _os.path.expanduser(r'~\AppData\Local\Temp'),
+ _os.path.expandvars(r'%SYSTEMROOT%\Temp'),
+ r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ])
 else:
 dirlist.extend([ '/tmp', '/var/tmp', '/usr/tmp' ])
 
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index f1c4c952eff3..a6fcb1bc1437 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -363,6 +363,20 @@ def _rmtree_inner(path):
 _force_run(fullname, os.unlink, fullname)
 _waitfor(_rmtree_inner, path, waitall=True)
 _waitfor(lambda p: _force_run(p, os.rmdir, p), path)
+
+ def _longpath(path):
+ try:
+ import ctypes
+ except ImportError:
+ # No ctypes means we can't expands paths.
+ pass
+ else:
+ buffer = ctypes.create_unicode_buffer(len(path) * 2)
+ length = ctypes.windll.kernel32.GetLongPathNameW(path, buffer,
+ len(buffer))
+ if length:
+ return buffer[:length]
+ return path
 else:
 _unlink = os.unlink
 _rmdir = os.rmdir
@@ -389,6 +403,9 @@ def _rmtree_inner(path):
 _rmtree_inner(path)
 os.rmdir(path)
 
+ def _longpath(path):
+ return path
+
 def unlink(filename):
 try:
 _unlink(filename)
@@ -2381,13 +2398,15 @@ def can_xattr():
 if not hasattr(os, "setxattr"):
 can = False
 else:
- tmp_fp, tmp_name = tempfile.mkstemp()
+ tmp_dir = tempfile.mkdtemp()
+ tmp_fp, tmp_name = tempfile.mkstemp(dir=tmp_dir)
 try:
 with open(TESTFN, "wb") as fp:
 try:
 # TESTFN & tempfile may use different file systems with
 # different capabilities
 os.setxattr(tmp_fp, b"user.test", b"")
+ os.setxattr(tmp_name, b"trusted.foo", b"42")
 os.setxattr(fp.fileno(), b"user.test", b"")
 # Kernels < 2.6.39 don't respect setxattr flags.
 kernel_version = platform.release()
@@ -2398,6 +2417,7 @@ def can_xattr():
 finally:
 unlink(TESTFN)
 unlink(tmp_name)
+ rmdir(tmp_dir)
 _can_xattr = can
 return can
 
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index ab6560c70b90..72c63df91070 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -1848,10 +1848,22 @@ def run_loop(self, coro):
 def prepare(self):
 sock = self.make_socket()
 proto = self.MyProto(self.loop)
- port = support.find_unused_port()
+ af = socket.AF_UNSPEC if support.IPV6_ENABLED else socket.AF_INET
 server = self.run_loop(self.loop.create_server(
- lambda: proto, support.HOST, port))
- self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
+ lambda: proto, support.HOST, 0, family=af))
+ port = server.sockets[0].getsockname()[1]
+
+ for _ in range(10):
+ try:
+ self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
+ except OSError:
+ time.sleep(0.5)
+ continue
+ else:
+ break
+ else:
+ # One last try, so we get the exception
+ self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
 
 def cleanup():
 server.close()
diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py
index bda74a2be775..616c3a864984 100644
--- a/Lib/test/test_bdb.py
+++ b/Lib/test/test_bdb.py
@@ -417,15 +417,17 @@ def __init__(self, test_case, skip=None):
 self.dry_run = test_case.dry_run
 self.tracer = Tracer(test_case.expect_set, skip=skip,
 dry_run=self.dry_run, test_case=test_case.id())
+ self._original_tracer = None
 
 def __enter__(self):
 # test_pdb does not reset Breakpoint class attributes on exit :-(
 reset_Breakpoint()
+ self._original_tracer = sys.gettrace()
 return self.tracer
 
 def __exit__(self, type_=None, value=None, traceback=None):
 reset_Breakpoint()
- sys.settrace(None)
+ sys.settrace(self._original_tracer)
 
 not_empty = ''
 if self.tracer.set_list:
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index d1a3fba2ded9..d95a831b7b62 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1516,7 +1516,7 @@ def test_resolve_common(self):
 # resolves to 'dirB/..' first before resolving to parent of dirB.
 self._check_resolve_relative(p, P(BASE, 'foo', 'in', 'spam'), False)
 # Now create absolute symlinks
- d = tempfile.mkdtemp(suffix='-dirD')
+ d = support._longpath(tempfile.mkdtemp(suffix='-dirD'))
 self.addCleanup(support.rmtree, d)
 os.symlink(os.path.join(d), join('dirA', 'linkX'))
 os.symlink(join('dirB'), os.path.join(d, 'linkY'))
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index bf568bd77bff..bbedbbdb10a1 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -179,7 +179,8 @@ def _do_tls_handshake(self):
 elif err.args[0] == ssl.SSL_ERROR_EOF:
 return self.handle_close()
 # TODO: SSLError does not expose alert information
- elif "SSLV3_ALERT_BAD_CERTIFICATE" in err.args[1]:
+ elif ("SSLV3_ALERT_BAD_CERTIFICATE" in err.args[1] or
+ "SSLV3_ALERT_CERTIFICATE_UNKNOWN" in err.args[1]):
 return self.handle_close()
 raise
 except OSError as err:
@@ -222,11 +223,12 @@ def start(self):
 def run(self):
 self.active = True
 self.__flag.set()
- while self.active and asyncore.socket_map:
- self.active_lock.acquire()
- asyncore.loop(timeout=0.1, count=1)
- self.active_lock.release()
- asyncore.close_all(ignore_all=True)
+ try:
+ while self.active and asyncore.socket_map:
+ with self.active_lock:
+ asyncore.loop(timeout=0.1, count=1)
+ finally:
+ asyncore.close_all(ignore_all=True)
 
 def stop(self):
 assert self.active
diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py
index 79ac25c12d4a..31611224dc71 100644
--- a/Lib/test/test_selectors.py
+++ b/Lib/test/test_selectors.py
@@ -481,7 +481,14 @@ def test_above_fd_setsize(self):
 self.skipTest("FD limit reached")
 raise
 
- self.assertEqual(NUM_FDS // 2, len(s.select()))
+ try:
+ fds = s.select()
+ except OSError as e:
+ if e.errno == errno.EINVAL and sys.platform == 'darwin':
+ # unexplainable errors on macOS don't need to fail the test
+ self.skipTest("Invalid argument error calling poll()")
+ raise
+ self.assertEqual(NUM_FDS // 2, len(fds))
 
 
 class DefaultSelectorTestCase(BaseSelectorTestCase):
diff --git a/Misc/NEWS.d/next/Build/2018-05-15-12-44-50.bpo-33522.mJoNcA.rst b/Misc/NEWS.d/next/Build/2018-05-15-12-44-50.bpo-33522.mJoNcA.rst
new file mode 100644
index 000000000000..f44862f0c454
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2018-05-15-12-44-50.bpo-33522.mJoNcA.rst
@@ -0,0 +1,2 @@
+Enable CI builds on Visual Studio Team Services at
+https://python.visualstudio.com/cpython
diff --git a/Misc/NEWS.d/next/Library/2018-05-16-17-05-48.bpo-33548.xWslmx.rst b/Misc/NEWS.d/next/Library/2018-05-16-17-05-48.bpo-33548.xWslmx.rst
new file mode 100644
index 000000000000..65585c152987
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-16-17-05-48.bpo-33548.xWslmx.rst
@@ -0,0 +1 @@
+tempfile._candidate_tempdir_list should consider common TEMP locations
diff --git a/PCbuild/rt.bat b/PCbuild/rt.bat
index 575cdc858fda..212befc95b06 100644
--- a/PCbuild/rt.bat
+++ b/PCbuild/rt.bat
@@ -7,7 +7,7 @@ rem -q "quick" -- normally the tests are run twice, the first time
 rem after deleting all the .pyc files reachable from Lib/.
 rem -q runs the tests just once, and without deleting .pyc files.
 rem -x64 Run the 64-bit build of python (or python_d if -d was specified)
-rem from the 'amd64' dir instead of the 32-bit build in this dir.
+rem When omitted, uses %PREFIX% if set or the 32-bit build
 rem All leading instances of these switches are shifted off, and
 rem whatever remains (up to 9 arguments) is passed to regrtest.py.
 rem For example,
@@ -28,20 +28,21 @@ rem rt -u "network,largefile"
 setlocal
 
 set pcbuild=%~dp0
-set prefix=%pcbuild%win32\
 set suffix=
 set qmode=
 set dashO=
 set regrtestargs=
+set exe=
 
 :CheckOpts
 if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts
 if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
 if "%1"=="-d" (set suffix=_d) & shift & goto CheckOpts
-if "%1"=="-x64" (set prefix=%pcbuild%amd64\) & shift & goto CheckOpts
+if "%1"=="-x64" (set prefix=%pcbuild%amd64) & shift & goto CheckOpts
 if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts
 
-set exe=%prefix%python%suffix%.exe
+if not defined prefix set prefix=%pcbuild%win32
+set exe=%prefix%\python%suffix%.exe
 set cmd="%exe%" %dashO% -u -Wd -E -bb -m test %regrtestargs%
 if defined qmode goto Qmode
 
@@ -49,7 +50,7 @@ echo Deleting .pyc files ...
 "%exe%" "%pcbuild%rmpyc.py"
 
 echo Cleaning _pth files ...
-if exist %prefix%*._pth del %prefix%*._pth
+if exist %prefix%\*._pth del %prefix%\*._pth
 
 echo on
 %cmd%
diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py
index a51566c5069d..2efc4258de91 100755
--- a/Tools/ssl/multissltests.py
+++ b/Tools/ssl/multissltests.py
@@ -125,6 +125,11 @@
 "all and runs the test suite."
 )
 )
+parser.add_argument(
+ '--system',
+ default='',
+ help="Override the automatic system type detection."
+)
 
 
 class AbstractBuilder(object):
@@ -152,6 +157,7 @@ def __init__(self, version, args):
 # build directory (removed after install)
 self.build_dir = os.path.join(
 self.src_dir, self.build_template.format(version))
+ self.system = args.system
 
 def __str__(self):
 return "<{0.__class__.__name__} for {0.version}>".format(self)
@@ -255,9 +261,13 @@ def _build_src(self):
 log.info("Running build in {}".format(self.build_dir))
 cwd = self.build_dir
 cmd = ["./config", "shared", "--prefix={}".format(self.install_dir)]
- self._subprocess_call(cmd, cwd=cwd)
+ env = None
+ if self.system:
+ env = os.environ.copy()
+ env['SYSTEM'] = self.system
+ self._subprocess_call(cmd, cwd=cwd, env=env)
 # Old OpenSSL versions do not support parallel builds.
- self._subprocess_call(["make", "-j1"], cwd=cwd)
+ self._subprocess_call(["make", "-j1"], cwd=cwd, env=env)
 
 def _make_install(self, remove=True):
 self._subprocess_call(


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /