Source code for gerrit_to_platform.comment_added
# 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 re
import typer
from typing_extensions import Annotated
from gerrit_to_platform.config import get_mapping
from gerrit_to_platform.helpers import (
find_and_dispatch,
get_change_id,
get_change_number,
get_change_refspec,
)
app = typer.Typer()
[docs]@app.command(
context_settings={"allow_extra_args": True, "ignore_unknown_options": True}
)
def comment_added(
context: typer.Context,
change: Annotated[str, typer.Option(help="change id")],
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")],
author: Annotated[str, typer.Option(help="comment author")],
author_username: Annotated[str, typer.Option(help="username")],
commit: Annotated[str, typer.Option(help="sha1")],
comment: Annotated[str, typer.Option(help="comment")],
):
"""
Handle comment-added hook.
Approval scores should be added as --<approval category id> <score>
When a score is removed it should be --<approval category id>-oldValue <score>
Multiple scores and old scores may be passed
ex: --Code-Review +1 --Code-Review-oldValue 0
Args:
context (typer.Context): handler for the typer context to allow for
extra non-defined parameters (code scores, see above)
change (str): change ID
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
submitter (str): submitter of change eg: 'Foo <foo@example.com>'
submitter_username (str): submitter of change username eg: 'foo'
commit (str): SHA1 of commit
comment (str): the comment added to the change
"""
change_id = get_change_id(change)
change_number = get_change_number(change_url)
patchset_regex = r"^Patch Set (\d+):"
patchset = re.findall(patchset_regex, comment)[0]
refspec = get_change_refspec(change_number, patchset)
inputs = {
"GERRIT_BRANCH": branch,
"GERRIT_CHANGE_ID": change_id,
"GERRIT_CHANGE_NUMBER": change_number,
"GERRIT_CHANGE_URL": change_url,
"GERRIT_EVENT_TYPE": "comment-added",
"GERRIT_PATCHSET_NUMBER": patchset,
"GERRIT_PATCHSET_REVISION": commit,
"GERRIT_PROJECT": project,
"GERRIT_REFSPEC": refspec,
}
mapping = get_mapping("comment-added")
if mapping is None:
return
for mapper in mapping:
if not re.findall(mapper, comment):
continue
find_and_dispatch(project, mapping[mapper], inputs)
if __name__ == "__main__":
app()