Control: tags -1 + patch

Hi Guido,

* Guido Günther <a...@sigxcpu.org> [2021-01-27 12:08]:
Hi,
On Wed, Jan 20, 2021 at 09:37:56PM +0100, Lucas Nussbaum wrote:
Source: git-buildpackage
Version: 0.9.21
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20210120 ftbfs-bullseye

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

That is basically the top of the iceberg. Besides lots of places now
returning strings instead of bytes rpm became stricter in spec file
parsing breaking the test suite (and usage).

I fixed those in the attached patches.
Note that I was not able to reproduce #980256 but explicitly tested on armhf and added an extra patch, so that bug should be fine.
IMHO #914314 could be downgraded again, I did not look into fixing it.

I can do an NMU as well if you are short on time.
Would be happy to see a new git-buildpackage transition to testing.

Cheers Jochen
From bce1d5f6d2e94788aea48731bb0c426e648dd673 Mon Sep 17 00:00:00 2001
From: Jochen Sprickerhof <jspri...@debian.org>
Date: Sat, 30 Jan 2021 15:02:58 +0100
Subject: [PATCH 1/5] Stop decoding strings (not needed in Python 3)

---
 gbp/rpm/__init__.py | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/gbp/rpm/__init__.py b/gbp/rpm/__init__.py
index 61d9d35..1d7a9ef 100644
--- a/gbp/rpm/__init__.py
+++ b/gbp/rpm/__init__.py
@@ -34,11 +34,6 @@ from gbp.rpm.linkedlist import LinkedList
 from gbp.rpm.lib_rpm import librpm, get_librpm_log
 
 
-def _decode(s):
-    if s is not None:
-        return s.decode()
-
-
 class NoSpecError(Exception):
     """Spec file parsing error"""
     pass
@@ -79,8 +74,8 @@ class SrcRpmFile(object):
     @property
     def version(self):
         """Get the (downstream) version of the RPM package"""
-        version = dict(upstreamversion=self.rpmhdr[librpm.RPMTAG_VERSION].decode(),
-                       release=self.rpmhdr[librpm.RPMTAG_RELEASE].decode())
+        version = dict(upstreamversion=self.rpmhdr[librpm.RPMTAG_VERSION],
+                       release=self.rpmhdr[librpm.RPMTAG_RELEASE])
         if self.rpmhdr[librpm.RPMTAG_EPOCH] is not None:
             version['epoch'] = str(self.rpmhdr[librpm.RPMTAG_EPOCH])
         return version
@@ -88,17 +83,17 @@ class SrcRpmFile(object):
     @property
     def name(self):
         """Get the name of the RPM package"""
-        return self.rpmhdr[librpm.RPMTAG_NAME].decode()
+        return self.rpmhdr[librpm.RPMTAG_NAME]
 
     @property
     def upstreamversion(self):
         """Get the upstream version of the RPM package"""
-        return self.rpmhdr[librpm.RPMTAG_VERSION].decode()
+        return self.rpmhdr[librpm.RPMTAG_VERSION]
 
     @property
     def packager(self):
         """Get the packager of the RPM package"""
