diff --git a/.github/workflows/smoke-tests-forgejo.yml b/.github/workflows/smoke-tests-forgejo.yml index 9728569..0a80f88 100644 --- a/.github/workflows/smoke-tests-forgejo.yml +++ b/.github/workflows/smoke-tests-forgejo.yml @@ -63,7 +63,7 @@ jobs: HEADER="repository name,author name,author login,author email,date and time,changed files,commit id,branch" ;; --pull_requests) - HEADER="repository name,title,id,state,commit into,commit from,created at,creator name,creator login,creator email,changed files,comment body,comment created at,comment author name,comment author login,comment author email,merger name,merger login,merger email,source branch,target branch,assignee story,related issues,labels,milestone" + HEADER="repository name,title,id,state,commit into,commit from,created at,creator name,creator login,creator email,changed files,comment body,comment created at,comment author name,comment author login,comment author email,merger name,merger login,merger email,source branch,target branch,assignee story,related issues,labels,milestone,merged" ;; --issues) HEADER="repository name,number,title,state,task,created at,creator name,creator login,creator email,closer name,closer login,closer email,closed at,comment body,comment created at,comment author name,comment author login,comment author email,assignee story,connected pull requests,labels,milestone" diff --git a/.github/workflows/smoke-tests.yml b/.github/workflows/smoke-tests.yml index b202f07..59ca41b 100644 --- a/.github/workflows/smoke-tests.yml +++ b/.github/workflows/smoke-tests.yml @@ -63,7 +63,7 @@ jobs: HEADER="repository name,author name,author login,author email,date and time,changed files,commit id,branch" ;; --pull_requests) - HEADER="repository name,title,id,state,commit into,commit from,created at,creator name,creator login,creator email,changed files,comment body,comment created at,comment author name,comment author login,comment author email,merger name,merger login,merger email,source branch,target branch,assignee story,related issues,labels,milestone" + HEADER="repository name,title,id,state,commit into,commit from,created at,creator name,creator login,creator email,changed files,comment body,comment created at,comment author name,comment author login,comment author email,merger name,merger login,merger email,source branch,target branch,assignee story,related issues,labels,milestone,merged" ;; --issues) HEADER="repository name,number,title,state,task,created at,creator name,creator login,creator email,closer name,closer login,closer email,closed at,comment body,comment created at,comment author name,comment author login,comment author email,assignee story,connected pull requests,labels,milestone" diff --git a/src/ForgejoRepoAPI.py b/src/ForgejoRepoAPI.py index e5f87c0..3dc6ea1 100644 --- a/src/ForgejoRepoAPI.py +++ b/src/ForgejoRepoAPI.py @@ -132,15 +132,23 @@ def get_pull_requests(self, repo: Repository) -> list[PullRequest]: base_label=p.base.ref, head_ref=p.head.ref, base_ref=p.base.ref, - merged_by=self.get_user_data(p.merged_by) if p.merged_by else None, - files=[], # TODO если возможно - issue_url=None, # TODO если возможно + merged_by=self.get_user_data(self.get_pull_request(repo, p.number).merged_by) if p.merged else None, + # TODO: merged_by always empty in result of repo_list_pull_requests + # (but merged and merged_at are usable) + merged=p.merged, + files=[], # TODO нужен отдельный запрос на /repos/{owner}/{repo}/pulls/{index}/files, + # иначе есть только кол-во измененных файлов в changed_files + issue_url=None, # TODO если возможно - пока не нашел labels=[label.name for label in p.labels] if p.labels else [], milestone=p.milestone.title if p.milestone else None, ) for p in pulls ] + @log_exceptions(default_return={}, message="Failed to get pull request data from Forgejo") + def get_pull_request(self, repo: Repository, pr_index: int) -> PullRequest: + return self.client.repository.repo_get_pull_request(owner=repo.owner.login, repo=repo.name, index=pr_index) + @log_exceptions(default_return=[], message="Failed to get branches from Forgejo") def get_branches(self, repo: Repository) -> list[Branch]: branches = self.client.repository.repo_list_branches( @@ -235,7 +243,11 @@ def get_comments(self, repo, obj) -> list[Comment]: elif isinstance(obj, PullRequest): comments = self.client.repository.repo_get_pull_review_comments( repo.owner.login, repo.name, obj._id, 100000 - ) # нет id комментария + ) + # нет id комментария - сейчас не работает, т.к. требуется ID ревью - нужно сначала получить \ + # список ревью /repos/{owner}/{repo}/pulls/{index}/reviews + # TODO: нужны отдельные запросы для получения комментариев и комментариев ревью #163, \ + # в основной сущности PullRequest есть поля "comments": int, "review_comments": int result = [ Comment( body=c.body, diff --git a/src/GitHubRepoAPI.py b/src/GitHubRepoAPI.py index d21883b..ca87a16 100644 --- a/src/GitHubRepoAPI.py +++ b/src/GitHubRepoAPI.py @@ -116,6 +116,7 @@ def get_pull_requests(self, repo: Repository) -> list[PullRequest]: head_ref=p.head.ref, base_ref=p.base.ref, merged_by=self.get_user_data(p.merged_by) if p.merged_by else None, + merged=bool(p.merged_by), files=[file.filename for file in p.get_files()], issue_url=p.issue_url, labels=[label.name for label in p.labels], diff --git a/src/graphql/pull_request_parser.py b/src/graphql/pull_request_parser.py index 7eeb9c1..c833b82 100644 --- a/src/graphql/pull_request_parser.py +++ b/src/graphql/pull_request_parser.py @@ -175,6 +175,7 @@ def log_repositories_pr_by_graphql(owner, repo_name, token, csv_name, first_n=10 if pr["mergedBy"] and "email" in pr["mergedBy"] else None ), + merged=pr["mergedBy"] and "name" in pr["mergedBy"], # TODO: refactor? source_branch=pr["headRef"]["name"] if pr["headRef"] else None, target_branch=pr["baseRef"]["name"] if pr["baseRef"] else None, assignee_story=None, diff --git a/src/interface_wrapper.py b/src/interface_wrapper.py index 96a0180..dc6e62b 100644 --- a/src/interface_wrapper.py +++ b/src/interface_wrapper.py @@ -85,6 +85,7 @@ class PullRequest: head_ref: str base_ref: str merged_by: User + merged: bool files: list[str] issue_url: str labels: list[str] diff --git a/src/pull_requests_parser.py b/src/pull_requests_parser.py index 0730d45..3e54062 100644 --- a/src/pull_requests_parser.py +++ b/src/pull_requests_parser.py @@ -119,6 +119,7 @@ def get_info(obj, attr): merger_name=pull.merged_by.username if pull.merged_by else None, merger_login=pull.merged_by.login if pull.merged_by else None, merger_email=pull.merged_by.email if pull.merged_by else None, + merged=pull.merged, source_branch=pull.head_ref, target_branch=pull.base_ref, assignee_story=get_assignee_story(pull, client, token, repository), diff --git a/src/repo_dataclasses.py b/src/repo_dataclasses.py index a536c0f..bf1ade7 100644 --- a/src/repo_dataclasses.py +++ b/src/repo_dataclasses.py @@ -28,3 +28,4 @@ class PullRequestData: related_issues: str = '' labels: str = '' milestone: str = '' + merged: bool = False