#!/usr/bin/python3 import re import sys from osc_batch_submit.osc import OSC from osc_batch_submit.main import __version__ from argparse import ArgumentParser, RawTextHelpFormatter def is_ibs(project): if 'openSUSE.org:' in project: return True elif 'Backports' in project or 'Leap' in project: return False elif 'SUSE:' in project: return True return False def process_log(filename, show_packagelist=False, show_state=False, show_comments=None, verbose=0): contents = open(filename, 'r').read() if not verbose and not show_packagelist and not show_state: srs = re.findall(r'created request id ([0-9]*)', contents) print(' '.join(srs)) sys.exit(0) url = '' packages = [] errors = [] sections = contents.split('#-# ') osc = None for x, y in [x.split('\n', 1) for x in sections if x]: sr_id = re.search(r'created request id ([0-9]*)', y) srcPrj, package, tgtPrj = x.split(' ') if show_packagelist: packages.append(package) if verbose > 1: if is_ibs(tgtPrj): url = 'https://build.suse.de/request/show/' else: url = 'https://build.opensuse.org/request/show/' state_text = '' comments_text = '' if show_state and sr_id: if not osc: osc = OSC(False, ibs=is_ibs(tgtPrj)) state, state_msg = osc.get_request_state(sr_id.group(1)) state_text = f' {state} : {state_msg}' if show_comments: only_last = (show_comments == 'last') comments = osc.get_request_comments(sr_id.group(1), only_last=only_last) if comments and isinstance(comments, list): comments = '\n' + '\n'.join(comments) if comments: comments_text = f' . {comments}' if sr_id: print(f'{url}{sr_id.group(1)}{state_text} ' f'{package}{comments_text}') else: errors.append(f'?? {package}') if show_packagelist: print('{' + ', '.join(packages) + '}') if errors: print('\n'.join(errors)) def main(): parser = ArgumentParser(description='List generated Submit Requests', formatter_class=RawTextHelpFormatter) parser.add_argument('--version', action='version', version='list-srs ' + __version__) parser.add_argument('log_file') parser.add_argument('--verbose', '-v', action='count', default=0) parser.add_argument('--show-state', '-s', action='store_true') parser.add_argument('--show-comments', '-c', choices=[None, 'all', 'last'], default=None) parser.add_argument('--packagelist', action='store_true') options = parser.parse_args() process_log(options.log_file, options.packagelist, options.show_state, options.show_comments, options.verbose) if __name__ == "__main__": main()