From 0d8f83f59c8f4cc7fe125434ca4ecdcac111810f Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Thu, 17 May 2018 09:46:00 -0400 Subject: [PATCH] bpo-33522: Enable CI builds on Visual Studio Team Services (GH-6865) (GH-6925) --- .vsts/docs-release.yml | 43 +++++++++++ .vsts/docs.yml | 43 +++++++++++ .vsts/linux-buildbot.yml | 71 +++++++++++++++++ .vsts/linux-coverage.yml | 77 +++++++++++++++++++ .vsts/linux-deps.yml | 36 +++++++++ .vsts/linux-pr.yml | 75 ++++++++++++++++++ .vsts/macos-buildbot.yml | 37 +++++++++ .vsts/macos-pr.yml | 37 +++++++++ .vsts/windows-buildbot.yml | 49 ++++++++++++ .vsts/windows-pr.yml | 49 ++++++++++++ Doc/make.bat | 12 +-- Lib/tempfile.py | 4 +- Lib/test/support/__init__.py | 22 +++++- Lib/test/test_asyncio/test_base_events.py | 1 + Lib/test/test_bdb.py | 4 +- Lib/test/test_pathlib.py | 2 +- Lib/test/test_poplib.py | 11 +-- Lib/test/test_selectors.py | 9 ++- .../2018-05-15-12-44-50.bpo-33522.mJoNcA.rst | 2 + .../2018-05-16-17-05-48.bpo-33548.xWslmx.rst | 1 + PCbuild/rt.bat | 13 ++-- Tools/ssl/multissltests.py | 14 +++- 22 files changed, 589 insertions(+), 23 deletions(-) create mode 100644 .vsts/docs-release.yml create mode 100644 .vsts/docs.yml create mode 100644 .vsts/linux-buildbot.yml create mode 100644 .vsts/linux-coverage.yml create mode 100644 .vsts/linux-deps.yml create mode 100644 .vsts/linux-pr.yml create mode 100644 .vsts/macos-buildbot.yml create mode 100644 .vsts/macos-pr.yml create mode 100644 .vsts/windows-buildbot.yml create mode 100644 .vsts/windows-pr.yml create mode 100644 Misc/NEWS.d/next/Build/2018-05-15-12-44-50.bpo-33522.mJoNcA.rst create mode 100644 Misc/NEWS.d/next/Library/2018-05-16-17-05-48.bpo-33548.xWslmx.rst diff --git a/.vsts/docs-release.yml b/.vsts/docs-release.yml new file mode 100644 index 00000000000000..e90428a42494e0 --- /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@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@1 + displayName: 'Publish build' + inputs: + PathToPublish: '$(build.sourcesDirectory)/Doc/build' + ArtifactName: build + publishLocation: Container + +- task: PublishBuildArtifacts@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 00000000000000..efa1e871656de8 --- /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@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@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 00000000000000..d75d7f57650e27 --- /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 00000000000000..3657b1720ee2cc --- /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 00000000000000..b6c8a3690ea13b --- /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 00000000000000..7f4d458f5a7cfa --- /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 00000000000000..8a4f6ba8cb8bff --- /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 00000000000000..8a4f6ba8cb8bff --- /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 00000000000000..5ec4522796cea9 --- /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 00000000000000..5ec4522796cea9 --- /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 6cb315fda40583..c69cfae3194164 100644 --- a/Doc/make.bat +++ b/Doc/make.bat @@ -5,18 +5,21 @@ pushd %~dp0 set this=%~n0 -call ..\PCBuild\find_python.bat %PYTHON% -if not defined SPHINXBUILD if defined PYTHON ( +call ..\PCbuild\find_python.bat %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 38738082b99656..2cb5434ba7b5de 100644 --- a/Lib/tempfile.py +++ b/Lib/tempfile.py @@ -173,7 +173,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 867124b63e24e2..e46394e89d1f60 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -366,6 +366,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 @@ -392,6 +406,9 @@ def _rmtree_inner(path): _rmtree_inner(path) os.rmdir(path) + def _longpath(path): + return path + def unlink(filename): try: _unlink(filename) @@ -2333,13 +2350,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() @@ -2350,6 +2369,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 830f0d84a9d49c..42c0707e8f21b1 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -1750,5 +1750,6 @@ def runner(loop): outer_loop.close() + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py index abefe6c4e57adc..a366678697180f 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 db53a8f202dc9d..bf9467e96e09ef 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1531,7 +1531,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 ca9bc6217509f0..234c855545c2bb 100644 --- a/Lib/test/test_poplib.py +++ b/Lib/test/test_poplib.py @@ -217,11 +217,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 852b2feb45fde3..14ce91f3768cec 100644 --- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -450,7 +450,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 00000000000000..f44862f0c454fd --- /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 00000000000000..65585c152987bd --- /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 808102f826d370..212befc95b0698 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,28 +28,29 @@ 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 -set cmd="%exe%" %dashO% -Wd -E -bb -m test %regrtestargs% +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 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 ba4529ae0611c8..f3241cd6071c80 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -123,6 +123,11 @@ action='store_true', help="Don't run tests, only compile _ssl.c and _hashopenssl.c." ) +parser.add_argument( + '--system', + default='', + help="Override the automatic system type detection." +) class AbstractBuilder(object): @@ -150,6 +155,7 @@ def __init__(self, version, compile_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) @@ -254,9 +260,13 @@ def _build_src(self): cwd = self.build_dir cmd = ["./config", "shared", "--prefix={}".format(self.install_dir)] cmd.extend(self.compile_args) - 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(["make", "-j1", "install"], cwd=self.build_dir)