From 87d4995b40fbcddac88fb21191eb2d5d1f248550 Mon Sep 17 00:00:00 2001 From: Ondrej Nosek Date: Tue, 11 Jul 2023 17:00:48 +0200 Subject: [PATCH 2/3] Support for checking exploded sources before push pre-push-check now includes test whether source files listed in a specfile come from additional sources. This functionality is relevant only for some x-pkg tools, others should not be affected. JIRA: RHELCMP-11777 Signed-off-by: Ondrej Nosek --- pyrpkg/__init__.py | 12 ++++++++++-- tests/commands/test_pre_push_check.py | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py index b45ad8f..bc669b9 100644 --- a/pyrpkg/__init__.py +++ b/pyrpkg/__init__.py @@ -4468,6 +4468,10 @@ class Commands(object): return self._repo_name, version, release + # Works as virtual method. Other x-pkg tools can add their specific sources + def additional_source_entries(self): + return {} + def pre_push_check(self, ref): show_hint = ('Hint: this check (.git/hooks/pre-push script) can be bypassed by adding ' 'the argument \'--no-verify\' argument to the push command.') @@ -4561,13 +4565,17 @@ class Commands(object): # list of all files (their relative paths) in the commit repo_entries = set(item.path for item in commit.tree.traverse() if item.type != "tree") + # other x-pkg tools can add their specific sources + additional_entries = set(self.additional_source_entries()) + # check whether every source file is either listed in the 'sources' file or tracked in git for source_file in source_files: listed = source_file in sourcesf_entries tracked = source_file in repo_entries - if not (listed or tracked): + listed_additional = source_file in additional_entries + if not (listed or tracked or listed_additional): self.log.error('Source file \'{0}\' was neither listed in the \'sources\' file ' - 'nor tracked in git. ' + 'nor tracked in git nor listed in additional sources. ' 'Push operation was cancelled'.format(source_file)) self.log.warning(show_hint) sys.exit(4) diff --git a/tests/commands/test_pre_push_check.py b/tests/commands/test_pre_push_check.py index ee151c1..79165ec 100644 --- a/tests/commands/test_pre_push_check.py +++ b/tests/commands/test_pre_push_check.py @@ -90,8 +90,8 @@ Patch3: d.patch self.assertEqual(exc.exception.code, 4) log_error.assert_called_once_with("Source file 'b.patch' was neither listed in the " - "'sources' file nor tracked in git. Push operation " - "was cancelled") + "'sources' file nor tracked in git nor listed " + "in additional sources. Push operation was cancelled") # Verify added files are committed but not pushed to origin local_repo = git.Repo(self.cloned_dir) -- 2.41.0