def main(): parser = argparse.ArgumentParser( description="TF tool for Gerrit patchset dependencies resolving") parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument("--review", help="Review ID", dest="review", type=str) parser.add_argument("--branch", help="Branch", dest="branch", type=str) parser.add_argument("--changed_files", dest="changed_files", action="store_true") parser.add_argument("--output", help="Save result into the file instead stdout", default=None, dest="output", type=str) args = parser.parse_args() log_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig(level=log_level) try: gerrit = gerrit_utils.Gerrit(args.gerrit) change = gerrit.get_current_change(args.review, args.branch) changes_list = resolve_dependencies(gerrit, change) changes_list.reverse() changes_list = collections.OrderedDict.fromkeys(changes_list) if args.changed_files: changes_list = resolve_files(gerrit, changes_list) result = format_result(changes_list) if args.output: with open(args.output, "w") as f: json.dump(result, f) else: print(json.dumps(result)) except Exception as e: print(traceback.format_exc()) err("ERROR: failed to resolve review dependencies: %s" % e) sys.exit(1)
def main(): parser = argparse.ArgumentParser( description="TF tool for pushing messages to Gerrit review") parser.add_argument("--strategy", help="What to check: gate or submit", dest="strategy", type=str) parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument("--review", help="Review ID", dest="review", type=str) parser.add_argument( "--branch", help="Branch (optional, it is mandatory in case of cherry-picks)", dest="branch", type=str) parser.add_argument("--user", help="Gerrit user", dest="user", type=str) parser.add_argument("--password", help="Gerrit API password", dest="password", type=str) args = parser.parse_args() log_level = logging.NOTSET if args.debug else logging.INFO h = logging.StreamHandler(sys.stdout) h.setLevel(log_level) h.setFormatter( logging.Formatter('%(asctime)s.%(msecs)03d %(levelname)s: %(message)s', datefmt='%m-%d %H:%M:%S')) L = logging.getLogger() L.handlers *= 0 L.addHandler(h) strategy_hooks = { 'gate': 'is_eligible_for_gating', 'submit': 'is_eligible_for_submit' } if args.strategy not in strategy_hooks: err("ERROR: Unknown strategy - {}".format(args.strategy)) return 1 try: gerrit = gerrit_utils.Gerrit(args.gerrit, args.user, args.password) expert = gerrit_utils.Expert(gerrit) func = getattr(expert, strategy_hooks[args.strategy]) change = gerrit.get_current_change(args.review, args.branch) if change and not func(change): err("Not Ready to {}".format(args.strategy)) return 1 dbg("Ready to {}".format(args.strategy)) except Exception as e: print(traceback.format_exc()) err("ERROR: failed to check approvals: %s" % e) return 1 return 0
def main(): parser = argparse.ArgumentParser( description="TF tool for auto-submitting stale Gerrit reviews") parser.add_argument("--strategy", dest="strategy", type=str) parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument( "--branch", required=False, help="Branch (optional, it is mundatory in case of cherry-picks)", dest="branch", type=str) parser.add_argument("--user", help="Gerrit user", dest="user", type=str) parser.add_argument("--password", help="Gerrit API password", dest="password", type=str) args = parser.parse_args() log_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig(level=log_level) gerrit = gerrit_utils.Gerrit(args.gerrit, args.user, args.password) expert = gerrit_utils.Expert(gerrit) strategy_hooks = { 'gate': (is_eligible_for_gating, gerrit.gate), 'submit': (is_eligible_for_submit, gerrit.submit) } if args.strategy not in strategy_hooks: err("ERROR: Unknown strategy - {}".format(args.strategy)) return 1 check_op = strategy_hooks[args.strategy][0] process_op = strategy_hooks[args.strategy][1] labels = ['Code-Review=2', 'Approved=1'] while True: found = False for commit in gerrit.list_active_changes(args.branch, labels=labels): try: info('processing review #%s/%s' % (str(commit.number), str(commit.revision_number))) if check_op(expert, commit): info('review is ready to %s' % args.strategy) process_op(commit, commit.revision_number) # set flag after operation to ensure successful operation found = True except Exception as e: info('failed to check review #{}/{}: {}'.format( commit.number, commit.revision_number, e)) if args.strategy != 'submit' or not found: break # if something was merged we have to try search again time.sleep(10) info("Something were submitted. Do check again...")
def main(): parser = argparse.ArgumentParser( description="TF tool for pushing messages to Gerrit review") parser.add_argument("--strategy", help="What to check: gate or submit", dest="strategy", type=str) parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument("--review", help="Review ID", dest="review", type=str) parser.add_argument( "--branch", help="Branch (optional, it is mandatory in case of cherry-picks)", dest="branch", type=str) parser.add_argument("--user", help="Gerrit user", dest="user", type=str) parser.add_argument("--password", help="Gerrit API password", dest="password", type=str) args = parser.parse_args() log_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig(level=log_level) strategy_hooks = { 'gate': 'is_eligible_for_gating', 'submit': 'is_eligible_for_submit' } if args.strategy not in strategy_hooks: err("ERROR: Unknown strategy - {}".format(args.strategy)) return 1 try: gerrit = gerrit_utils.Gerrit(args.gerrit, args.user, args.password) expert = gerrit_utils.Expert(gerrit) func = getattr(expert, strategy_hooks[args.strategy]) change = gerrit.get_current_change(args.review, args.branch) if not func(change): dbg("Not Ready to {}".format(args.strategy)) return 1 dbg("Ready to {}".format(args.strategy)) except Exception as e: print(traceback.format_exc()) err("ERROR: failed to check approvals: %s" % e) return 1 return 0
def main(): parser = argparse.ArgumentParser( description="TF tool for pushing messages to Gerrit review") parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument("--review", help="Review ID", dest="review", type=str) parser.add_argument("--patchset", help="Patch Set ID", dest="patchset", type=str) parser.add_argument( "--branch", help="Branch (optional, it is mundatory in case of cherry-picks)", dest="branch", type=str) parser.add_argument("--user", help="Gerrit user", dest="user", type=str) parser.add_argument("--password", help="Gerrit API password", dest="password", type=str) parser.add_argument("--message", help="Message", dest="message", type=str) parser.add_argument("--labels", help="Labels in format k1=v1 k2=v2", metavar="KEY=VALUE", nargs='+') parser.add_argument("--submit", help="Submit review to merge", action="store_true", default=False) args = parser.parse_args() log_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig(level=log_level) try: gerrit = gerrit_utils.Gerrit(args.gerrit, args.user, args.password) change = gerrit.get_current_change(args.review, args.branch, opened_only=False) labels = parse_labels(args.labels) gerrit.push_message(change, args.message, args.patchset, labels=labels) if args.submit: gerrit.submit(change, args.patchset) except Exception as e: print(traceback.format_exc()) err("ERROR: failed to push message: %s" % e) sys.exit(1)
def main(): parser = argparse.ArgumentParser( description="TF tool for pushing messages to Gerrit review") parser.add_argument("--strategy", help="What to check: gate or submit", dest="strategy", type=str) parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument("--review", help="Review ID", dest="review", type=str) parser.add_argument( "--branch", help="Branch (optional, it is mandatory in case of cherry-picks)", dest="branch", type=str) parser.add_argument("--user", help="Gerrit user", dest="user", type=str) parser.add_argument( "--password", help="Gerrit API password", dest="password", type=str) args = parser.parse_args() log_level = logging.NOTSET if args.debug else logging.INFO h = logging.StreamHandler(sys.stdout) h.setLevel(log_level) h.setFormatter(logging.Formatter('%(asctime)s.%(msecs)03d %(levelname)s: %(message)s', datefmt='%m-%d %H:%M:%S')) L = logging.getLogger() L.handlers *= 0 L.addHandler(h) try: gerrit = gerrit_utils.Gerrit(args.gerrit, args.user, args.password) # relies to default behaviour of get_current_change(opened_only=True) # if review is merged then None will be returned return 1 if gerrit.get_current_change(args.review, args.branch) else 0 except Exception: print(traceback.format_exc()) return 1 return 0
def main(): parser = argparse.ArgumentParser( description="TF tool for auto-submitting stale Gerrit reviews") parser.add_argument("--debug", dest="debug", action="store_true") parser.add_argument("--gerrit", help="Gerrit URL", dest="gerrit", type=str) parser.add_argument( "--branch", required=False, help="Branch (optional, it is mundatory in case of cherry-picks)", dest="branch", type=str) parser.add_argument("--user", help="Gerrit user", dest="user", type=str) parser.add_argument("--password", help="Gerrit API password", dest="password", type=str) args = parser.parse_args() log_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig(level=log_level) try: gerrit = gerrit_utils.Gerrit(args.gerrit, args.user, args.password) expert = gerrit_utils.Expert(gerrit) for c in filter(lambda c_: expert.is_eligible_for_submit(c_), gerrit.list_active_changes(args.branch)): dbg('submitting review #%s/%s' % (str(c.number), str(c.revision_number))) # TODO: uncomment submit when we will be ready # gerrit.submit(c.number, c.revision_number) except Exception as e: print(traceback.format_exc()) err("ERROR: failed to check approvals: %s" % e) sys.exit(1)