diff --git a/0001-Migrate-Gtk-interface-to-GObject-introspection.patch b/0001-Migrate-Gtk-interface-to-GObject-introspection.patch deleted file mode 100644 index 2830de0..0000000 --- a/0001-Migrate-Gtk-interface-to-GObject-introspection.patch +++ /dev/null @@ -1,239 +0,0 @@ -From ad3523fd57d01c9a443e2d1b07215c001d8da91d Mon Sep 17 00:00:00 2001 -From: Haikel Guemar -Date: Fri, 30 Nov 2018 14:30:08 +0100 -Subject: [PATCH] Migrate Gtk interface to GObject introspection - -Filters subunit2gtk and subunit-notify now uses GObject introspection -Both are compatible with python2 and python3 ---- - filters/subunit-notify | 10 +++--- - filters/subunit2gtk | 80 +++++++++++++++++++++--------------------- - 2 files changed, 45 insertions(+), 45 deletions(-) - -diff --git a/filters/subunit-notify b/filters/subunit-notify -index bc833da..71da071 100755 ---- a/filters/subunit-notify -+++ b/filters/subunit-notify -@@ -16,15 +16,15 @@ - - """Notify the user of a finished test run.""" - --import pygtk --pygtk.require('2.0') --import pynotify -+import gi -+gi.require_version('Gtk', '3.0') -+from gi.repository import Notify - from testtools import StreamToExtendedDecorator - - from subunit import TestResultStats - from subunit.filters import run_filter_script - --if not pynotify.init("Subunit-notify"): -+if not Notify.init("Subunit-notify"): - sys.exit(1) - - -@@ -39,7 +39,7 @@ def notify_of_result(result): - result.passed_tests, - result.failed_tests, - ) -- nw = pynotify.Notification(summary, body) -+ nw = Notify.Notification(summary, body) - nw.show() - - -diff --git a/filters/subunit2gtk b/filters/subunit2gtk -index 78b4309..5c0ebe3 100755 ---- a/filters/subunit2gtk -+++ b/filters/subunit2gtk -@@ -49,9 +49,9 @@ import sys - import threading - import unittest - --import pygtk --pygtk.require('2.0') --import gtk, gtk.gdk, gobject -+import gi -+gi.require_version('Gtk', '3.0') -+from gi.repository import Gtk, GObject - - from testtools import StreamToExtendedDecorator - -@@ -75,64 +75,64 @@ class GTKTestResult(unittest.TestResult): - self.not_ok_label = None - self.total_tests = None - -- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) -+ self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) - self.window.set_resizable(True) - -- self.window.connect("destroy", gtk.main_quit) -+ self.window.connect("destroy", Gtk.main_quit) - self.window.set_title("Tests...") - self.window.set_border_width(0) - -- vbox = gtk.VBox(False, 5) -+ vbox = Gtk.VBox(False, 5) - vbox.set_border_width(10) - self.window.add(vbox) - vbox.show() - - # Create a centering alignment object -- align = gtk.Alignment(0.5, 0.5, 0, 0) -+ align = Gtk.Alignment.new(0.5, 0.5, 0, 0) - vbox.pack_start(align, False, False, 5) - align.show() - - # Create the ProgressBar -- self.pbar = gtk.ProgressBar() -+ self.pbar = Gtk.ProgressBar() - align.add(self.pbar) - self.pbar.set_text("Running") - self.pbar.show() - self.progress_model = ProgressModel() - -- separator = gtk.HSeparator() -+ separator = Gtk.HSeparator() - vbox.pack_start(separator, False, False, 0) - separator.show() - - # rows, columns, homogeneous -- table = gtk.Table(2, 3, False) -+ table = Gtk.Table(2, 3, False) - vbox.pack_start(table, False, True, 0) - table.show() - # Show summary details about the run. Could use an expander. -- label = gtk.Label("Run:") -- table.attach(label, 0, 1, 1, 2, gtk.EXPAND | gtk.FILL, -- gtk.EXPAND | gtk.FILL, 5, 5) -+ label = Gtk.Label(label="Run:") -+ table.attach(label, 0, 1, 1, 2, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, -+ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) - label.show() -- self.run_label = gtk.Label("N/A") -- table.attach(self.run_label, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, -- gtk.EXPAND | gtk.FILL, 5, 5) -+ self.run_label = Gtk.Label(label="N/A") -+ table.attach(self.run_label, 1, 2, 1, 2, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, -+ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) - self.run_label.show() - -- label = gtk.Label("OK:") -- table.attach(label, 0, 1, 2, 3, gtk.EXPAND | gtk.FILL, -- gtk.EXPAND | gtk.FILL, 5, 5) -+ label = Gtk.Label(label="OK:") -+ table.attach(label, 0, 1, 2, 3, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, -+ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) - label.show() -- self.ok_label = gtk.Label("N/A") -- table.attach(self.ok_label, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, -- gtk.EXPAND | gtk.FILL, 5, 5) -+ self.ok_label = Gtk.Label(label="N/A") -+ table.attach(self.ok_label, 1, 2, 2, 3, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, -+ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) - self.ok_label.show() - -- label = gtk.Label("Not OK:") -- table.attach(label, 0, 1, 3, 4, gtk.EXPAND | gtk.FILL, -- gtk.EXPAND | gtk.FILL, 5, 5) -+ label = Gtk.Label(label="Not OK:") -+ table.attach(label, 0, 1, 3, 4, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, -+ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) - label.show() -- self.not_ok_label = gtk.Label("N/A") -- table.attach(self.not_ok_label, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, -- gtk.EXPAND | gtk.FILL, 5, 5) -+ self.not_ok_label = Gtk.Label(label="N/A") -+ table.attach(self.not_ok_label, 1, 2, 3, 4, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, -+ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) - self.not_ok_label.show() - - self.window.show() -@@ -142,7 +142,7 @@ class GTKTestResult(unittest.TestResult): - - def stopTest(self, test): - super(GTKTestResult, self).stopTest(test) -- gobject.idle_add(self._stopTest) -+ GObject.idle_add(self._stopTest) - - def _stopTest(self): - self.progress_model.advance() -@@ -159,26 +159,26 @@ class GTKTestResult(unittest.TestResult): - super(GTKTestResult, self).stopTestRun() - except AttributeError: - pass -- gobject.idle_add(self.pbar.set_text, 'Finished') -+ GObject.idle_add(self.pbar.set_text, 'Finished') - - def addError(self, test, err): - super(GTKTestResult, self).addError(test, err) -- gobject.idle_add(self.update_counts) -+ GObject.idle_add(self.update_counts) - - def addFailure(self, test, err): - super(GTKTestResult, self).addFailure(test, err) -- gobject.idle_add(self.update_counts) -+ GObject.idle_add(self.update_counts) - - def addSuccess(self, test): - super(GTKTestResult, self).addSuccess(test) -- gobject.idle_add(self.update_counts) -+ GObject.idle_add(self.update_counts) - - def addSkip(self, test, reason): - # addSkip is new in Python 2.7/3.1 - addSkip = getattr(super(GTKTestResult, self), 'addSkip', None) - if callable(addSkip): - addSkip(test, reason) -- gobject.idle_add(self.update_counts) -+ GObject.idle_add(self.update_counts) - - def addExpectedFailure(self, test, err): - # addExpectedFailure is new in Python 2.7/3.1 -@@ -186,7 +186,7 @@ class GTKTestResult(unittest.TestResult): - 'addExpectedFailure', None) - if callable(addExpectedFailure): - addExpectedFailure(test, err) -- gobject.idle_add(self.update_counts) -+ GObject.idle_add(self.update_counts) - - def addUnexpectedSuccess(self, test): - # addUnexpectedSuccess is new in Python 2.7/3.1 -@@ -194,7 +194,7 @@ class GTKTestResult(unittest.TestResult): - 'addUnexpectedSuccess', None) - if callable(addUnexpectedSuccess): - addUnexpectedSuccess(test) -- gobject.idle_add(self.update_counts) -+ GObject.idle_add(self.update_counts) - - def progress(self, offset, whence): - if whence == PROGRESS_PUSH: -@@ -218,12 +218,12 @@ class GTKTestResult(unittest.TestResult): - self.ok_label.set_text(str(self.testsRun - bad)) - self.not_ok_label.set_text(str(bad)) - --gobject.threads_init() -+GObject.threads_init() - result = StreamToExtendedDecorator(GTKTestResult()) - test = ByteStreamToStreamResult(sys.stdin, non_subunit_name='stdout') - # Get setup --while gtk.events_pending(): -- gtk.main_iteration() -+while Gtk.events_pending(): -+ Gtk.main_iteration() - # Start IO - def run_and_finish(): - test.run(result) -@@ -232,7 +232,7 @@ t = threading.Thread(target=run_and_finish) - t.daemon = True - result.startTestRun() - t.start() --gtk.main() -+Gtk.main() - if result.decorated.wasSuccessful(): - exit_code = 0 - else: --- -2.19.2 - diff --git a/0003-port-to-python-iso8601-0.1.12.patch b/0001-port-to-python-iso8601-0.1.14.patch similarity index 88% rename from 0003-port-to-python-iso8601-0.1.12.patch rename to 0001-port-to-python-iso8601-0.1.14.patch index 786da01..0780d70 100644 --- a/0003-port-to-python-iso8601-0.1.12.patch +++ b/0001-port-to-python-iso8601-0.1.14.patch @@ -1,19 +1,5 @@ -From 50101aef9e200edeaa800a77c74cda5461850296 Mon Sep 17 00:00:00 2001 -From: maminjie -Date: Wed, 3 Feb 2021 11:40:42 +0800 -Subject: [PATCH] port to python-iso8601 0.1.12 - ---- - python/subunit/__init__.py | 2 +- - python/subunit/test_results.py | 2 +- - python/subunit/tests/test_test_protocol.py | 4 ++-- - python/subunit/tests/test_test_protocol2.py | 4 ++-- - python/subunit/tests/test_test_results.py | 4 ++-- - python/subunit/v2.py | 2 +- - 6 files changed, 9 insertions(+), 9 deletions(-) - diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py -index b3b198c..846cc31 100644 +index 17a970a..63c7d66 100644 --- a/python/subunit/__init__.py +++ b/python/subunit/__init__.py @@ -799,7 +799,7 @@ class TestProtocolClient(testresult.TestResult): @@ -105,7 +91,7 @@ index 44f95b3..f1a83fd 100644 self.assertEqual(1, len(self.decorated._calls)) self.assertEqual(time, self.decorated._calls[0]) diff --git a/python/subunit/v2.py b/python/subunit/v2.py -index 254617c..be2049d 100644 +index e8a31d6..c299cab 100644 --- a/python/subunit/v2.py +++ b/python/subunit/v2.py @@ -49,7 +49,7 @@ FLAG_TAGS = 0x0080 @@ -117,6 +103,3 @@ index 254617c..be2049d 100644 NUL_ELEMENT = b'\0'[0] # Contains True for types for which 'nul in thing' falsely returns false. _nul_test_broken = {} --- -2.23.0 - diff --git a/0002-Fix-file-open-for-python3.patch b/0002-Fix-file-open-for-python3.patch deleted file mode 100644 index 62e66a9..0000000 --- a/0002-Fix-file-open-for-python3.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 4abf704d1baddda950450ad057c5f4be87804928 Mon Sep 17 00:00:00 2001 -From: Quique Llorente -Date: Wed, 26 Dec 2018 14:57:24 +0100 -Subject: [PATCH] Fix file open for python3 - -At python3 there is no "file" the "open" function has to be use to open -a file. ---- - python/subunit/filters.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/python/subunit/filters.py b/python/subunit/filters.py -index 0a0a185..ec7e9f3 100644 ---- a/python/subunit/filters.py -+++ b/python/subunit/filters.py -@@ -5,7 +5,7 @@ - # license at the users choice. A copy of both licenses are available in the - # project source as Apache-2.0 and BSD. You may not use this file except in - # compliance with one of these two licences. --# -+# - # Unless required by applicable law or agreed to in writing, software - # distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT - # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -@@ -143,7 +143,7 @@ def filter_by_result(result_factory, output_path, passthrough, forward, - if output_path is None: - output_to = sys.stdout - else: -- output_to = file(output_path, 'wb') -+ output_to = open(output_path, 'w') - - try: - result = result_factory(output_to) --- -2.19.2 - diff --git a/0004-Work-around-short-read-race.patch b/0004-Work-around-short-read-race.patch deleted file mode 100644 index 410d7e7..0000000 --- a/0004-Work-around-short-read-race.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 2db224de33b69718add29fa06904043b231efa44 Mon Sep 17 00:00:00 2001 -From: wangxiyuan -Date: Mon, 22 Feb 2021 16:14:11 +0800 -Subject: [PATCH] Work around 'short read' race - -Backport python3 fix ---- - python/subunit/v2.py | 35 +++++++++++++++++++++-------------- - 1 file changed, 21 insertions(+), 14 deletions(-) - -diff --git a/python/subunit/v2.py b/python/subunit/v2.py -index be2049d..e44dc05 100644 ---- a/python/subunit/v2.py -+++ b/python/subunit/v2.py -@@ -71,6 +71,22 @@ def has_nul(buffer_or_bytes): - else: - return NUL_ELEMENT in buffer_or_bytes - -+def read_exactly(stream, size): -+ """Read exactly size bytes from stream. -+ :param stream: A file like object to read bytes from. Must support -+ read() and return bytes. -+ :param size: The number of bytes to retrieve. -+ """ -+ data = b'' -+ remaining = size -+ while remaining: -+ read = stream.read(remaining) -+ if len(read) == 0: -+ raise ParseError('Short read - got %d bytes, wanted %d bytes' % ( -+ len(data), size)) -+ data += read -+ remaining -= len(read) -+ return data - - class ParseError(Exception): - """Used to pass error messages within the parser.""" -@@ -404,19 +420,11 @@ class ByteStreamToStreamResult(object): - - def _parse(self, packet, result): - # 2 bytes flags, at most 3 bytes length. -- packet.append(self.source.read(5)) -- if len(packet[-1]) != 5: -- raise ParseError( -- 'Short read - got %d bytes, wanted 5' % len(packet[-1])) -- flag_bytes = packet[-1][:2] -- flags = struct.unpack(FMT_16, flag_bytes)[0] -- length, consumed = self._parse_varint( -- packet[-1], 2, max_3_bytes=True) -- remainder = self.source.read(length - 6) -- if len(remainder) != length - 6: -- raise ParseError( -- 'Short read - got %d bytes, wanted %d bytes' % ( -- len(remainder), length - 6)) -+ header = read_exactly(self.source, 5) -+ packet.append(header) -+ flags = struct.unpack(FMT_16, header[:2])[0] -+ length, consumed = self._parse_varint(header, 2, max_3_bytes=True) -+ remainder = read_exactly(self.source, length - 6) - if consumed != 3: - # Avoid having to parse torn values - packet[-1] += remainder -@@ -515,4 +523,3 @@ class ByteStreamToStreamResult(object): - return utf8, length+pos - except UnicodeDecodeError: - raise ParseError('UTF8 string at offset %d is not UTF8' % (pos-2,)) -- --- -2.23.0.windows.1 - diff --git a/subunit-1.3.0.tar.gz b/subunit-1.3.0.tar.gz deleted file mode 100644 index a19bab3..0000000 Binary files a/subunit-1.3.0.tar.gz and /dev/null differ diff --git a/subunit-1.4.0.tar.gz b/subunit-1.4.0.tar.gz new file mode 100644 index 0000000..c196062 Binary files /dev/null and b/subunit-1.4.0.tar.gz differ diff --git a/subunit-decode-binary-to-unicode.patch b/subunit-decode-binary-to-unicode.patch index 5410e92..254c79e 100644 --- a/subunit-decode-binary-to-unicode.patch +++ b/subunit-decode-binary-to-unicode.patch @@ -1,21 +1,8 @@ -From 2051f178d568a1595f497308703495b9e33ff80b Mon Sep 17 00:00:00 2001 -From: Lukas Bezdicka -Date: Wed, 2 Sep 2015 06:55:42 -0400 -Subject: [PATCH] Correctly decode binary to utf8 string - -This patch solves error: - Expecting a string b'2014-12-16 20:42:25.441886Z' - -Related-Bug: #1403214 ---- - python/subunit/__init__.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py -index 7d864e8..b198884 100644 +index 63c7d66..e735437 100644 --- a/python/subunit/__init__.py +++ b/python/subunit/__init__.py -@@ -556,7 +556,7 @@ def _handleTags(self, offset, line): +@@ -556,7 +556,7 @@ class TestProtocolServer(object): def _handleTime(self, offset, line): # Accept it, but do not do anything with it yet. try: diff --git a/subunit.spec b/subunit.spec index 7255274..4ad4151 100644 --- a/subunit.spec +++ b/subunit.spec @@ -1,17 +1,14 @@ Name: subunit -Version: 1.3.0 -Release: 15 +Version: 1.4.0 +Release: 1 Summary: C bindings for subunit License: ASL 2.0 or BSD URL: https://launchpad.net/subunit -Source0: https://launchpad.net/subunit/trunk/1.3/+download/subunit-%{version}.tar.gz +Source0: https://launchpad.net/subunit/trunk/%{version}/+download/%{name}-%{version}.tar.gz Patch0: %{name}-unbundle-iso8601.patch Patch1: %{name}-decode-binary-to-unicode.patch -Patch2: 0001-Migrate-Gtk-interface-to-GObject-introspection.patch -Patch3: 0002-Fix-file-open-for-python3.patch -Patch4: 0003-port-to-python-iso8601-0.1.12.patch -Patch5: 0004-Work-around-short-read-race.patch -BuildRequires: check-devel cppunit-devel gcc-c++ libtool perl-generators +Patch2: 0001-port-to-python-iso8601-0.1.14.patch +BuildRequires: check-devel cppunit-devel gcc-c++ libtool perl-generators make BuildRequires: perl(ExtUtils::MakeMaker) pkgconfig BuildRequires: python3-devel python3-docutils python3-extras python3-fixtures python3-iso8601 BuildRequires: python3-hypothesis python3-setuptools python3-testscenarios @@ -106,13 +103,7 @@ Subunit C bindings in a static library, for building statically linked test cases. %prep -%setup -qc -%patch0 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 +%autosetup -n %{name}-%{version} -S git fixtimestamp() { touch -r $1.orig $1 rm $1.orig @@ -251,6 +242,9 @@ popd %exclude %{_bindir}/%{name}-diff %changelog +* Mon Jul 12 2021 huangtianhua - 1.4.0-1 +- Upgrade to 1.4.0 and drop the patches which have been upstreamed + * Mon Feb 22 2021 wangxiyuan - 1.3.0-15 - CleanUp python2 residual content and backport a python3 known issue.