diff --git a/0006-Consider-Patch-tags-in-specfile-parser.patch b/0006-Consider-Patch-tags-in-specfile-parser.patch new file mode 100644 index 0000000..6b045cb --- /dev/null +++ b/0006-Consider-Patch-tags-in-specfile-parser.patch @@ -0,0 +1,67 @@ +From bb12945220cc99e8797bb1ced74cdc0e7efb4df0 Mon Sep 17 00:00:00 2001 +From: Otto Urpelainen +Date: Tue, 5 Oct 2021 08:50:28 +0300 +Subject: [PATCH] Consider Patch tags in specfile parser + +Patch files can be uploaded to the lookaside cache and referred +to by Patch tags in the specfile. +The specfile parser did not consider this case, leading to an error +if a dist-git repo has such confiration. Fixed by parsing +the patch tags. + +Resolves rhbz#2010518 + +Signed-off-by: Otto Urpelainen +--- + pyrpkg/spec.py | 5 +++-- + tests/test_spec.py | 11 ++++++++--- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/pyrpkg/spec.py b/pyrpkg/spec.py +index a276120..bd862f1 100644 +--- a/pyrpkg/spec.py ++++ b/pyrpkg/spec.py +@@ -14,8 +14,9 @@ from pyrpkg.errors import rpkgError + + class SpecFile(object): + """Simple specfile parser that finds source file names""" +- +- sourcefile_expression = re.compile(r'^source[0-9]*:\s*(?P.*)\s*$', re.IGNORECASE) ++ sourcefile_expression = re.compile( ++ r'^((source[0-9]*|patch[0-9]*):\s*(?P.*))\s*$', ++ re.IGNORECASE) + + def __init__(self, spec, sourcedir): + self.spec = spec +diff --git a/tests/test_spec.py b/tests/test_spec.py +index 196b470..eefc475 100644 +--- a/tests/test_spec.py ++++ b/tests/test_spec.py +@@ -36,8 +36,11 @@ class SpecFileTestCase(unittest.TestCase): + spec_fd.write( + "Source0: https://example.com/tarball.tar.gz\n" + "Source1: https://example.com/subdir/LICENSE.txt\n" +- "Source2: https://another.domain.com/source.tar.gz\n" +- "Source3: local.txt\n") ++ "source2: https://another.domain.com/source.tar.gz\n" ++ "SOURCE3: local.txt\n" ++ "\n" ++ "patch0: local.patch\n" ++ "PAtch999: https://remote.patch-sourcce.org/another-patch.bz2\n") + spec_fd.close() + + s = spec.SpecFile(self.specfile, self.workdir) +@@ -46,7 +49,9 @@ class SpecFileTestCase(unittest.TestCase): + "tarball.tar.gz", + "LICENSE.txt", + "source.tar.gz", +- "local.txt"] ++ "local.txt", ++ "local.patch", ++ "another-patch.bz2"] + self.assertEqual(len(actual), len(expected)) + self.assertTrue(all([a == b for a, b in zip(actual, expected)])) + +-- +2.31.1 + diff --git a/0007-Continue-execution-if-specfile-parsing-fails.patch b/0007-Continue-execution-if-specfile-parsing-fails.patch new file mode 100644 index 0000000..4e84bb1 --- /dev/null +++ b/0007-Continue-execution-if-specfile-parsing-fails.patch @@ -0,0 +1,58 @@ +From 7ede78fc7b8fae2e78c700f39eb68df1696e107f Mon Sep 17 00:00:00 2001 +From: Otto Urpelainen +Date: Tue, 12 Oct 2021 20:48:43 +0300 +Subject: [PATCH] Continue execution if specfile parsing fails + +The unused sources detection feature implemented by class SpecFile +is simply an optimization to avoid downloading unused sources. +The parsing is quite different from other steps performed by rpkg, +which also meant it can fail in new ways. +To avoid situations where an error in this optimization step prevents +usage that would otherwise succeed, this commit changes handling +of such errors from exiting to logging the situation and continuing +with the assumption that all sources in the sources file may +be needed. + +Resolves: #583 +JIRA: RHELCMP-7087 +Merges: https://pagure.io/rpkg/pull-request/581 + +Signed-off-by: Otto Urpelainen +--- + pyrpkg/__init__.py | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py +index 23bca5b..2edcb09 100644 +--- a/pyrpkg/__init__.py ++++ b/pyrpkg/__init__.py +@@ -2042,8 +2042,15 @@ class Commands(object): + outdir = self.path + + sourcesf = SourcesFile(self.sources_filename, self.source_entry_type) +- specf = SpecFile(os.path.join(self.layout.specdir, self.spec), +- self.layout.sourcedir) ++ ++ try: ++ specf = SpecFile(os.path.join(self.layout.specdir, self.spec), ++ self.layout.sourcedir) ++ spec_parsed = True ++ except Exception: ++ self.log.warn("Parsing specfile for used sources failed. " ++ "Falling back to downloading all sources.") ++ spec_parsed = False + + args = dict() + if self.lookaside_request_params: +@@ -2062,7 +2069,7 @@ class Commands(object): + "Error: Attempting a download '{0}' that would override a git tracked file. " + "Either remove the corresponding line from 'sources' file to keep the git " + "tracked one or 'git rm' the file to allow the download.".format(outfile)) +- if (entry.file not in specf.sources): ++ if (spec_parsed and entry.file not in specf.sources): + self.log.info("Not downloading unused %s" % entry.file) + continue + self.lookasidecache.download( +-- +2.31.1 + diff --git a/rpkg.spec b/rpkg.spec index 11d1df9..d24ac7f 100644 --- a/rpkg.spec +++ b/rpkg.spec @@ -1,6 +1,6 @@ Name: rpkg Version: 1.63 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Python library for interacting with rpm+git License: GPLv2+ and LGPLv2 @@ -22,6 +22,8 @@ Patch2: 0002-Use-six-library-in-tests.patch Patch3: 0003-Pass-sourcedir-to-rpmspec-when-specfile-is-parsed.patch Patch4: 0004-Print-SpecFile-parsing-debug-info.patch Patch5: 0005-Fixes-import-fail-with-sources-already-imported.patch +Patch6: 0006-Consider-Patch-tags-in-specfile-parser.patch +Patch7: 0007-Continue-execution-if-specfile-parsing-fails.patch # RHEL7 is currently the only release that is built for Python 2. %if 0%{?fedora} || 0%{?rhel} > 7 @@ -245,6 +247,10 @@ example_cli_dir=$RPM_BUILD_ROOT%{_datadir}/%{name}/examples/cli %changelog +* Wed Dec 01 2021 Ondřej Nosek - 1.63-5 +- Patch: Continue execution if specfile parsing fails +- Patch: Consider Patch tags in specfile parser + * Mon Nov 29 2021 Ondřej Nosek - 1.63-4 - Patch: Fixes import fail with sources already imported