diff options
Diffstat (limited to '0005-Fixes-for-exploded-SRPM-layouts.patch')
-rw-r--r-- | 0005-Fixes-for-exploded-SRPM-layouts.patch | 227 |
1 files changed, 227 insertions, 0 deletions
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 + |