1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
From d87cb37fa2fea2ed535b9085a1f4c607083e1c2e Mon Sep 17 00:00:00 2001
From: Ondrej Nosek <onosek@redhat.com>
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 <onosek@redhat.com>
---
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
|