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