diff options
| author | CoprDistGit <infra@openeuler.org> | 2025-03-23 09:45:02 +0000 | 
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2025-03-23 09:45:02 +0000 | 
| commit | 388caf1db3e96321693dcff28c53b97ef93aa57b (patch) | |
| tree | d69caf59de3465277fab0a6f67849fee9d5a8b07 | |
| parent | 36135071814baf52814dc88b8ac911002dd9d5e9 (diff) | |
automatic import of rpkg
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | 0002-Remove-pytest-coverage-execution.patch | 26 | ||||
| -rw-r--r-- | 0004-fedpkg-local-does-not-show-rpmbuild-output.patch | 114 | ||||
| -rw-r--r-- | 0005-Fixes-for-exploded-SRPM-layouts.patch | 227 | ||||
| -rw-r--r-- | 0006-mockbuild-escape-rpm-command-under-mock.patch | 59 | ||||
| -rw-r--r-- | rpkg.spec | 28 | ||||
| -rw-r--r-- | sources | 2 | 
7 files changed, 19 insertions, 438 deletions
@@ -1 +1,2 @@  /rpkg-1.65.tar.gz +/rpkg-1.67.tar.gz diff --git a/0002-Remove-pytest-coverage-execution.patch b/0002-Remove-pytest-coverage-execution.patch index fbc9cb7..d746c7b 100644 --- a/0002-Remove-pytest-coverage-execution.patch +++ b/0002-Remove-pytest-coverage-execution.patch @@ -1,25 +1,11 @@ -From 8bf7c3b1336738ed5938f679fc4d450c3f8f0a62 Mon Sep 17 00:00:00 2001 -From: Ondrej Nosek <onosek@redhat.com> -Date: Wed, 7 Sep 2022 00:11:56 +0200 -Subject: [PATCH] Remove pytest coverage execution - -Signed-off-by: Ondrej Nosek <onosek@redhat.com> ---- - setup.cfg | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/setup.cfg b/setup.cfg -index 5e29c2f..4fe73fa 100644 ---- a/setup.cfg -+++ b/setup.cfg -@@ -5,7 +5,6 @@ test = pytest +--- a/setup.cfg	2023-12-11 18:21:45.586656058 +0100 ++++ b/setup.cfg	2024-06-26 02:33:53.017645612 +0200 +@@ -5,8 +5,4 @@   max-line-length = 100   [tool:pytest] +-# additional values for 'addopts' can be: +-# --cov-report html +-# -ra -q  -addopts = --cov=pyrpkg   testpaths = tests -  - [egg_info] ---  -2.37.2 - diff --git a/0004-fedpkg-local-does-not-show-rpmbuild-output.patch b/0004-fedpkg-local-does-not-show-rpmbuild-output.patch deleted file mode 100644 index 30f3e8e..0000000 --- a/0004-fedpkg-local-does-not-show-rpmbuild-output.patch +++ /dev/null @@ -1,114 +0,0 @@ -From fef9715d4acb690dff1cc9f08545721d69bf208d Mon Sep 17 00:00:00 2001 -From: Ondrej Nosek <onosek@redhat.com> -Date: Wed, 7 Sep 2022 19:53:05 +0200 -Subject: [PATCH] `fedpkg local` does not show rpmbuild output - -subprocess.communicate() method didn't allow a direct pipe output -to the shell and therefore wasn't shown to the user. Switched to -check_call method. -Additionally, the correct exit code is returned when the first part -of the command fails. - -Resolves: rhbz#2124809 -JIRA: RHELCMP-9960 - -Signed-off-by: Ondrej Nosek <onosek@redhat.com> ---- - pyrpkg/__init__.py | 12 +++++------- - tests/test_cli.py  | 26 ++++++++++++++------------ - 2 files changed, 19 insertions(+), 19 deletions(-) - -diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py -index a672dd2..1b6a0c4 100644 ---- a/pyrpkg/__init__.py -+++ b/pyrpkg/__init__.py -@@ -2818,14 +2818,12 @@ class Commands(object): -                     stdout=subprocess.PIPE, -                     stderr=subprocess.STDOUT -                 ) --                tee = subprocess.Popen( -+                subprocess.check_call( -                     ("tee", logfile), --                    stdin=rpmbuild.stdout, --                    stdout=subprocess.PIPE) --                rpmbuild.stdout.close() --                tee.communicate() -- --            except subprocess.SubprocessError: -+                    stdin=rpmbuild.stdout) -+                rpmbuild.communicate()  # without this, 'returncode' is None (=unfinished process) -+                sys.exit(rpmbuild.returncode) -+            except subprocess.CalledProcessError: -                 raise rpkgError(debug_cmd) -         finally: -             self._cleanup_tmp_dir(tmpdir) -diff --git a/tests/test_cli.py b/tests/test_cli.py -index 254bfac..97ae0ce 100644 ---- a/tests/test_cli.py -+++ b/tests/test_cli.py -@@ -846,10 +846,12 @@ class TestLocal(CliTestCase): -  -     create_repo_per_test = False -  -+    @patch('sys.exit') -+    @patch('pyrpkg.subprocess.check_call') -     @patch('subprocess.Popen') -     @patch('pyrpkg.Commands.rel') -     @patch('pyrpkg.Commands.ver') --    def test_local(self, ver, rel, popen): -+    def test_local(self, ver, rel, popen, check_call, system_exit): -         cli_cmd = ['rpkg', '--path', self.cloned_repo_path, '--release', 'rhel-6', 'local'] -  -         rel.__str__ = Mock() -@@ -868,20 +870,21 @@ class TestLocal(CliTestCase): -         popen.assert_has_calls([ -             # at the beginning of this list, there are other calls from load_nameverrel -             call(rpmbuild, stdout=-1, stderr=-2), --            # I can't match this call - stdin=Mock has it's dynamic id. Therefore any_oreder=True --            # call(tee, stdin=Mock(), stdout=-1),  # check call [-3] separately --            call().stdout.close(), -             call().communicate(), --        ], any_order=True) -+        ], any_order=False) -  --        tee_call_arg = popen.mock_calls[-3] -+        tee_call_arg = check_call.mock_calls[0] -         if 'args' in dir(tee_call_arg):  # doesn't work in <=py36 -             self.assertEqual(tee, tee_call_arg.args[0]) -  -+        system_exit.assert_called_once() -+ -+    @patch('sys.exit') -+    @patch('pyrpkg.subprocess.check_call') -     @patch('subprocess.Popen') -     @patch('pyrpkg.Commands.rel') -     @patch('pyrpkg.Commands.ver') --    def test_local_with_options(self, ver, rel, popen): -+    def test_local_with_options(self, ver, rel, popen, check_call, system_exit): -         builddir = os.path.join(self.cloned_repo_path, 'this-builddir') -         buildrootdir = os.path.join(self.cloned_repo_path, 'this-buildrootdir') -  -@@ -913,16 +916,15 @@ class TestLocal(CliTestCase): -         popen.assert_has_calls([ -             # at the beginning of this list, there are other calls from load_nameverrel -             call(rpmbuild, stdout=-1, stderr=-2), --            # I can't match this call - stdin=Mock has it's dynamic id. Therefore any_oreder=True --            # call(tee, stdin=Mock(), stdout=-1),  # check call [-3] separately --            call().stdout.close(), -             call().communicate(), --        ], any_order=True) -+        ], any_order=False) -  --        tee_call_arg = popen.mock_calls[-3] -+        tee_call_arg = check_call.mock_calls[0] -         if 'args' in dir(tee_call_arg):  # doesn't work in <=py36 -             self.assertEqual(tee, tee_call_arg.args[0]) -  -+        system_exit.assert_called_once() -+ -  - class TestVerifyFiles(CliTestCase): -  ---  -2.37.2 - diff --git a/0005-Fixes-for-exploded-SRPM-layouts.patch b/0005-Fixes-for-exploded-SRPM-layouts.patch deleted file mode 100644 index f2b57b3..0000000 --- a/0005-Fixes-for-exploded-SRPM-layouts.patch +++ /dev/null @@ -1,227 +0,0 @@ -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 deleted file mode 100644 index e0d97e9..0000000 --- a/0006-mockbuild-escape-rpm-command-under-mock.patch +++ /dev/null @@ -1,59 +0,0 @@ -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 - @@ -1,9 +1,9 @@  Name:           rpkg -Version:        1.65 +Version:        1.67  Release:        1  Summary:        Python library for interacting with rpm+git -License:        GPLv2+ and LGPLv2 +License:        GPL-2.0-or-later AND LicenseRef-Callaway-LGPLv2  URL:            https://pagure.io/rpkg  BuildArch:      noarch  Source0:        https://pagure.io/releases/rpkg/%{name}-%{version}.tar.gz @@ -18,21 +18,9 @@ Source1:        rpkg.rpmlintrc    PYTHONDONTWRITEBYTECODE=1\\\    %{?__pytest_addopts:PYTEST_ADDOPTS="${PYTEST_ADDOPTS:-} %{__pytest_addopts}"}\\\    %__pytest} - -# Fix for bug 1579367 -# Due to https://pagure.io/koji/issue/912, python[23]-koji package does not -# have egginfo. -# rpm-py-installer is required as a proxy to install RPM python binding -# library, so rpm is the actual requirement that must be present in the -# requires.txt. But, rpkg has to work in all active Fedora and EPEL releases, -# and there is only old rpm-python package in EL6 and 7, so just simply to -# remove rpm-py-installer for now.  Patch0:         remove-koji-and-rpm-py-installer-from-requires.patch  Patch1:         0001-Do-not-use-pytest-related-dependencies-temporarily.patch  Patch2:         0002-Remove-pytest-coverage-execution.patch -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 @@ -41,6 +29,8 @@ Python library for interacting with rpm+git  Summary:        %{summary}  BuildRequires:  python3-devel +BuildRequires:  python3-pip +BuildRequires:  python3-hatchling  BuildRequires:  python3-GitPython  BuildRequires:  python3-koji >= 1.24  BuildRequires:  python3-libmodulemd @@ -98,11 +88,13 @@ Common files for python2-%{name} and python3-%{name}.  sed -i -n '/extras_require/,/}/!p' setup.py  %build -%py3_build +%pyproject_build +  %install -%py3_install +%pyproject_install +  # Create configuration directory to holding downstream clients config files  # that are built on top of rpkg @@ -128,12 +120,14 @@ example_cli_dir=$RPM_BUILD_ROOT%{_datadir}/%{name}/examples/cli  %doc README.rst CHANGELOG.rst  %license COPYING COPYING-koji LGPL  %{python3_sitelib}/pyrpkg -%{python3_sitelib}/%{name}-%{version}-py*.egg-info +%{python3_sitelib}/%{name}-%{version}.dist-info  %files common  %{_datadir}/%{name}  %{_sysconfdir}/rpkg  %changelog +* Sun Mar 23 2025 lichaoran <pkwarcraft@hotmail.com> - 1.67-1 +- Upgrade to 1.67  * Fri Mar 24 2023 lichaoran <pkwarcraft@hotmail.com> - 1.65-1  - Initial package @@ -1 +1 @@ -c863a3a59686ee280eb686ede22b5747  rpkg-1.65.tar.gz +ee44e31788a4732016527a64f0e913fe  rpkg-1.67.tar.gz  | 
