Source code for gerrit_to_platform.patchset_created

# SPDX-License-Identifier: Apache-2.0
##############################################################################
# Copyright (c) 2023 The Linux Foundation and others.
#
# All rights reserved. This program and the accompanying materials are made
# available under the terms of the Apache-2.0 license which accompanies this
# distribution, and is available at
# https://opensource.org/licenses/Apache-2.0
##############################################################################
"""Handler for patchset-created events."""

import sys
import time
from typing import Annotated

import typer

from gerrit_to_platform._logging import configure as _configure_logging
from gerrit_to_platform._logging import get_logger
from gerrit_to_platform.helpers import (
    find_and_dispatch,
    get_change_id,
    get_change_number,
    get_change_refspec,
)

app = typer.Typer()
log = get_logger(__name__)


[docs]@app.command() def patchset_created( change: Annotated[str, typer.Option(help="change id")], kind: Annotated[str, typer.Option(help="change kind")], change_url: Annotated[str, typer.Option(help="change url")], change_owner: Annotated[str, typer.Option(help="change owner")], change_owner_username: Annotated[str, typer.Option(help="username")], project: Annotated[str, typer.Option(help="project name")], branch: Annotated[str, typer.Option(help="branch")], topic: Annotated[str, typer.Option(help="topic")], uploader: Annotated[str, typer.Option(help="uploader")], uploader_username: Annotated[str, typer.Option(help="username")], commit: Annotated[str, typer.Option(help="sha1")], patchset: Annotated[str, typer.Option(help="patchset id")], ): """ Handle patcheset-created hook. Args: change (str): change ID kind (str): type of change change_url (str): change URL change_owner (str): change owner eg: 'Foo <foo@example.com>' change_owner_username (str): change owner username eg: 'foo' project (str): Gerrit project name branch (str): branch change is against topic (str): topic change is part of uploader (str): uploader of change eg: 'Foo <foo@example.com>' uploader_username (str): uploader of change username eg: 'foo' commit (str): SHA1 of commit patchset (str): patchset number """ _configure_logging() started = time.monotonic() log.info( "hook=patchset-created project=%s branch=%s patchset=%s argv_count=%d", project, branch, patchset, len(sys.argv), ) change_id = get_change_id(change) change_number = get_change_number(change_url) refspec = get_change_refspec(change_number, patchset) log.debug( "event parsed change_number=%s change_id=%s refspec=%s commit=%s", change_number, change_id, refspec, commit, ) inputs = { "GERRIT_BRANCH": branch, "GERRIT_CHANGE_ID": change_id, "GERRIT_CHANGE_NUMBER": change_number, "GERRIT_CHANGE_URL": change_url, "GERRIT_EVENT_TYPE": "patchset-created", "GERRIT_PATCHSET_NUMBER": patchset, "GERRIT_PATCHSET_REVISION": commit, "GERRIT_PROJECT": project, "GERRIT_REFSPEC": refspec, } try: dispatched = find_and_dispatch(project, "verify", inputs) log.info( "hook=patchset-created dispatched=%d project=%s " "change_number=%s", dispatched, project, change_number, ) except Exception: log.exception( "unhandled error during dispatch for change_number=%s", change_number, ) raise finally: elapsed_ms = int((time.monotonic() - started) * 1000) log.info( "hook=patchset-created exit project=%s change_number=%s " "elapsed_ms=%d", project, change_number, elapsed_ms, )
if __name__ == "__main__": app()