Пример #1
0
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)
Пример #2
0
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
Пример #3
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...")
Пример #4
0
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
Пример #5
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)
Пример #6
0
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
Пример #7
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)