-        return _decode(self.rpmhdr[librpm.RPMTAG_PACKAGER])
+        return self.rpmhdr[librpm.RPMTAG_PACKAGER]
 
     def unpack(self, dest_dir):
         """
@@ -168,13 +163,13 @@ class SpecFile(object):
 
         # Other initializations
         source_header = self._specinfo.packages[0].header
-        self.name = source_header[librpm.RPMTAG_NAME].decode()
-        self.upstreamversion = source_header[librpm.RPMTAG_VERSION].decode()
-        self.release = source_header[librpm.RPMTAG_RELEASE].decode()
+        self.name = source_header[librpm.RPMTAG_NAME]
+        self.upstreamversion = source_header[librpm.RPMTAG_VERSION]
+        self.release = source_header[librpm.RPMTAG_RELEASE]
         # rpm-python returns epoch as 'long', convert that to string
         self.epoch = str(source_header[librpm.RPMTAG_EPOCH]) \
             if source_header[librpm.RPMTAG_EPOCH] is not None else None
-        self.packager = _decode(source_header[librpm.RPMTAG_PACKAGER])
+        self.packager = source_header[librpm.RPMTAG_PACKAGER]
         self._tags = {}
         self._special_directives = defaultdict(list)
         self._gbp_tags = defaultdict(list)
-- 
2.30.0

From 9b24dba68476ffac638bfba9561a810528519646 Mon Sep 17 00:00:00 2001
From: Jochen Sprickerhof <jspri...@debian.org>
Date: Sat, 30 Jan 2021 15:03:25 +0100
Subject: [PATCH 2/5] Open tempfile in text mode

---
 gbp/rpm/lib_rpm.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gbp/rpm/lib_rpm.py b/gbp/rpm/lib_rpm.py
index 5fc0354..4ef741d 100644
--- a/gbp/rpm/lib_rpm.py
+++ b/gbp/rpm/lib_rpm.py
@@ -31,7 +31,7 @@ except ImportError:
     import rpm as librpm
 
 # Module initialization
-_rpmlog = tempfile.NamedTemporaryFile(prefix='gbp_rpmlog')
+_rpmlog = tempfile.NamedTemporaryFile(mode='w+', prefix='gbp_rpmlog')
 _rpmlogfd = _rpmlog.file
 librpm.setVerbosity(librpm.RPMLOG_INFO)
 librpm.setLogFile(_rpmlogfd)
-- 
2.30.0

From 212d784e14382e3e0f6198fb530db266557c2afe Mon Sep 17 00:00:00 2001
From: Jochen Sprickerhof <jspri...@debian.org>
Date: Sat, 30 Jan 2021 16:02:59 +0100
Subject: [PATCH 3/5] Fix tags in rpm spec files

Patches are named similar to sources, counting from 0.

https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s03s04.html
---
 tests/20_test_rpm.py                       | 4 ++--
 tests/data/rpm/specs/gbp-test-tags.spec    | 2 +-
 tests/data/rpm/specs/gbp-test-updates.spec | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/20_test_rpm.py b/tests/20_test_rpm.py
index a2cd5e0..c261c45 100644
--- a/tests/20_test_rpm.py
+++ b/tests/20_test_rpm.py
@@ -231,7 +231,7 @@ class TestSpecFile(RpmTestBase):
         spec.protected('_delete_tag')('source', 0)
         eq_(spec.sources(), {})
         spec.protected('_delete_tag')('patch', 0)
-        spec.protected('_delete_tag')('patch', -1)
+        spec.protected('_delete_tag')('patch', 1)
         eq_(spec.protected('_patches')(), {})
         prev = spec.protected('_delete_tag')('invalidtag', None)
 
@@ -314,7 +314,7 @@ class TestSpecFile(RpmTestBase):
             for patch in spec.protected('_tags')['patch']['lines']:
                 patches[patch['num']] = patch['linevalue']
 
-            eq_(patches, {0: 'my_patch0', -1: 'my_patch'})
+            eq_(patches, {0: 'my_patch0', 1: 'my_patch'})
 
     def test_patch_series(self):
         """Test the getting the patches as a patchseries"""
diff --git a/tests/data/rpm/specs/gbp-test-tags.spec b/tests/data/rpm/specs/gbp-test-tags.spec
index d0f2e9e..19efe9f 100644
--- a/tests/data/rpm/specs/gbp-test-tags.spec
+++ b/tests/data/rpm/specs/gbp-test-tags.spec
@@ -33,7 +33,7 @@ Packager:       my_packager
 Url:            my_url
 Vcs:            my_vcs
 Source:         my_source
-Patch:          my_%patch_fn_base
+Patch1:         my_%patch_fn_base
 Patch0:         my_%{patch_fn_base}0
 Nosource:       0
 Nopatch:        0
diff --git a/tests/data/rpm/specs/gbp-test-updates.spec b/tests/data/rpm/specs/gbp-test-updates.spec
index e68f4b2..30ccb30 100644
--- a/tests/data/rpm/specs/gbp-test-updates.spec
+++ b/tests/data/rpm/specs/gbp-test-updates.spec
@@ -17,7 +17,7 @@ Packager:       my_packager
 Url:            my_url
 Vcs:            my_vcs
 Source:         my_source
-Patch:          my_%patch_fn_base
+Patch1:         my_%patch_fn_base
 Patch0:         my_%{patch_fn_base}0
 Nosource:       0
 Nopatch:        0
-- 
2.30.0

From 8d8e05f91a13a0fc717625cb0d9c86a0c706d831 Mon Sep 17 00:00:00 2001
From: Jochen Sprickerhof <jspri...@debian.org>
Date: Sat, 30 Jan 2021 16:18:10 +0100
Subject: [PATCH 4/5] Define %python_sitelib for autopkgtest

The rpm package no longer defines this, instead there is python3_sitelib
in /usr/lib/rpm/macros.d/macros.python3 provided by the
python3-rpm-macros package (not in Debian).
---
 debian/tests/smoke-rpm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/debian/tests/smoke-rpm b/debian/tests/smoke-rpm
index 0380479..257bcf8 100755
--- a/debian/tests/smoke-rpm
+++ b/debian/tests/smoke-rpm
@@ -25,5 +25,6 @@ if python3 -c "import setuptools"; then
                        --git-export-dir="$GBP_TEMPDIR" \
                        -D'%__python3 /usr/bin/python3' \
                        -D'%__python /usr/bin/python3' \
+                       -D'%python_sitelib %(%{__python3} -Ic "from distutils.sysconfig import get_python_lib; print(get_python_lib())")' \
                        -bb --nodeps
 fi
-- 
2.30.0

From 4dd262be810a08354dca21217227659edf5bb9a6 Mon Sep 17 00:00:00 2001
From: Jochen Sprickerhof <jspri...@debian.org>
Date: Sat, 30 Jan 2021 20:38:05 +0100
Subject: [PATCH 5/5] Set %_arch in autopkgtest

Seems to be needed on armhf.
---
 debian/tests/smoke-rpm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/debian/tests/smoke-rpm b/debian/tests/smoke-rpm
index 257bcf8..b348160 100755
--- a/debian/tests/smoke-rpm
+++ b/debian/tests/smoke-rpm
@@ -26,5 +26,6 @@ if python3 -c "import setuptools"; then
                        -D'%__python3 /usr/bin/python3' \
                        -D'%__python /usr/bin/python3' \
                        -D'%python_sitelib %(%{__python3} -Ic "from distutils.sysconfig import get_python_lib; print(get_python_lib())")' \
+                       -D'%_arch noarch' \
                        -bb --nodeps
 fi
-- 
2.30.0

Attachment: signature.asc
Description: PGP signature

Reply via email to