diff --git a/1840.patch b/1840.patch deleted file mode 100644 index 32afed23..00000000 --- a/1840.patch +++ /dev/null @@ -1,122 +0,0 @@ -From ab11e0e4a9e0b70e1b78399931d357f92f3a27aa Mon Sep 17 00:00:00 2001 -From: Lubomír Sedlář -Date: May 21 2025 13:45:18 +0000 -Subject: linker: Drop ability to link dirs recursively - - -Nothing in the code base uses this functionality, and the semantins are -not well defined anyway when it comes to symlinks. - -Now the tests are failing in Python 3.14 rebuild when hardlinking -symlinks. Rather than trying to fix the unused code, we could just drop -it. - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2367780 -Signed-off-by: Lubomír Sedlář - ---- - -diff --git a/pungi/linker.py b/pungi/linker.py -index 0bcadc4..097e52b 100644 ---- a/pungi/linker.py -+++ b/pungi/linker.py -@@ -228,20 +228,7 @@ class Linker(kobo.log.LoggingBase): - raise ValueError("Unknown link_type: %s" % link_type) - - def link(self, src, dst, link_type="hardlink-or-copy"): -- """Link directories recursively.""" -- if os.path.isfile(src) or os.path.islink(src): -- self._link_file(src, dst, link_type) -- return -- -- if os.path.isfile(dst): -- raise OSError(errno.EEXIST, "File exists") -- -- if not self.test: -- if not os.path.exists(dst): -- makedirs(dst) -- shutil.copystat(src, dst) -+ if os.path.isdir(src): -+ raise RuntimeError("Linking directories recursively is not supported") - -- for i in os.listdir(src): -- src_path = os.path.join(src, i) -- dst_path = os.path.join(dst, i) -- self.link(src_path, dst_path, link_type) -+ self._link_file(src, dst, link_type) -diff --git a/tests/test_linker.py b/tests/test_linker.py -index 87c5a3c..7dcd74d 100644 ---- a/tests/test_linker.py -+++ b/tests/test_linker.py -@@ -280,70 +280,3 @@ class TestLinkerLink(TestLinkerBase): - self.file2, - link_type="hardlink-or-copy", - ) -- -- def test_link_dir_hardlink(self): -- self.linker.link(self.src_dir, self.dst_dir, link_type="hardlink") -- self.assertTrue(os.path.isfile(self.dst_file1)) -- self.assertTrue(self.same_inode(self.file1, self.dst_file1)) -- self.assertTrue(self.same_inode(self.file3, self.dst_file3)) -- self.assertSameStat( -- os.path.dirname(self.file3), os.path.dirname(self.dst_file3) -- ) -- -- # always preserve symlinks -- self.assertEqual(os.readlink(self.dst_symlink1), "../file1") -- self.assertEqual(os.readlink(self.dst_symlink2), "subdir") -- self.assertEqual(os.readlink(self.dst_symlink3), "does-not-exist") -- -- def test_link_dir_copy(self): -- self.linker.link(self.src_dir, self.dst_dir, link_type="copy") -- self.assertTrue(os.path.isfile(self.dst_file1)) -- self.assertFalse(self.same_inode(self.file1, self.dst_file1)) -- self.assertFalse(self.same_inode(self.file3, self.dst_file3)) -- self.assertSameStat( -- os.path.dirname(self.file3), os.path.dirname(self.dst_file3) -- ) -- -- # always preserve symlinks -- self.assertEqual(os.readlink(self.dst_symlink1), "../file1") -- self.assertEqual(os.readlink(self.dst_symlink2), "subdir") -- self.assertEqual(os.readlink(self.dst_symlink3), "does-not-exist") -- -- def test_link_dir_copy_test_mode(self): -- # turn test mode on -- self.linker = linker.Linker(logger=self.logger, test=True) -- self.linker.link(self.src_dir, self.dst_dir, link_type="copy") -- -- # dst_dir should not even exist -- self.assertFalse(os.path.isdir(self.dst_dir)) -- -- def test_link_dir_symlink(self): -- self.linker.link(self.src_dir, self.dst_dir, link_type="symlink") -- self.assertTrue(os.path.isfile(self.dst_file1)) -- self.assertTrue(os.path.islink(self.dst_file1)) -- self.assertTrue(os.path.isdir(os.path.dirname(self.file3))) -- -- # always preserve symlinks -- self.assertEqual(os.readlink(self.dst_symlink1), "../file1") -- self.assertEqual(os.readlink(self.dst_symlink2), "subdir") -- self.assertEqual(os.readlink(self.dst_symlink3), "does-not-exist") -- -- def test_link_dir_abspath_symlink(self): -- self.linker.link(self.src_dir, self.dst_dir, link_type="abspath-symlink") -- self.assertTrue(os.path.isfile(self.dst_file1)) -- self.assertTrue(os.path.islink(self.dst_file1)) -- self.assertEqual(os.readlink(self.dst_file1), self.file1) -- self.assertSameStat( -- os.path.dirname(self.file3), os.path.dirname(self.dst_file3) -- ) -- self.assertTrue(os.path.isdir(os.path.dirname(self.file3))) -- -- # always preserve symlinks -- self.assertEqual(os.readlink(self.dst_symlink1), "../file1") -- self.assertEqual(os.readlink(self.dst_symlink2), "subdir") -- self.assertEqual(os.readlink(self.dst_symlink3), "does-not-exist") -- -- def test_copy_preserve_hardlinks(self): -- self.assertTrue(self.same_inode(self.file1, self.hardlink1)) -- self.linker.link(self.src_dir, self.dst_dir, link_type="copy") -- self.assertTrue(self.same_inode(self.dst_file1, self.dst_hardlink1)) - diff --git a/pungi.spec b/pungi.spec index b0bddeec..cfe4186a 100644 --- a/pungi.spec +++ b/pungi.spec @@ -1,21 +1,17 @@ -%{?python_enable_dependency_generator} - Name: pungi -Version: 4.9.2 -Release: 3%{?dist}.alma.1 +Version: 4.9.3 +Release: 1%{?dist}.alma.1 Summary: Distribution compose tool License: GPL-2.0-only URL: https://pagure.io/pungi Source0: %{name}-%{version}.tar.bz2 -Patch: https://pagure.io/pungi/pull-request/1840.patch BuildRequires: make BuildRequires: python3-pytest # replaced by unittest.mock # BuildRequires: python3-mock BuildRequires: python3-devel -BuildRequires: python3-setuptools BuildRequires: python3-productmd >= 1.33 BuildRequires: python3-kobo-rpmlib >= 0.18.0 BuildRequires: createrepo_c >= 0.20.1 @@ -121,8 +117,11 @@ no guarantees about API stability. %prep %autosetup -p1 +%generate_buildrequires +%pyproject_buildrequires + %build -%py3_build +%pyproject_wheel cd doc make epub SPHINXBUILD=/usr/bin/sphinx-build-3 make text SPHINXBUILD=/usr/bin/sphinx-build-3 @@ -130,7 +129,7 @@ make man SPHINXBUILD=/usr/bin/sphinx-build-3 gzip _build/man/pungi.1 %install -%py3_install +%pyproject_install %{__install} -d %{buildroot}/var/cache/pungi/createrepo_c %{__install} -d %{buildroot}%{_mandir}/man1 %{__install} -m 0644 doc/_build/man/pungi.1.gz %{buildroot}%{_mandir}/man1 @@ -152,13 +151,13 @@ gzip _build/man/pungi.1 %{_bindir}/%{name}-make-ostree %{_mandir}/man1/pungi.1.gz %{_datadir}/pungi -%{_localstatedir}/cache/pungi +%dir %{_localstatedir}/cache/pungi %dir %attr(1777, root, root) %{_localstatedir}/cache/pungi/createrepo_c %{_tmpfilesdir}/pungi-clean-cache.conf %files -n python3-%{name} %{python3_sitelib}/%{name} -%{python3_sitelib}/%{name}-%{version}-py%{python3_version}.egg-info +%{python3_sitelib}/%{name}-%{version}.dist-info %files utils %{python3_sitelib}/%{name}_utils @@ -173,6 +172,14 @@ gzip _build/man/pungi.1 %{_bindir}/%{name}-cache-cleanup %changelog +* Thu Jun 12 2025 Lubomír Sedlář - 4.9.3-1 +- Recognize wsl2 images produced by koji (lsedlar) +- Specify data_files with relative paths (lsedlar) +- Crossreference `koji_cache` from the Koji cache page (ahills) +- Add documentation for `koji_cache` configuration (ahills) +- Record exceptions for top level OTel span (lsedlar) +- Update spec to match current python packaging guidelines + * Wed Jun 04 2025 Python Maint - 4.9.2-3 - Rebuilt for Python 3.14 diff --git a/sources b/sources index 46ddc04a..b86ddb6c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (pungi-4.9.2.tar.bz2) = dce9c51f8c9a7441e6182e81120cf4cb770ece5b840a96359cefa709576578960efe1eb983feb88bd92e3cb98414bc29b49b631c11b2bd1adc1ea30aa671a31c +SHA512 (pungi-4.9.3.tar.bz2) = ec86c61d28e6927fd2a8bb2655efcd2e1774aed95e2e0bf92e30525e25ec7322bea8589c2dcf610d9ba1db9dd002d5e5d4152e41e45e110253bf14b63af32428