public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/rpkg] 1.70-1: Some patches:
@ 2026-08-10 21:44 
  0 siblings, 0 replies; only message in thread
From:  @ 2026-08-10 21:44 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/rpkg
            Branch : 1.70-1
            Commit : 66220ebdda358f01ebc592d5bd5ee4c6375ef8e8
            Author : Ondřej Nosek <onosek@redhat.com>
            Date   : 2022-10-10T20:04:05+00:00
            Stats  : +293/-1 in 3 file(s)
            URL    : https://src.fedoraproject.org/rpms/rpkg/c/66220ebdda358f01ebc592d5bd5ee4c6375ef8e8?branch=1.70-1

            Log:
            Some patches:

- Fixes for exploded SRPM layouts
- mockbuild: escape rpm command under mock

Signed-off-by: Ondřej Nosek <onosek@redhat.com>

---
diff --git a/0005-Fixes-for-exploded-SRPM-layouts.patch b/0005-Fixes-for-exploded-SRPM-layouts.patch
new file mode 100644
index 0000000..f2b57b3
--- /dev/null
+++ b/0005-Fixes-for-exploded-SRPM-layouts.patch
@@ -0,0 +1,227 @@
+From fc4dc6882c802e9a8b7ece3101033cb662928adf Mon Sep 17 00:00:00 2001
+From: Troy Dawson <tdawson@redhat.com>
+Date: Fri, 23 Sep 2022 14:38:34 -0700
+Subject: [PATCH 1/2] Fixes for exploded SRPM layouts
+
+sources_filename incorrectly set when using SRPMLayout.
+
+Fixes: #633
+JIRA: RHELCMP-9992
+Merges: https://pagure.io/rpkg/pull-request/634
+
+Signed-off-by: Troy Dawson <tdawson@redhat.com>
+---
+ pyrpkg/__init__.py    | 21 +++++++++++----------
+ pyrpkg/cli.py         |  2 +-
+ pyrpkg/sources.py     | 30 +++++++++++++++++++++++++-----
+ tests/test_cli.py     |  2 +-
+ tests/test_sources.py | 33 +++++++++++++++++++++++++++++++++
+ 5 files changed, 71 insertions(+), 17 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 1b6a0c4..a40fa5a 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1153,7 +1153,8 @@ class Commands(object):
+     def sources_filename(self):
+         if self.layout is None:
+             return os.path.join(self.path, 'sources')
+-        return os.path.join(self.path, self.layout.sources_file_template)
++        return os.path.join(
++            self.path, self.layout.sources_file_template.replace("{0.repo_name}", self.repo_name))
+ 
+     @property
+     def osbs_config_filename(self):
+@@ -2163,9 +2164,9 @@ class Commands(object):
+             self.log.info("sources file doesn't exist. Source files download skipped.")
+             return
+ 
+-        # Default to putting the files where the repository is
++        # Default to putting the files in the layout sourcedir
+         if not outdir:
+-            outdir = self.path
++            outdir = self.layout.sourcedir
+ 
+         sourcesf = SourcesFile(self.sources_filename, self.source_entry_type)
+ 
+@@ -2578,7 +2579,7 @@ class Commands(object):
+             cmd.append('--nocheck')
+         if self.quiet:
+             cmd.append('--quiet')
+-        cmd.extend(['-bc', os.path.join(self.path, self.spec)])
++        cmd.extend(['-bc', os.path.join(self.layout.specdir, self.spec)])
+         # Run the command
+         self._run_command(cmd)
+ 
+@@ -2657,7 +2658,7 @@ class Commands(object):
+         if buildrootdir:
+             cmd.extend(["--define", "_buildrootdir {0}".format(
+                 os.path.abspath(buildrootdir))])
+-        cmd.extend(['-bi', os.path.join(self.path, self.spec)])
++        cmd.extend(['-bi', os.path.join(self.layout.specdir, self.spec)])
+         # Run the command
+         self._run_command(cmd)
+         return
+@@ -2798,7 +2799,7 @@ class Commands(object):
+         if not hashtype == 'sha256':
+             cmd.extend(["--define", "_source_filedigest_algorithm %s" % hashtype,
+                         "--define", "_binary_filedigest_algorithm %s" % hashtype])
+-        specpath = os.path.join(self.path, self.spec)
++        specpath = os.path.join(self.layout.specdir, self.spec)
+         tmpdir = None
+         try:
+             if not self.uses_rpmautospec or not rpmautospec_process_distgit:
+@@ -3180,7 +3181,7 @@ class Commands(object):
+         if buildrootdir:
+             cmd.extend(["--define", "_buildrootdir {0}".format(
+                 os.path.abspath(buildrootdir))])
+-        cmd.extend(['--nodeps', '-bp', os.path.join(self.path, self.spec)])
++        cmd.extend(['--nodeps', '-bp', os.path.join(self.layout.specdir, self.spec)])
+         # Run the command
+         self._run_command(cmd)
+ 
+@@ -3238,7 +3239,7 @@ class Commands(object):
+         if not hashtype == 'sha256':
+             cmd.extend(["--define", "_source_filedigest_algorithm %s" % hashtype,
+                         "--define", "_binary_filedigest_algorithm %s" % hashtype])
+-        specpath = os.path.join(self.path, self.spec)
++        specpath = os.path.join(self.layout.specdir, self.spec)
+         tmpdir = None
+         try:
+             if not self.uses_rpmautospec or not rpmautospec_process_distgit:
+@@ -3262,7 +3263,7 @@ class Commands(object):
+         # Create a list for unused patches
+         unused = []
+         # Get the content of spec into memory for fast searching
+-        with open(os.path.join(self.path, self.spec), 'r') as f:
++        with open(os.path.join(self.layout.specdir, self.spec), 'r') as f:
+             data = f.read()
+         if six.PY2:
+             try:
+@@ -3340,7 +3341,7 @@ class Commands(object):
+         if buildrootdir:
+             cmd.extend(["--define", "_buildrootdir {0}".format(
+                 os.path.abspath(buildrootdir))])
+-        cmd.extend(['-bl', os.path.join(self.path, self.spec)])
++        cmd.extend(['-bl', os.path.join(self.layout.specdir, self.spec)])
+         # Run the command
+         self._run_command(cmd)
+ 
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 9694f14..b0a16fb 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -1484,7 +1484,7 @@ class cliClient(object):
+             'sources', help='Download source files',
+             description='Download source files')
+         sources_parser.add_argument(
+-            '--outdir', default=os.curdir,
++            '--outdir',
+             help='Directory to download files into (defaults to pwd)')
+         sources_parser.set_defaults(command=self.sources)
+ 
+diff --git a/pyrpkg/sources.py b/pyrpkg/sources.py
+index 858461d..cdd5275 100644
+--- a/pyrpkg/sources.py
++++ b/pyrpkg/sources.py
+@@ -67,15 +67,35 @@ class SourcesFile(object):
+             return self.entry_type(m.group('hashtype'), m.group('file'),
+                                    m.group('hash'))
+ 
+-        # Try falling back on the old format
++        # Try falling back on the old Fedora format
+         try:
+             hash, file = stripped.split('  ', 1)
+ 
+         except ValueError:
+-            raise MalformedLineError(
+-                'sources has invalid content: {0}\n'
+-                'Please note that sources file must not be modified manually.'
+-                .format(stripped))
++            # Try old Centos Format
++            try:
++                hash, file_path = stripped.split(' ', 1)
++                if len(hash) == 128:
++                    hashtype = 'sha512'
++                elif len(hash) == 64:
++                    hashtype = 'sha256'
++                elif len(hash) == 40:
++                    hashtype = 'sha1'
++                elif len(hash) == 32:
++                    hashtype = 'md5'
++                else:
++                    raise MalformedLineError(
++                        'sources has invalid content: {0}\n'
++                        'Please note that sources file must not be modified manually.'
++                        .format(stripped))
++                file = os.path.split(file_path)[1]
++                return self.entry_type(hashtype, file, hash)
++
++            except ValueError:
++                raise MalformedLineError(
++                    'sources has invalid content: {0}\n'
++                    'Please note that sources file must not be modified manually.'
++                    .format(stripped))
+ 
+         return self.entry_type('md5', file, hash)
+ 
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 97ae0ce..dd1399a 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -1579,7 +1579,7 @@ class TestSources(LookasideCacheMock, CliTestCase):
+         # NOTE: without --outdir, whatever to run sources command in package
+         # repository, sources file is downloaded into current working
+         # directory. Is this a bug, or need to improve?
+-        self.assertTrue(os.path.exists('readme.patch'))
++        self.assertTrue(os.path.exists(os.path.join(self.cloned_repo_path, 'readme.patch')))
+ 
+     def test_sources_to_outdir(self):
+         cli_cmd = ['rpkg', '--path', self.cloned_repo_path,
+diff --git a/tests/test_sources.py b/tests/test_sources.py
+index cfacc51..f041373 100644
+--- a/tests/test_sources.py
++++ b/tests/test_sources.py
+@@ -66,6 +66,39 @@ class SourcesFileTestCase(unittest.TestCase):
+         self.assertEqual(entry.file, 'afile')
+         self.assertEqual(str(entry), newline)
+ 
++    def test_parse_old_style_centos_line(self):
++        s = sources.SourcesFile(self.sourcesfile, 'old')
++
++        my_hash = 'abababab01010101010101010101010101010101'
++        my_file = 'SUBDIR/afile'
++
++        line = '{0} {1}\n'.format(my_hash, my_file)
++        newline = '{0}  {1}\n'.format(my_hash, 'afile')
++        entry = s.parse_line(line)
++
++        self.assertTrue(isinstance(entry, sources.SourceFileEntry))
++        self.assertEqual(entry.hashtype, 'sha1')
++        self.assertEqual(entry.hash, my_hash)
++        self.assertEqual(entry.file, 'afile')
++        self.assertEqual(str(entry), newline)
++
++    def test_migrate_old_style_centos_line(self):
++        s = sources.SourcesFile(self.sourcesfile, 'bsd')
++
++        my_hash = 128 * 'x'
++        my_file = 'SUBDIR/afile'
++
++        line = '{0} {1}\n'.format(my_hash, my_file)
++        newline = '{0}  {1}\n'.format(my_hash, 'afile')
++        newline = 'SHA512 (afile) = {0}\n'.format(my_hash)
++        entry = s.parse_line(line)
++
++        self.assertTrue(isinstance(entry, sources.SourceFileEntry))
++        self.assertEqual(entry.hashtype, 'sha512')
++        self.assertEqual(entry.hash, my_hash)
++        self.assertEqual(entry.file, 'afile')
++        self.assertEqual(str(entry), newline)
++
+     def test_parse_entry_line(self):
+         s = sources.SourcesFile(self.sourcesfile, 'bsd')
+ 
+-- 
+2.37.3
+

diff --git a/0006-mockbuild-escape-rpm-command-under-mock.patch b/0006-mockbuild-escape-rpm-command-under-mock.patch
new file mode 100644
index 0000000..e0d97e9
--- /dev/null
+++ b/0006-mockbuild-escape-rpm-command-under-mock.patch
@@ -0,0 +1,59 @@
+From 7cefc5fe35a514637b1b0b68e044f0de0d188e22 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 5 Oct 2022 03:45:22 +0200
+Subject: [PATCH 2/2] mockbuild: escape rpm command under mock
+
+Arguments of the 'rpm' part after 'mock --shell' needs to be escaped.
+Example:
+
+  mock -r xxx --chroot ... --shell rpm --define '_sourcedir xxx' ...
+
+JIRA: RHELCMP-10150
+Resolves: rhbz#2130349
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index a40fa5a..1595344 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -22,6 +22,7 @@ import os
+ import posixpath
+ import random
+ import re
++import shlex
+ import shutil
+ import subprocess
+ import sys
+@@ -43,13 +44,14 @@ from six.moves.urllib.parse import urljoin
+ 
+ from pyrpkg import layout
+ from pyrpkg.errors import (AlreadyUploadedError, HashtypeMixingError,
+-                           UnknownTargetError, rpkgAuthError, rpkgError, NoSourcesError)
++                           NoSourcesError, UnknownTargetError, rpkgAuthError,
++                           rpkgError)
+ from pyrpkg.lookaside import CGILookasideCache
+ from pyrpkg.sources import SourcesFile
+ from pyrpkg.spec import SpecFile
+ from pyrpkg.utils import (cached_property, extract_srpm, find_me,
+                           is_file_tracked, is_lookaside_eligible_file,
+-                          spec_file_processed_by_rpmautospec, log_result)
++                          log_result, spec_file_processed_by_rpmautospec)
+ 
+ from .gitignore import GitIgnore
+ 
+@@ -813,6 +815,8 @@ class Commands(object):
+         # listing for each subpackage.  We only care about the first.
+         rpm_cmd.extend(["-q", "--qf", "??%{NAME} %{EPOCH} %{VERSION} %{RELEASE}??",
+                         "--specfile", "%s" % os.path.join(tmp_root, self.spec)])
++        # escape whole 'rpm' command because it will be executed under mock command
++        rpm_cmd = [shlex.quote(item) for item in rpm_cmd]
+         main_cmd = cmd + ['--shell'] + rpm_cmd \
+             + ['> ' + os.path.join(tmp_root, 'output')]
+ 
+-- 
+2.37.3
+

