From d87cb37fa2fea2ed535b9085a1f4c607083e1c2e Mon Sep 17 00:00:00 2001 From: Ondrej Nosek Date: Tue, 4 Apr 2023 01:40:23 +0200 Subject: [PATCH 1/6] import_srpm: allow pre-generated srpms When active, do not care specfile in the srpm is processed by rpmautospec. Can be activated only directly via pyrpkg 'Commands' object. Relates: https://github.com/fedora-copr/copr/issues/2317 Fixes: #655 RHELCMP-11085 Signed-off-by: Ondrej Nosek --- pyrpkg/__init__.py | 6 +++++- tests/test_cli.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py index 9996402..ecb99c9 100644 --- a/pyrpkg/__init__.py +++ b/pyrpkg/__init__.py @@ -110,7 +110,7 @@ class Commands(object): build_client, user=None, dist=None, target=None, quiet=False, distgit_namespaced=False, realms=None, lookaside_namespaced=False, - git_excludes=None, results_dir='root'): + git_excludes=None, results_dir='root', allow_pre_generated_srpm=False): """Init the object and some configuration details.""" # Path to operate on, most often pwd @@ -239,6 +239,9 @@ class Commands(object): # Layout setup self.layout = layout.build(self.path, 'resultsdir' if self.results_dir == 'subdir' else None) + # A Configuration value used in 'import_srpm' command (comes from the Copr team) + # If pre-generated srpms are allowed, don't care specfile is processed by rpmautospec + self.allow_pre_generated_srpm = allow_pre_generated_srpm # Define properties here # Properties allow us to "lazy load" various attributes, which also means @@ -1471,6 +1474,7 @@ class Commands(object): # the dist-git repo without any specfiles - right after initialization) we are # not able determine which the main specfile is. if file.endswith('.spec') and not file.startswith('.') \ + and not self.allow_pre_generated_srpm \ and spec_file_processed_by_rpmautospec(file, target_dir): raise rpkgError('SRPM was processed by rpmautospec ' '(specfile "{}" was analyzed)'.format(file)) diff --git a/tests/test_cli.py b/tests/test_cli.py index 868ad1f..02620ef 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1784,6 +1784,47 @@ class TestImportSrpm(LookasideCacheMock, CliTestCase): self.assertFilesExist(['package.rpmlintrc'], search_dir=self.chaos_repo) self.assertFilesNotExist(['the_file_is_not_in_reserved.yaml'], search_dir=self.chaos_repo) + @patch('pyrpkg.spec_file_processed_by_rpmautospec') + def test_import_srpm_not_processed_by_rpmautospec(self, rpmautospec_processed): + cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg', + 'import', '--skip-diffs', self.srpm_file] + + rpmautospec_processed.return_value = False + with patch('sys.argv', new=cli_cmd): + cli = self.new_cli() + with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload): + cli.import_srpm() # no exception should be raised + rpmautospec_processed.assert_called_once() + + @patch('pyrpkg.spec_file_processed_by_rpmautospec') + def test_import_srpm_processed_by_rpmautospec(self, rpmautospec_processed): + cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg', + 'import', '--skip-diffs', self.srpm_file] + + rpmautospec_processed.return_value = True + with patch('sys.argv', new=cli_cmd): + cli = self.new_cli() + with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload): + six.assertRaisesRegex( + self, + rpkgError, + 'SRPM was processed by rpmautospec', + cli.import_srpm) + rpmautospec_processed.assert_called_once() + + @patch('pyrpkg.spec_file_processed_by_rpmautospec') + def test_import_srpm_processed_by_rpmautospec_allowed(self, rpmautospec_processed): + cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg', + 'import', '--skip-diffs', self.srpm_file] + + rpmautospec_processed.return_value = True + with patch('sys.argv', new=cli_cmd): + cli = self.new_cli() + cli.cmd.allow_pre_generated_srpm = True + with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload): + cli.import_srpm() # no exception should be raised + rpmautospec_processed.assert_not_called() + class TestMockbuild(CliTestCase): """Test mockbuild command""" -- 2.39.2