From 4a87f7603fa36abc444757a9e0f90202595b59da Mon Sep 17 00:00:00 2001 From: Robert-André Mauchin Date: Apr 05 2019 15:06:01 +0000 Subject: Release 18.9.0 Run tests Signed-off-by: Robert-André Mauchin --- diff --git a/.gitignore b/.gitignore index fda41ad..de702a5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ /Twisted-16.6.0.tar.bz2 /Twisted-18.4.0.tar.bz2 /Twisted-18.7.0.tar.bz2 +/Twisted-18.9.0.tar.bz2 diff --git a/0001-Remove-checks-for-previous-TLS-implementation.patch b/0001-Remove-checks-for-previous-TLS-implementation.patch new file mode 100644 index 0000000..63f7297 --- /dev/null +++ b/0001-Remove-checks-for-previous-TLS-implementation.patch @@ -0,0 +1,75 @@ +From b8f390574e3cef7fb4abb111fa75f0d9d8ea9f5f Mon Sep 17 00:00:00 2001 +From: Mark Williams +Date: Sun, 10 Feb 2019 16:26:51 -0800 +Subject: [PATCH] Remove checks for previous TLS implementation. + +Before https://twistedmatrix.com/trac/ticket/4854, Twisted's TLS +implementation didn't use memory BIOs; after an implementation was +introduced that did, there were differences between the two that led +these tests to check which one was used. + +Now there's only the memory BIO implementation, so we can remove code +that checks for the previous implementation. +--- + src/twisted/test/test_ssl.py | 27 --------------------------- + 1 file changed, 27 deletions(-) + +diff --git a/src/twisted/test/test_ssl.py b/src/twisted/test/test_ssl.py +index 1f3375e010..d580573627 100644 +--- a/src/twisted/test/test_ssl.py ++++ b/src/twisted/test/test_ssl.py +@@ -11,7 +11,6 @@ + from twisted.internet import protocol, reactor, interfaces, defer + from twisted.internet.error import ConnectionDone + from twisted.protocols import basic +-from twisted.python.reflect import requireModule + from twisted.python.runtime import platform + from twisted.test.test_tcp import ProperlyCloseFilesMixin + from twisted.test.proto_helpers import waitUntilAllDisconnected +@@ -30,12 +29,6 @@ def _noSSL(): + SSL = ssl = None + _noSSL() + +-try: +- from twisted.protocols import tls as newTLS +-except ImportError: +- # Assuming SSL exists, we're using old version in reactor (i.e. non-protocol) +- newTLS = None +- + from zope.interface import implementer + + class UnintelligentProtocol(basic.LineReceiver): +@@ -316,23 +309,6 @@ def getHandleErrorCode(self): + detail. It would be better if this test worked in a way which did not + require this. + """ +- # Windows 2000 SP 4 and Windows XP SP 2 give back WSAENOTSOCK for +- # SSL.Connection.write for some reason. The twisted.protocols.tls +- # implementation of IReactorSSL doesn't suffer from this imprecation, +- # though, since it is isolated from the Windows I/O layer (I suppose?). +- +- # If test_properlyCloseFiles waited for the SSL handshake to complete +- # and performed an orderly shutdown, then this would probably be a +- # little less weird: writing to a shutdown SSL connection has a more +- # well-defined failure mode (or at least it should). +- +- # So figure out if twisted.protocols.tls is in use. If it can be +- # imported, it should be. +- if requireModule('twisted.protocols.tls') is None: +- # It isn't available, so we expect WSAENOTSOCK if we're on Windows. +- if platform.getType() == 'win32': +- return errno.WSAENOTSOCK +- + # Otherwise, we expect an error about how we tried to write to a + # shutdown connection. This is terribly implementation-specific. + return [('SSL routines', 'SSL_write', 'protocol is shutdown')] +@@ -564,9 +540,6 @@ def checkResult(failure): + [clientProtocol.done.addErrback(checkResult), + serverProtocol.done.addErrback(checkResult)]) + +- if newTLS is None: +- test_bothSidesLoseConnection.skip = "Old SSL code doesn't always close cleanly." +- + + def testFailedVerify(self): + org = "twisted.test.test_ssl" diff --git a/0002-ProperlyCloseFilesMixin.getHandleErrorCode-now-return-a-matcher.patch b/0002-ProperlyCloseFilesMixin.getHandleErrorCode-now-return-a-matcher.patch new file mode 100644 index 0000000..839e85a --- /dev/null +++ b/0002-ProperlyCloseFilesMixin.getHandleErrorCode-now-return-a-matcher.patch @@ -0,0 +1,119 @@ +From a1f400c56c7ad0ca241d044b4d283dc0d2291dbb Mon Sep 17 00:00:00 2001 +From: Mark Williams +Date: Sun, 10 Feb 2019 16:40:10 -0800 +Subject: [PATCH] ProperlyCloseFilesMixin.getHandleErrorCode now returns a + matcher. + +twisted.test.test_ssl.StolenTCPTests checks that the TLS connection is +closed upon when the corresponding transport connection is lost. This +involves checking an error message that varies between OpenSSL +versions. + +getHandleErrorCode becomes getHandleErrorCodeMatcher and returns a +hamcrest Matcher to allow StolenTCPTests to match the possible OpenSSL +error messages. +--- + src/twisted/test/test_ssl.py | 27 +++++++++++++++++++-------- + src/twisted/test/test_tcp.py | 19 ++++++++++++------- + 2 files changed, 31 insertions(+), 15 deletions(-) + +diff --git a/src/twisted/test/test_ssl.py b/src/twisted/test/test_ssl.py +index d580573627..7099d0f829 100644 +--- a/src/twisted/test/test_ssl.py ++++ b/src/twisted/test/test_ssl.py +@@ -15,7 +15,8 @@ + from twisted.test.test_tcp import ProperlyCloseFilesMixin + from twisted.test.proto_helpers import waitUntilAllDisconnected + +-import os, errno ++import os ++import hamcrest + + try: + from OpenSSL import SSL, crypto +@@ -302,16 +303,26 @@ def getHandleExceptionType(self): + return SSL.Error + + +- def getHandleErrorCode(self): ++ def getHandleErrorCodeMatcher(self): + """ +- Return the argument L{OpenSSL.SSL.Error} will be constructed with for +- this case. This is basically just a random OpenSSL implementation +- detail. It would be better if this test worked in a way which did not ++ Return a L{hamcrest.core.matcher.Matcher} for the argument ++ L{OpenSSL.SSL.Error} will be constructed with for this case. ++ This is basically just a random OpenSSL implementation detail. ++ It would be better if this test worked in a way which did not + require this. + """ +- # Otherwise, we expect an error about how we tried to write to a +- # shutdown connection. This is terribly implementation-specific. +- return [('SSL routines', 'SSL_write', 'protocol is shutdown')] ++ # We expect an error about how we tried to write to a shutdown ++ # connection. This is terribly implementation-specific. ++ return hamcrest.contains( ++ hamcrest.contains( ++ hamcrest.equal_to('SSL routines'), ++ hamcrest.any_of( ++ hamcrest.equal_to('SSL_write'), ++ hamcrest.equal_to('ssl_write_internal'), ++ ), ++ hamcrest.equal_to('protocol is shutdown'), ++ ), ++ ) + + + +diff --git a/src/twisted/test/test_tcp.py b/src/twisted/test/test_tcp.py +index b8791bb9ca..5a114d6dca 100644 +--- a/src/twisted/test/test_tcp.py ++++ b/src/twisted/test/test_tcp.py +@@ -8,6 +8,7 @@ + from __future__ import division, absolute_import + + import socket, random, errno ++import hamcrest + from functools import wraps + + from zope.interface import implementer +@@ -1135,17 +1136,18 @@ def getHandleExceptionType(self): + raise NotImplementedError() + + +- def getHandleErrorCode(self): ++ def getHandleErrorCodeMatcher(self): + """ +- Return the errno expected to result from writing to a closed +- platform socket handle. ++ Return a L{hamcrest.core.matcher.Matcher} that matches the ++ errno expected to result from writing to a closed platform ++ socket handle. + """ + # Windows and Python 3: returns WSAENOTSOCK + # Windows and Python 2: returns EBADF + # Linux, FreeBSD, macOS: returns EBADF + if platform.isWindows() and _PY3: +- return errno.WSAENOTSOCK +- return errno.EBADF ++ return hamcrest.equal_to(errno.WSAENOTSOCK) ++ return hamcrest.equal_to(errno.EBADF) + + + def test_properlyCloseFiles(self): +@@ -1190,10 +1192,13 @@ def clientDisconnected(result): + if not server.lostConnectionReason.check(error.ConnectionClosed): + err(server.lostConnectionReason, + "Server lost connection for unexpected reason") +- expectedErrorCode = self.getHandleErrorCode() ++ errorCodeMatcher = self.getHandleErrorCodeMatcher() + exception = self.assertRaises( + self.getHandleExceptionType(), client.handle.send, b'bytes') +- self.assertEqual(exception.args[0], expectedErrorCode) ++ hamcrest.assert_that( ++ exception.args[0], ++ errorCodeMatcher, ++ ) + clientDeferred.addCallback(clientDisconnected) + + def cleanup(passthrough): diff --git a/0003-Only-check-for-ECDH-on-TLS-1.2.patch b/0003-Only-check-for-ECDH-on-TLS-1.2.patch new file mode 100644 index 0000000..9eeaf9b --- /dev/null +++ b/0003-Only-check-for-ECDH-on-TLS-1.2.patch @@ -0,0 +1,53 @@ +From 7ca1d814eeec13a965aa5169576feb14de524cb4 Mon Sep 17 00:00:00 2001 +From: Mark Williams +Date: Sun, 10 Feb 2019 16:44:06 -0800 +Subject: [PATCH] Only check for ECDH on TLS 1.2 + +OpenSSL 1.1.1, via cryptography >= 2.5, will attempt to use TLS 1.3; +its implementation of TLS 1.3 always uses ECDH, though its cipher +suites don't reflect that (see comment in diff for more information.) + +Force OpenSSLOptionsECDHIntegrationTests to use TLS 1.2 so that they +continue to assert ECDH is used when it might not be. +--- + src/twisted/test/test_sslverify.py | 27 ++++++++++++++++++++++----- + 1 file changed, 22 insertions(+), 5 deletions(-) + +diff --git a/src/twisted/test/test_sslverify.py b/src/twisted/test/test_sslverify.py +index d06ede76fa..28ac45f93d 100644 +--- a/src/twisted/test/test_sslverify.py ++++ b/src/twisted/test/test_sslverify.py +@@ -1664,11 +1664,28 @@ def test_ellipticCurveDiffieHellman(self): + raise unittest.SkipTest("OpenSSL does not support ECDH.") + + onData = defer.Deferred() +- self.loopback(sslverify.OpenSSLCertificateOptions(privateKey=self.sKey, +- certificate=self.sCert, requireCertificate=False), +- sslverify.OpenSSLCertificateOptions( +- requireCertificate=False), +- onData=onData) ++ # TLS 1.3 cipher suites do not specify the key exchange ++ # mechanism: ++ # https://wiki.openssl.org/index.php/TLS1.3#Differences_with_TLS1.2_and_below ++ # ++ # and OpenSSL only supports ECHDE groups with TLS 1.3: ++ # https://wiki.openssl.org/index.php/TLS1.3#Groups ++ # ++ # so TLS 1.3 implies ECDHE. Force this test to use TLS 1.2 to ++ # ensure ECDH is selected when it might not be. ++ self.loopback( ++ sslverify.OpenSSLCertificateOptions( ++ privateKey=self.sKey, ++ certificate=self.sCert, ++ requireCertificate=False, ++ lowerMaximumSecurityTo=sslverify.TLSVersion.TLSv1_2 ++ ), ++ sslverify.OpenSSLCertificateOptions( ++ requireCertificate=False, ++ lowerMaximumSecurityTo=sslverify.TLSVersion.TLSv1_2, ++ ), ++ onData=onData, ++ ) + + @onData.addCallback + def assertECDH(_): diff --git a/966.patch b/966.patch deleted file mode 100644 index 09d8972..0000000 --- a/966.patch +++ /dev/null @@ -1,218 +0,0 @@ -diff -up Twisted-18.4.0/src/twisted/conch/manhole.py.966 Twisted-18.4.0/src/twisted/conch/manhole.py ---- Twisted-18.4.0/src/twisted/conch/manhole.py.966 2018-03-26 10:19:31.000000000 +0200 -+++ Twisted-18.4.0/src/twisted/conch/manhole.py 2018-06-30 11:33:16.703721804 +0200 -@@ -19,9 +19,11 @@ from io import BytesIO - from twisted.conch import recvline - - from twisted.internet import defer --from twisted.python.compat import _tokenize -+from twisted.python.compat import _tokenize, _get_async_param - from twisted.python.htmlizer import TokenPrinter - -+ -+ - class FileWrapper: - """ - Minimal write-file-like object. -@@ -151,8 +153,9 @@ class ManholeInterpreter(code.Interactiv - return failure - - -- def write(self, data, async=False): -- self.handler.addOutput(data, async) -+ def write(self, data, isAsync=None, **kwargs): -+ isAsync = _get_async_param(isAsync, **kwargs) -+ self.handler.addOutput(data, isAsync) - - - -@@ -237,14 +240,16 @@ class Manhole(recvline.HistoricRecvLine) - return not w.endswith(b'\n') and not w.endswith(b'\x1bE') - - -- def addOutput(self, data, async=False): -- if async: -+ def addOutput(self, data, isAsync=None, **kwargs): -+ isAsync = _get_async_param(isAsync, **kwargs) -+ if isAsync: - self.terminal.eraseLine() -- self.terminal.cursorBackward(len(self.lineBuffer) + len(self.ps[self.pn])) -+ self.terminal.cursorBackward(len(self.lineBuffer) + -+ len(self.ps[self.pn])) - - self.terminal.write(data) - -- if async: -+ if isAsync: - if self._needsNewline(): - self.terminal.nextLine() - -diff -up Twisted-18.4.0/src/twisted/mail/imap4.py.966 Twisted-18.4.0/src/twisted/mail/imap4.py ---- Twisted-18.4.0/src/twisted/mail/imap4.py.966 2018-03-26 10:19:31.000000000 +0200 -+++ Twisted-18.4.0/src/twisted/mail/imap4.py 2018-06-30 11:33:16.704721802 +0200 -@@ -42,7 +42,7 @@ from twisted.python.compat import ( - _bytesChr, unichr as chr, _b64decodebytes as decodebytes, - _b64encodebytes as encodebytes, - intToBytes, iterbytes, long, nativeString, networkString, unicode, -- _matchingString, _PY3 -+ _matchingString, _PY3, _get_async_param, - ) - from twisted.internet import interfaces - -@@ -1090,8 +1090,9 @@ class IMAP4Server(basic.LineReceiver, po - self._respond(b'NO', tag, message) - - -- def sendUntaggedResponse(self, message, async=False): -- if not async or (self.blocked is None): -+ def sendUntaggedResponse(self, message, isAsync=None, **kwargs): -+ isAsync = _get_async_param(isAsync, **kwargs) -+ if not isAsync or (self.blocked is None): - self._respond(message, None, None) - else: - self._queuedAsync.append(message) -@@ -2497,25 +2498,28 @@ class IMAP4Server(basic.LineReceiver, po - # - def modeChanged(self, writeable): - if writeable: -- self.sendUntaggedResponse(message=b'[READ-WRITE]', async=True) -+ self.sendUntaggedResponse(message=b'[READ-WRITE]', isAsync=True) - else: -- self.sendUntaggedResponse(message=b'[READ-ONLY]', async=True) -+ self.sendUntaggedResponse(message=b'[READ-ONLY]', isAsync=True) - - - def flagsChanged(self, newFlags): - for (mId, flags) in newFlags.items(): - encodedFlags = [networkString(flag) for flag in flags] - msg = intToBytes(mId) + ( -- b' FETCH (FLAGS (' +b' '.join(encodedFlags) + b'))' -+ b' FETCH (FLAGS (' + b' '.join(encodedFlags) + b'))' - ) -- self.sendUntaggedResponse(msg, async=True) -+ self.sendUntaggedResponse(msg, isAsync=True) - - - def newMessages(self, exists, recent): - if exists is not None: -- self.sendUntaggedResponse(intToBytes(exists) + b' EXISTS', async=True) -+ self.sendUntaggedResponse( -+ intToBytes(exists) + b' EXISTS', isAsync=True) - if recent is not None: -- self.sendUntaggedResponse(intToBytes(recent) + b' RECENT', async=True) -+ self.sendUntaggedResponse( -+ intToBytes(recent) + b' RECENT', isAsync=True) -+ - - - TIMEOUT_ERROR = error.TimeoutError() -diff -up Twisted-18.4.0/src/twisted/newsfragments/9384.bugfix.966 Twisted-18.4.0/src/twisted/newsfragments/9384.bugfix ---- Twisted-18.4.0/src/twisted/newsfragments/9384.bugfix.966 2018-06-30 11:33:16.682721845 +0200 -+++ Twisted-18.4.0/src/twisted/newsfragments/9384.bugfix 2018-06-30 11:33:16.706721798 +0200 -@@ -0,0 +1,2 @@ -+Syntax error under Python 3.7 fixed for twisted.conch.manhole and -+twisted.main.imap4. -diff -up Twisted-18.4.0/src/twisted/newsfragments/9384.removal.966 Twisted-18.4.0/src/twisted/newsfragments/9384.removal ---- Twisted-18.4.0/src/twisted/newsfragments/9384.removal.966 2018-06-30 11:33:16.706721798 +0200 -+++ Twisted-18.4.0/src/twisted/newsfragments/9384.removal 2018-06-30 11:33:16.706721798 +0200 -@@ -0,0 +1,4 @@ -+async keyword argument is deprecated in twisted.conch.manhole -+(ManholeInterpreter.write and Manhole.add) and in -+twisted.main.imap4.IMAP4Server.sendUntaggedResponse, -+isAsync keyword argument is introduced instead. -diff -up Twisted-18.4.0/src/twisted/python/compat.py.966 Twisted-18.4.0/src/twisted/python/compat.py ---- Twisted-18.4.0/src/twisted/python/compat.py.966 2018-04-13 15:15:32.000000000 +0200 -+++ Twisted-18.4.0/src/twisted/python/compat.py 2018-06-30 11:33:16.704721802 +0200 -@@ -31,6 +31,7 @@ import struct - import sys - import tokenize - from types import MethodType as _MethodType -+import warnings - - from io import TextIOBase, IOBase - -@@ -833,6 +834,34 @@ except ImportError: - from collections import Sequence - - -+def _get_async_param(isAsync=None, **kwargs): -+ """ -+ Provide a backwards-compatible way to get async param value that does not -+ cause a syntax error under Python 3.7. -+ -+ @param isAsync: isAsync param value (should default to None) -+ @type isAsync: L{bool} -+ -+ @param kwargs: keyword arguments of the caller (only async is allowed) -+ @type kwargs: L{dict} -+ -+ @raise TypeError: Both isAsync and async specified. -+ -+ @return: Final isAsync param value -+ @rtype: L{bool} -+ """ -+ if 'async' in kwargs: -+ warnings.warn( -+ "'async' keyword argument is deprecated, please use isAsync", -+ DeprecationWarning, stacklevel=2) -+ if isAsync is None and 'async' in kwargs: -+ isAsync = kwargs.pop('async') -+ if kwargs: -+ raise TypeError -+ return bool(isAsync) -+ -+ -+ - __all__ = [ - "reraise", - "execfile", -diff -up Twisted-18.4.0/src/twisted/test/test_compat.py.966 Twisted-18.4.0/src/twisted/test/test_compat.py ---- Twisted-18.4.0/src/twisted/test/test_compat.py.966 2018-03-26 10:19:31.000000000 +0200 -+++ Twisted-18.4.0/src/twisted/test/test_compat.py 2018-06-30 11:33:16.706721798 +0200 -@@ -16,7 +16,7 @@ from twisted.python.compat import ( - reduce, execfile, _PY3, _PYPY, comparable, cmp, nativeString, - networkString, unicode as unicodeCompat, lazyByteSlice, reraise, - NativeStringIO, iterbytes, intToBytes, ioType, bytesEnviron, iteritems, -- _coercedUnicode, unichr, raw_input, _bytesRepr -+ _coercedUnicode, unichr, raw_input, _bytesRepr, _get_async_param, - ) - from twisted.python.filepath import FilePath - from twisted.python.runtime import platform -@@ -921,3 +921,37 @@ class FutureBytesReprTests(unittest.Test - ``b`` to the returned repr on both Python 2 and 3. - """ - self.assertEqual(_bytesRepr(b'\x00'), "b'\\x00'") -+ -+ -+ -+class GetAsyncParamTests(unittest.SynchronousTestCase): -+ """ -+ Tests for L{twisted.python.compat._get_async_param} -+ """ -+ -+ def test_get_async_param(self): -+ """ -+ L{twisted.python.compat._get_async_param} uses isAsync by default, -+ or deprecated async keyword argument if isAsync is None. -+ """ -+ self.assertEqual(_get_async_param(isAsync=False), False) -+ self.assertEqual(_get_async_param(isAsync=True), True) -+ self.assertEqual( -+ _get_async_param(isAsync=None, **{'async': False}), False) -+ self.assertEqual( -+ _get_async_param(isAsync=None, **{'async': True}), True) -+ self.assertRaises(TypeError, _get_async_param, False, {'async': False}) -+ -+ -+ def test_get_async_param_deprecation(self): -+ """ -+ L{twisted.python.compat._get_async_param} raises a deprecation -+ warning if async keyword argument is passed. -+ """ -+ self.assertEqual( -+ _get_async_param(isAsync=None, **{'async': False}), False) -+ currentWarnings = self.flushWarnings( -+ offendingFunctions=[self.test_get_async_param_deprecation]) -+ self.assertEqual( -+ currentWarnings[0]['message'], -+ "'async' keyword argument is deprecated, please use isAsync") diff --git a/python-twisted.spec b/python-twisted.spec index f0e5116..08a4de5 100644 --- a/python-twisted.spec +++ b/python-twisted.spec @@ -1,19 +1,23 @@ +%global pypi_name twisted + %global common_description %{expand: Twisted is a networking engine written in Python, supporting numerous protocols. It contains a web server, numerous chat clients, chat servers, mail servers and more.} -Name: python-twisted -Version: 18.7.0 -Release: 3%{?dist} +Name: python-%{pypi_name} +Version: 18.9.0 +Release: 1%{?dist} Summary: Twisted is a networking engine written in Python License: MIT URL: http://twistedmatrix.com/ Source0: https://files.pythonhosted.org/packages/source/T/Twisted/Twisted-%{version}.tar.bz2 -# https://github.com/twisted/twisted/pull/966 rebased -Patch0: 966.patch +# Fix a test. Remove after 18.9.0. +Patch0: https://github.com/twisted/twisted/commit/b8f390574e3cef7fb4abb111fa75f0d9d8ea9f5f.patch#/0001-Remove-checks-for-previous-TLS-implementation.patch +Patch1: https://github.com/twisted/twisted/commit/a1f400c56c7ad0ca241d044b4d283dc0d2291dbb.patch#/0002-ProperlyCloseFilesMixin.getHandleErrorCode-now-return-a-matcher.patch +Patch2: https://github.com/twisted/twisted/commit/7ca1d814eeec13a965aa5169576feb14de524cb4.patch#/0003-Only-check-for-ECDH-on-TLS-1.2.patch %{?python_enable_dependency_generator} @@ -21,9 +25,9 @@ Patch0: 966.patch %{common_description} -%package -n python2-twisted +%package -n python2-%{pypi_name} Summary: %{summary} -%{?python_provide:%python_provide python2-twisted} +%{?python_provide:%python_provide python2-%{pypi_name}} BuildRequires: gcc BuildRequires: python2-devel >= 2.6 @@ -42,16 +46,17 @@ BuildRequires: python2dist(pyserial) >= 3.0 BuildRequires: python2dist(service-identity) BuildRequires: python2dist(setuptools) BuildRequires: python2dist(zope.interface) >= 4.4.2 +BuildRequires: python2dist(pyhamcrest) Recommends: python2dist(service-identity) -%description -n python2-twisted +%description -n python2-%{pypi_name} %{common_description} -%package -n python3-twisted +%package -n python3-%{pypi_name} Summary: %{summary} -%{?python_provide:%python_provide python3-twisted} +%{?python_provide:%python_provide python3-%{pypi_name}} BuildRequires: gcc BuildRequires: python3-devel >= 3.3 @@ -71,10 +76,11 @@ BuildRequires: python3dist(service-identity) BuildRequires: python3dist(setuptools) BuildRequires: python3dist(sphinx) >= 1.3.1 BuildRequires: python3dist(zope.interface) >= 4.4.2 +BuildRequires: python3dist(pyhamcrest) Recommends: python3dist(service-identity) -%description -n python3-twisted +%description -n python3-%{pypi_name} %{common_description} @@ -151,9 +157,10 @@ pathfix.py -pn -i %{__python3} %{buildroot}%{python3_sitelib} %{buildroot}%{pyth %check -# bin/trial twisted # can't get this to work within the buildroot yet due to multicast # https://twistedmatrix.com/trac/ticket/7494 +PATH=%{buildroot}%{_bindir}:$PATH PYTHONPATH=%{buildroot}%{python2_sitearch} %{buildroot}%{_bindir}/trial-2 twisted ||: +PATH=%{buildroot}%{_bindir}:$PATH PYTHONPATH=%{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/trial twisted ||: %files -n python2-twisted @@ -164,6 +171,7 @@ pathfix.py -pn -i %{__python3} %{buildroot}%{python3_sitelib} %{buildroot}%{pyth %{python2_sitearch}/twisted %{python2_sitearch}/Twisted-%{version}-py?.?.egg-info + %files -n python3-twisted %doc CONTRIBUTING NEWS.rst README.rst html %license LICENSE @@ -191,6 +199,10 @@ pathfix.py -pn -i %{__python3} %{buildroot}%{python3_sitelib} %{buildroot}%{pyth %changelog +* Thu Mar 07 2019 Robert-André Mauchin - 18.9.0-1 +- Release 18.9.0 +- Run tests + * Mon Oct 22 2018 Miro Hrončok - 18.7.0-3 - Recommend pythonX-service-identity diff --git a/sources b/sources index 9a8c41d..62e3e38 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Twisted-18.7.0.tar.bz2) = feefa578bc1787648df07e4a53bd6fe29b43c4357472e4fba37526f075be9263e8c671b6781ce6ad3569c1b1666cb702efbee903f597714a749971695018f826 +SHA512 (Twisted-18.9.0.tar.bz2) = a9878750f46207b8758f5407a0e4332d9e367bd3ed4e18001825982c3ba78c56372934e634f1866805b9b9bc452698ad36396285172b61cf84da0de5efa7cc29