diff --git a/rpkg.spec b/rpkg.spec
index 223f116..b6f1558 100644
--- a/rpkg.spec
+++ b/rpkg.spec
@@ -1,6 +1,6 @@
 Name:           rpkg
 Version:        1.65
-Release:        2%{?dist}
+Release:        3%{?dist}
 
 Summary:        Python library for interacting with rpm+git
 License:        GPLv2+ and LGPLv2
@@ -38,6 +38,8 @@ Patch2:         0002-Remove-pytest-coverage-execution.patch
 Patch3:         0003-Remove-Environment-Markers-syntax.patch
 %endif
 Patch4:         0004-fedpkg-local-does-not-show-rpmbuild-output.patch
+Patch5:         0005-Fixes-for-exploded-SRPM-layouts.patch
+Patch6:         0006-mockbuild-escape-rpm-command-under-mock.patch
 
 %description
 Python library for interacting with rpm+git
@@ -250,6 +252,10 @@ example_cli_dir=$RPM_BUILD_ROOT%{_datadir}/%{name}/examples/cli
 
 
 %changelog
+* Mon Oct 10 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-3
+- Patch: Fixes for exploded SRPM layouts
+- Patch: mockbuild: escape rpm command under mock
+
 * Wed Sep 7 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-2
 - Patch: `fedpkg local` does not show rpmbuild output
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-10 21:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-10 21:44 [rpms/rpkg] 1.70-1: Some patches: 

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox