diff --git a/gitlab_integration/gitlab_fetcher.py b/gitlab_integration/gitlab_fetcher.py index e579c50..d57c2e9 100644 --- a/gitlab_integration/gitlab_fetcher.py +++ b/gitlab_integration/gitlab_fetcher.py @@ -129,6 +129,7 @@ def get_info(self): if response.status_code == 200: return response.json() else: + log.error(f"获取项目信息失败: {response.status_code} {response.text}") return None @retry(stop_max_attempt_number=3, wait_fixed=2000) @@ -202,4 +203,16 @@ def _build_authenticated_url(self, repo_url): elif repo_url.startswith("http://"): return f"http://oauth2:{token}@{repo_url[7:]}" else: - raise ValueError("Unsupported URL scheme") \ No newline at end of file + raise ValueError("Unsupported URL scheme") + +def is_merge_request_opened(gitlab_payload) -> bool: + """ + 判断是否是merge request打开事件 + """ + try: + gitlab_merge_request_old = gitlab_payload.get("object_attributes").get("state") == "opened" and gitlab_payload.get("object_attributes").get("merge_status") == "preparing" + gitlab_merge_request_new = gitlab_payload.get("object_attributes").get("state") == "merged" and gitlab_payload.get("object_attributes").get("merge_status") == "can_be_merged" + return gitlab_merge_request_old or gitlab_merge_request_new + except Exception as e: + log.error(f"判断是否是merge request打开事件失败: {e}") + return False \ No newline at end of file diff --git a/gitlab_integration/webhook_listener.py b/gitlab_integration/webhook_listener.py index 823fd9c..37d71f5 100644 --- a/gitlab_integration/webhook_listener.py +++ b/gitlab_integration/webhook_listener.py @@ -7,7 +7,7 @@ from response_module.response_controller import ReviewResponse from review_engine.review_engine import ReviewEngine from utils.logger import log - +from gitlab_integration.gitlab_fetcher import is_merge_request_opened class WebhookListener: def __init__(self): @@ -53,7 +53,7 @@ def handle_merge_request(self, gitlab_payload, reply): """ 处理合并请求事件 """ - if gitlab_payload.get("object_attributes").get("state") == "opened" and gitlab_payload.get("object_attributes").get("merge_status") == "preparing": + if is_merge_request_opened(gitlab_payload): log.info("首次merge_request ", gitlab_payload) project_id = gitlab_payload.get('project')['id'] merge_request_iid = gitlab_payload.get("object_attributes")["iid"] diff --git a/review_engine/handler/default_handler.py b/review_engine/handler/default_handler.py index a537ad4..46a4760 100644 --- a/review_engine/handler/default_handler.py +++ b/review_engine/handler/default_handler.py @@ -126,6 +126,6 @@ def default_handle(self, changes, merge_info, hook_info, reply, model): else: log.error(f"获取merge_request信息失败,project_id: {hook_info['project']['id']} |" - f" merge_iid: {hook_info['object_attributes']['iid']}") + f" merge_iid: {hook_info['object_attributes']['iid']} | merge_info: {merge_info}")