def check_delete_request(self, req, to_ignore, comments): package = req['package'] if package in to_ignore: self.logger.info('Delete request for package {} ignored'.format(package)) return True built_binaries = set([]) file_infos = [] for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', package): built_binaries.add(fileinfo.find('name').text) file_infos.append(fileinfo) result = True for fileinfo in file_infos: for provides in fileinfo.findall('provides_ext'): for requiredby in provides.findall('requiredby[@name]'): result = result and self.check_required_by(fileinfo, provides, requiredby, built_binaries, comments) what_depends_on = depends_on(api.apiurl, api.project, api.cmain_repo, [package], True) # filter out dependency on package itself (happens with eg # java bootstrapping itself with previous build) if package in what_depends_on: what_depends_on.remove(package) if len(what_depends_on): comments.append('{} is still a build requirement of:\n\n- {}'.format( package, '\n- '.join(sorted(what_depends_on)))) return False return result
def check_action_delete(self, request, action): # TODO Include runtime dependencies instead of just build dependencies. # TODO Ignore tgt_project packages that depend on this that are part of # ignore list as and instead look at output from staging for those. what_depends_on = depends_on(self.apiurl, action.tgt_project, 'standard', [action.tgt_package], True) # filter out dependency on package itself (happens with eg # java bootstrapping itself with previous build) if action.tgt_package in what_depends_on: what_depends_on.remove(action.tgt_package) if len(what_depends_on): self.logger.warn('{} is still a build requirement of {}'.format( action.tgt_package, ', '.join(what_depends_on))) if len(self.comment_handler.lines): self.comment_write(state='seen', result='failed') return None # Allow for delete to be declined before ensuring group passed. if not self.ensure_group(request, action): return None self.review_messages['accepted'] = 'delete request is safe' return True
def check_action_delete_package(self, request, action): # TODO Ignore tgt_project packages that depend on this that are part of # ignore list as and instead look at output from staging for those. built_binaries = set([]) revdeps = set([]) for fileinfo in fileinfo_ext_all(self.apiurl, action.tgt_project, 'standard', 'x86_64', action.tgt_package): built_binaries.add(fileinfo.find('name').text) for requiredby in fileinfo.findall( 'provides_ext/requiredby[@name]'): revdeps.add(requiredby.get('name')) runtime_deps = sorted(revdeps - built_binaries) what_depends_on = depends_on(self.apiurl, action.tgt_project, 'standard', [action.tgt_package], True) # filter out dependency on package itself (happens with eg # java bootstrapping itself with previous build) if action.tgt_package in what_depends_on: what_depends_on.remove(action.tgt_package) if len(what_depends_on): self.logger.warn( '{} is still a build requirement of:\n\n- {}'.format( action.tgt_package, '\n- '.join(sorted(what_depends_on)))) if len(runtime_deps): self.logger.warn( '{} provides runtime dependencies to:\n\n- {}'.format( action.tgt_package, '\n- '.join(runtime_deps))) if len(self.comment_handler.lines): self.comment_write(state='seen', result='failed') return None repository_pairs = self.request_repository_pairs(request, action) if not isinstance(repository_pairs, list): return repository_pairs state_hash = self.repository_state(repository_pairs) if not self.repository_check(repository_pairs, state_hash, True): return None self.review_messages['accepted'] = 'cycle and install check passed' return True
def check_delete_request(self, req, to_ignore, to_delete, comments): package = req.get('package') if package in to_ignore or self.ignore_deletes: self.logger.info( 'Delete request for package {} ignored'.format(package)) return True built_binaries = set() file_infos = [] for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', package): built_binaries.add(fileinfo.find('name').text) file_infos.append(fileinfo) # extend the others - this asks for a refactoring, but we don't handle tons of delete requests often for ptd in to_delete: if package == ptd: continue for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', ptd): built_binaries.add(fileinfo.find('name').text) result = True for fileinfo in file_infos: for provides in fileinfo.findall('provides_ext'): for requiredby in provides.findall('requiredby[@name]'): result = result and self.check_required_by( fileinfo, provides, requiredby, built_binaries, comments) what_depends_on = depends_on(api.apiurl, api.project, api.cmain_repo, [package], True) # filter out packages to be deleted for ptd in to_delete: if ptd in what_depends_on: what_depends_on.remove(ptd) if len(what_depends_on): comments.append( '{} is still a build requirement of:\n\n- {}'.format( package, '\n- '.join(sorted(what_depends_on)))) return False return result
def check_action_delete_package(self, request, action): # TODO Ignore tgt_project packages that depend on this that are part of # ignore list as and instead look at output from staging for those. built_binaries = set([]) revdeps = set([]) for fileinfo in fileinfo_ext_all(self.apiurl, action.tgt_project, 'standard', 'x86_64', action.tgt_package): built_binaries.add(fileinfo.find('name').text) for requiredby in fileinfo.findall('provides_ext/requiredby[@name]'): revdeps.add(requiredby.get('name')) runtime_deps = sorted(revdeps - built_binaries) what_depends_on = depends_on(self.apiurl, action.tgt_project, 'standard', [action.tgt_package], True) # filter out dependency on package itself (happens with eg # java bootstrapping itself with previous build) if action.tgt_package in what_depends_on: what_depends_on.remove(action.tgt_package) if len(what_depends_on): self.logger.warning('{} is still a build requirement of:\n\n- {}'.format( action.tgt_package, '\n- '.join(sorted(what_depends_on)))) if len(runtime_deps): self.logger.warning('{} provides runtime dependencies to:\n\n- {}'.format( action.tgt_package, '\n- '.join(runtime_deps))) if len(self.comment_handler.lines): self.comment_write(state='seen', result='failed') return None repository_pairs = self.request_repository_pairs(request, action) if not isinstance(repository_pairs, list): return repository_pairs state_hash = self.repository_state(repository_pairs, True) if not self.repository_check(repository_pairs, state_hash, True): return None self.review_messages['accepted'] = 'cycle and install check passed' return True