From 05c595fc775a5361bcb80e3b222b233ed47b9cab Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Jan 02 2025 22:02:05 +0000 Subject: [PATCH 1/3] RepoWatcher: always request for non-anon case --- diff --git a/koji/util.py b/koji/util.py index 750bbda..7081252 100644 --- a/koji/util.py +++ b/koji/util.py @@ -227,9 +227,8 @@ class RepoWatcher(object): # we should have waited for builds before creating the request # this could indicate further tagging/untagging, or a bug self.logger.error('Repo request did not satisfy conditions') - else: + elif anon: # check for repo directly - # either first pass or anon mode repoinfo = self.session.repo.get(self.taginfo['id'], min_event=min_event, at_event=self.at_event, opts=self.opts) if repoinfo and self.check_repo(repoinfo): From 139b4fcc752af20f88b2dac328b045dd01e730d7 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Jan 03 2025 16:32:13 +0000 Subject: [PATCH 2/3] preserve min_event for waitrepo task --- diff --git a/koji/util.py b/koji/util.py index 7081252..1fb37d2 100644 --- a/koji/util.py +++ b/koji/util.py @@ -152,13 +152,13 @@ class RepoWatcher(object): elif at_event is not None: raise koji.ParameterError('Cannot specify both min_event and at_event') elif min_event == "last": - # TODO pass through? self.min_event = session.tagLastChangeEvent(self.taginfo['id']) else: self.min_event = int(min_event) # if opts is None we'll get the default opts self.opts = opts self.logger = logger or logging.getLogger('koji') + self._task_request = None def get_start(self): # we don't want necessarily want to start the clock in init @@ -191,7 +191,8 @@ class RepoWatcher(object): if self.check_repo(repoinfo): return repoinfo - # TODO save our request to avoid duplication later + # save our request for use in task_args(), the builder code will call that next + self._task_request = check['request'] # otherwise return None @@ -199,12 +200,18 @@ class RepoWatcher(object): """Return args for a waitrepo task matching our data""" tag = self.taginfo['name'] newer_than = None # this legacy arg doesn't make sense for us + min_event = self.min_event if self.at_event: raise koji.GenericError('at_event not supported by waitrepo task') + if min_event is None: + # see if we can use value from request + req = self._task_request + if req: + min_event = req['min_event'] if self.opts: # TODO? raise koji.GenericError('opts not supported by waitrepo task') - return [tag, newer_than, self.nvrs, self.min_event] + return [tag, newer_than, self.nvrs, min_event] def waitrepo(self, anon=False): self.logger.info('Waiting on repo for %s', self.taginfo['name']) From 3bc79d3a43d73df9665b6c4f915b2f2b9c61e7a2 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Jan 03 2025 16:44:06 +0000 Subject: [PATCH 3/3] unit test --- diff --git a/tests/test_lib/test_repowatcher.py b/tests/test_lib/test_repowatcher.py index f241380..f7883a1 100644 --- a/tests/test_lib/test_repowatcher.py +++ b/tests/test_lib/test_repowatcher.py @@ -93,6 +93,19 @@ class TestRepoWatcher(unittest.TestCase): args = watcher.task_args() params = koji.tasks.parse_task_params('waitrepo', args) + def test_getRepo_task_req(self): + # make sure task_args reports expected min_event + req = {'id': 999, 'min_event': 54321} + self.session.repo.request.return_value = {'repo': None, 'request': req} + watcher = RepoWatcher(self.session, self.TAG) + result = watcher.getRepo() + self.assertEqual(result, None) + + args = watcher.task_args() + # [tag, newer_than, nvrs, min_event] + expected = ['MY-TAG', None, [], 54321] + self.assertEqual(args, expected) + def test_waitrepo_build_wait(self): self.session.repo.get.return_value = None # we'll pass with nvrs, so we should wait for builds before making request