|
1 | 1 | import logging
|
2 | 2 | import subprocess
|
3 | 3 | import sys
|
| 4 | +from json import loads |
4 | 5 | from os import environ, getcwd, getenv
|
5 | 6 | from pathlib import Path
|
6 | 7 |
|
7 | 8 | from alpa.config import AlpaRepoConfig, MetadataConfig
|
8 |
| -from alpa.constants import REQUEST_LABEL |
| 9 | +from alpa.constants import REQUEST_LABEL, RequestEnum |
9 | 10 | from alpa.gh import GithubAPI
|
10 | 11 | from alpa.repository.branch import AlpaRepoBranch
|
11 | 12 | from copr.v3.proxies.package import PackageProxy
|
@@ -49,7 +50,7 @@ def _refuse_and_close(issue: Issue) -> None:
|
49 | 50 |
|
50 | 51 | @staticmethod
|
51 | 52 | def _get_desired_package(issue: Issue) -> str:
|
52 |
| - return issue.body.split()[-1] |
| 53 | + return loads(issue.body)["package"] |
53 | 54 |
|
54 | 55 | def _delete_package(self, issue_request: Issue) -> bool:
|
55 | 56 | pkg = self._get_desired_package(issue_request)
|
@@ -81,38 +82,53 @@ def _request_package(self, issue_request: Issue) -> bool:
|
81 | 82 | logger.error(f"Exception appeared when requesting package {exc}")
|
82 | 83 | return False
|
83 | 84 |
|
| 85 | + @staticmethod |
| 86 | + def is_new_pkg_request(issue: Issue) -> bool: |
| 87 | + return loads(issue.body)["request_type"] == RequestEnum.create |
| 88 | + |
| 89 | + @staticmethod |
| 90 | + def is_delete_pkg_request(issue: Issue) -> bool: |
| 91 | + return loads(issue.body)["request_type"] == RequestEnum.delete |
| 92 | + |
| 93 | + def handle_issue(self, issue: Issue) -> bool: |
| 94 | + if ( |
| 95 | + not self.alpa_repo_config.allow_foreign_contributing |
| 96 | + and self.is_new_pkg_request(issue) |
| 97 | + ): |
| 98 | + logger.info( |
| 99 | + f"This repo doesn't not support foreign contributing, " |
| 100 | + f"closing issue #{issue.number}" |
| 101 | + ) |
| 102 | + self._refuse_and_close(issue) |
| 103 | + return True |
| 104 | + |
| 105 | + if self.is_new_pkg_request(issue): |
| 106 | + result = self._request_package(issue) |
| 107 | + else: |
| 108 | + result = self._delete_package(issue) |
| 109 | + |
| 110 | + issue.edit(state="closed") |
| 111 | + if result: |
| 112 | + issue.create_comment("Request was successfully completed") |
| 113 | + return True |
| 114 | + |
| 115 | + return False |
| 116 | + |
84 | 117 | def react_to_trigger(self) -> int:
|
85 | 118 | issue_requests = self.gh_repo.get_issues("open", [REQUEST_LABEL]) or []
|
86 | 119 | filtered_issue_requests = []
|
87 | 120 | for issue in issue_requests:
|
88 |
| - if issue.title.startswith( |
89 |
| - "[alpa request-new-package]" |
90 |
| - ) or issue.title.startswith("[alpa delete-package]"): |
| 121 | + if self.is_delete_pkg_request(issue) or self.is_new_pkg_request(issue): |
91 | 122 | filtered_issue_requests.append(issue)
|
92 | 123 |
|
93 | 124 | if not filtered_issue_requests:
|
94 | 125 | logger.info("No issue requests to react to.")
|
95 | 126 | return 0
|
96 | 127 |
|
97 | 128 | logger.info(f"Issue requests to react to {filtered_issue_requests}")
|
98 |
| - if not self.alpa_repo_config.allow_foreign_contributing: |
99 |
| - logger.info("This repo doesn't not support foreign contributing.") |
100 |
| - for i, issue in enumerate(filtered_issue_requests): |
101 |
| - if issue.title.startswith("[alpa request-new-package]"): |
102 |
| - self._refuse_and_close(issue) |
103 |
| - filtered_issue_requests.pop(i) |
104 |
| - |
105 | 129 | status = 0
|
106 | 130 | for issue in filtered_issue_requests:
|
107 |
| - if issue.title.startswith("[alpa request-new-package]"): |
108 |
| - result = self._request_package(issue) |
109 |
| - else: |
110 |
| - result = self._delete_package(issue) |
111 |
| - |
112 |
| - issue.edit(state="closed") |
113 |
| - if result: |
114 |
| - issue.create_comment("Request was successfully completed") |
115 |
| - else: |
| 131 | + if not self.handle_issue(issue): |
116 | 132 | status = 1
|
117 | 133 |
|
118 | 134 | return status
|
|
0 commit comments