【竞赛赛题】提交,修复部分缺陷,完成了部分进阶任务 #13

Open
sapientialM wants to merge 28 commits from sapientialM/reposync:master into master
First-time contributor

进阶任务1:缺陷修复

1. Delete Repo 调用失败后,仍会删除数据库内仓库记录

【缺陷描述】:因 Windows 权限问题无法删除tmp目录下git仓库时导致 Delete Repo 调用时失败,但数据库内记录已被删除。

【错误日志】:

[2024-08-03 16:36:14.825] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 POST 方法访问接口 /cerobot/sync/repo
INFO:     127.0.0.1:59478 - "POST /cerobot/sync/repo HTTP/1.1" 200 OK
[2024-08-03 16:36:40.098] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 POST 方法访问接口 /cerobot/sync/repo/reposyncer-togitlink
[2024-08-03 16:36:40.100] INFO [logger] sync_log (utils/sync_log.py:58) 初始化仓库 *********
[2024-08-03 16:36:40.101] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git clone
[2024-08-03 16:36:41.796] INFO [logger] sync_log (utils/sync_log.py:58) 添加/更新仓库信息
[2024-08-03 16:36:43.123] INFO [logger] sync_log (utils/sync_log.py:58) 添加/更新仓库信息
[2024-08-03 16:36:44.322] INFO [logger] sync_log (utils/sync_log.py:58) ************ 执行reposyncer-togitlink仓库同步 ************
[2024-08-03 16:36:44.322] INFO [logger] sync_log (utils/sync_log.py:58) 获取仓库分支信息
[2024-08-03 16:36:45.478] INFO [logger] sync_log (utils/sync_log.py:58) Execute inter to outer master branch Sync
[2024-08-03 16:36:45.479] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git fetch internal master
[2024-08-03 16:36:46.720] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git checkout -B master internal/master
[2024-08-03 16:36:46.781] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git push external master:master
[2024-08-03 16:36:49.902] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git log -1 --format="%H"
[2024-08-03 16:36:49.952] INFO [logger] sync_log (utils/sync_log.py:58) [COMMIT ID: 6f0639c]
[2024-08-03 16:36:49.953] INFO [logger] sync_log (utils/sync_log.py:58) ************ reposyncer-togitlink仓库同步完成 ************
INFO:     127.0.0.1:59519 - "POST /cerobot/sync/repo/reposyncer-togitlink HTTP/1.1" 200 OK
[2024-08-03 16:38:45.140] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 DELETE 方法访问接
口 /cerobot/sync/repo/reposyncer-togitlink
[2024-08-03 16:38:45.150] ERROR [fastapi.logger] run_endpoint_function (obfastapi/frame.py:341) INTERNAL SERVER ERROR
Traceback (most recent call last):
..................................
PermissionError: [WinError 5] 拒绝访问。: '/tmp/sync_dir/reposyncer-togitlink\\.git\\objects\\pack\\pack-0f80fc1465b3e6c820b377c2234a79ec30303518.idx'
INFO:     127.0.0.1:59721 - "DELETE /cerobot/sync/repo/reposyncer-togitlink HTTP/1.1" 500 Internal Server Error

【解决方法】:添加报错日志,完善错误定位,并给予相关信息协助手动删除仓库

[2024-08-03 17:11:44.480] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 DELETE 方法访问接口 /cerobot/sync/repo/reposyncer-togitlink 
[2024-08-03 17:11:44.489] ERROR [logger] sync_log (utils/sync_log.py:60) 删除 reposyncer-togitlink 失败! 请手动删除 /tmp/sync_dir/reposyncer-togitlink
[2024-08-03 17:11:44.489] ERROR [fastapi.logger] run_endpoint_function (obfastapi/frame.py:341) INTERNAL SERVER ERROR

【关联提交】:c8ee97d212

2. 新建同步工程页面 React 警告

【缺陷描述】:点击新建同步工程后,控制台抛出 “Each child in a list should have a unique ���key’ prop” 的警告。

【解决方法】:为 <ProFormText></ProFormText> 添加 key 属性

【关联提交】:744df990d8

进阶任务2:疑修同步功能实现

仓库副本 issue #6

实现情况

完成了Github与Gitee两个平台的同步,并仅支持issue的title、body、负责人、标签的创建、更新、删除。其中由于接口限制,issue的删除体现为将issue状态更改为closed并添加需要删除的评论。

实现思路

issue 拉取与更新

对于Gitee平台,选择使用Gitee API 文档所提供的API,使用网络请求进行issue的拉取、更新。对于GitHub平台,使用PyGithub包进行issue的拉取、更新。

issue 映射

为保证双方平台的issue修改得以准确同步,创建了sync_issue数据库作为映射。其SQL创建语句如下

--issue 映射表
CREATE TABLE sync_issue (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL COMMENT 'issue 标题',
    body VARCHAR(255) COMMENT 'issue 内容',
    assignee VARCHAR(255) COMMENT 'issue 负责人',
    labels VARCHAR(255) COMMENT 'issue 标签',
    inter_number VARCHAR(255) NOT NULL COMMENT 'inter 仓库的issue id',
    exter_number VARCHAR(255) NOT NULL COMMENT 'exter 仓库的issue id',
    state VARCHAR(255) NOT NULL DEFAULT 'open' COMMENT 'issue 状态',
    repo_name VARCHAR(255) NOT NULL COMMENT 'issue 所在同步仓库'
) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '同步issue映射表';

功能实现

经观察代码后发现,Sync Repo 接口比较符合 issue 同步的实现思路。所以选择以附加功能的形式在Sync Repo的实现中添加 issue 同步功能。具体从 reposync\reposync\src\api\Sync_config.py 文件中在 sync_repo_task 并列添加 sync_issue_task(self, issues, repo, user, repo_name)。并在相关do、service层也添加了 MySQL 的相关实体SyncIssue及其函数定义。

功能使用

在访问 /cerobot/sync/repo 创建项目的接口时,添加请求体属性sync_issue,true 表示启用issue同步,false表示不启用。在第一次访问 /cerobot/sync/repo/{project} 开始同步的接口时,需要保证exter仓库的issue为空,以保证映射表的初始化。

进阶任务3:RepoSyncer的合并请求同步功能实现

仓库副本 issue #7

实现情况

完成了Github与Gitee两个平台的同步,并仅支持PR的title、body、负责人、标签的创建、更新。

实现思路

PR 拉取与更新

对于Gitee平台,选择使用Gitee API 文档所提供的API,使用网络请求进行PR的拉取、更新。对于GitHub平台,使用PyGithub包进行PR的拉取、更新。

PR 映射

借鉴了issue同步的实现,这里取消了多余的内容字段,仅保留 inter_number、exter_number、updated_at、repo_name字段。其中update_at字段用于判断是否需要更新。

为保证双方平台的PR修改得以准确同步,创建了sync_pr数据库作为映射。其SQL创建语句如下:

--pull request 映射表
CREATE TABLE sync_pullrequest (
    id INT AUTO_INCREMENT PRIMARY KEY,
    inter_number VARCHAR(128) NOT NULL NOT NULL COMMENT 'inter 仓库的 pr number',
    exter_number VARCHAR(128) NOT NULL NOT NULL COMMENT 'exter 仓库的 pr number',
    updated_at VARCHAR(128) NOT NULL NOT NULL COMMENT '更新时间',
    repo_name VARCHAR(128) NOT NULL NOT NULL COMMENT 'pr 所在同步仓库'
) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '同步issue映射表';

功能实现

经观察代码后发现,Sync Repo 接口比较符合 PR 同步的实现思路。所以选择以附加功能的形式在Sync Repo的实现中添加 PR 同步功能。具体从 reposync\reposync\src\api\Sync_config.py 文件中在 sync_repo_task 并列添加 sync_pr_task(self, pullrequests, repo, user, repo_name)。并在相关do、service层也添加了 MySQL 的相关实体SyncPr及其函数定义。

功能使用

在访问 /cerobot/sync/repo 创建项目的接口时,添加请求体属性sync_pr,true 表示启用pr同步,false表示不启用。在第一次访问 /cerobot/sync/repo/{project} 开始同步的接口时,需要保证exter仓库的pr为空,以保证映射表的初始化。

# 进阶任务1:缺陷修复 ## 1. **Delete Repo 调用失败后,仍会删除数据库内仓库记录** 【缺陷描述】:因 Windows 权限问题无法删除tmp目录下git仓库时导致 Delete Repo 调用时失败,但数据库内记录已被删除。 【错误日志】: ```bash [2024-08-03 16:36:14.825] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 POST 方法访问接口 /cerobot/sync/repo INFO: 127.0.0.1:59478 - "POST /cerobot/sync/repo HTTP/1.1" 200 OK [2024-08-03 16:36:40.098] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 POST 方法访问接口 /cerobot/sync/repo/reposyncer-togitlink [2024-08-03 16:36:40.100] INFO [logger] sync_log (utils/sync_log.py:58) 初始化仓库 ********* [2024-08-03 16:36:40.101] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git clone [2024-08-03 16:36:41.796] INFO [logger] sync_log (utils/sync_log.py:58) 添加/更新仓库信息 [2024-08-03 16:36:43.123] INFO [logger] sync_log (utils/sync_log.py:58) 添加/更新仓库信息 [2024-08-03 16:36:44.322] INFO [logger] sync_log (utils/sync_log.py:58) ************ 执行reposyncer-togitlink仓库同步 ************ [2024-08-03 16:36:44.322] INFO [logger] sync_log (utils/sync_log.py:58) 获取仓库分支信息 [2024-08-03 16:36:45.478] INFO [logger] sync_log (utils/sync_log.py:58) Execute inter to outer master branch Sync [2024-08-03 16:36:45.479] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git fetch internal master [2024-08-03 16:36:46.720] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git checkout -B master internal/master [2024-08-03 16:36:46.781] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git push external master:master [2024-08-03 16:36:49.902] INFO [logger] sync_log (utils/sync_log.py:58) Execute cmd: git log -1 --format="%H" [2024-08-03 16:36:49.952] INFO [logger] sync_log (utils/sync_log.py:58) [COMMIT ID: 6f0639c] [2024-08-03 16:36:49.953] INFO [logger] sync_log (utils/sync_log.py:58) ************ reposyncer-togitlink仓库同步完成 ************ INFO: 127.0.0.1:59519 - "POST /cerobot/sync/repo/reposyncer-togitlink HTTP/1.1" 200 OK [2024-08-03 16:38:45.140] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 DELETE 方法访问接 口 /cerobot/sync/repo/reposyncer-togitlink [2024-08-03 16:38:45.150] ERROR [fastapi.logger] run_endpoint_function (obfastapi/frame.py:341) INTERNAL SERVER ERROR Traceback (most recent call last): .................................. PermissionError: [WinError 5] 拒绝访问。: '/tmp/sync_dir/reposyncer-togitlink\\.git\\objects\\pack\\pack-0f80fc1465b3e6c820b377c2234a79ec30303518.idx' INFO: 127.0.0.1:59721 - "DELETE /cerobot/sync/repo/reposyncer-togitlink HTTP/1.1" 500 Internal Server Error ``` 【解决方法】:添加报错日志,完善错误定位,并给予相关信息协助手动删除仓库 ```bash [2024-08-03 17:11:44.480] INFO [logger] api_log (utils/sync_log.py:88) 用户 robot 使用 DELETE 方法访问接口 /cerobot/sync/repo/reposyncer-togitlink [2024-08-03 17:11:44.489] ERROR [logger] sync_log (utils/sync_log.py:60) 删除 reposyncer-togitlink 失败! 请手动删除 /tmp/sync_dir/reposyncer-togitlink [2024-08-03 17:11:44.489] ERROR [fastapi.logger] run_endpoint_function (obfastapi/frame.py:341) INTERNAL SERVER ERROR ``` 【关联提交】:c8ee97d212 ## 2. **新建同步工程页面 React 警告** 【缺陷描述】:点击新建同步工程后,控制台抛出 “Each child in a list should have a unique ���key’ prop” 的警告。 【解决方法】:为 `<ProFormText></ProFormText>` 添加 key 属性 【关联提交】:744df990d8 # 进阶任务2:疑修同步功能实现 > 仓库副本 issue #6 ## 实现情况 完成了Github与Gitee两个平台的同步,并仅支持issue的title、body、负责人、标签的创建、更新、删除。其中由于接口限制,issue的删除体现为将issue状态更改为closed并添加需要删除的评论。 ## 实现思路 ### issue 拉取与更新 对于Gitee平台,选择使用[Gitee API 文档](https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoIssues)所提供的API,使用网络请求进行issue的拉取、更新。对于GitHub平台,使用PyGithub包进行issue的拉取、更新。 ### issue 映射 为保证双方平台的issue修改得以准确同步,创建了sync_issue数据库作为映射。其SQL创建语句如下 ```sql --issue 映射表 CREATE TABLE sync_issue ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL COMMENT 'issue 标题', body VARCHAR(255) COMMENT 'issue 内容', assignee VARCHAR(255) COMMENT 'issue 负责人', labels VARCHAR(255) COMMENT 'issue 标签', inter_number VARCHAR(255) NOT NULL COMMENT 'inter 仓库的issue id', exter_number VARCHAR(255) NOT NULL COMMENT 'exter 仓库的issue id', state VARCHAR(255) NOT NULL DEFAULT 'open' COMMENT 'issue 状态', repo_name VARCHAR(255) NOT NULL COMMENT 'issue 所在同步仓库' ) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '同步issue映射表'; ``` ### 功能实现 经观察代码后发现,Sync Repo 接口比较符合 issue 同步的实现思路。所以选择以附加功能的形式在Sync Repo的实现中添加 issue 同步功能。具体从 reposync\reposync\src\api\Sync_config.py 文件中在 sync_repo_task 并列添加 sync_issue_task(self, issues, repo, user, repo_name)。并在相关do、service层也添加了 MySQL 的相关实体SyncIssue及其函数定义。 ### 功能使用 在访问 /cerobot/sync/repo 创建项目的接口时,添加请求体属性sync_issue,true 表示启用issue同步,false表示不启用。在第一次访问 /cerobot/sync/repo/{project} 开始同步的接口时,需要保证exter仓库的issue为空,以保证映射表的初始化。 # 进阶任务3:**RepoSyncer的合并请求同步功能实现** > 仓库副本 issue #7 ## 实现情况 完成了Github与Gitee两个平台的同步,并仅支持PR的title、body、负责人、标签的创建、更新。 ## 实现思路 ### PR 拉取与更新 对于Gitee平台,选择使用[Gitee API 文档](https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoIssues)所提供的API,使用网络请求进行PR的拉取、更新。对于GitHub平台,使用PyGithub包进行PR的拉取、更新。 ### PR 映射 借鉴了issue同步的实现,这里取消了多余的内容字段,仅保留 inter_number、exter_number、updated_at、repo_name字段。其中update_at字段用于判断是否需要更新。 为保证双方平台的PR修改得以准确同步,创建了sync_pr数据库作为映射。其SQL创建语句如下: ```sql --pull request 映射表 CREATE TABLE sync_pullrequest ( id INT AUTO_INCREMENT PRIMARY KEY, inter_number VARCHAR(128) NOT NULL NOT NULL COMMENT 'inter 仓库的 pr number', exter_number VARCHAR(128) NOT NULL NOT NULL COMMENT 'exter 仓库的 pr number', updated_at VARCHAR(128) NOT NULL NOT NULL COMMENT '更新时间', repo_name VARCHAR(128) NOT NULL NOT NULL COMMENT 'pr 所在同步仓库' ) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '同步issue映射表'; ``` ### 功能实现 经观察代码后发现,Sync Repo 接口比较符合 PR 同步的实现思路。所以选择以附加功能的形式在Sync Repo的实现中添加 PR 同步功能。具体从 reposync\reposync\src\api\Sync_config.py 文件中在 sync_repo_task 并列添加 sync_pr_task(self, pullrequests, repo, user, repo_name)。并在相关do、service层也添加了 MySQL 的相关实体SyncPr及其函数定义。 ### 功能使用 在访问 /cerobot/sync/repo 创建项目的接口时,添加请求体属性sync_pr,true 表示启用pr同步,false表示不启用。在第一次访问 /cerobot/sync/repo/{project} 开始同步的接口时,需要保证exter仓库的pr为空,以保证映射表的初始化。
sapientialM added 22 commits 2024-09-14 15:06:53 +08:00
sapientialM added 2 commits 2024-10-28 11:29:14 +08:00
sapientialM added 1 commit 2024-10-28 17:45:20 +08:00
sapientialM added 1 commit 2024-10-28 17:46:35 +08:00
sapientialM added 1 commit 2024-10-28 21:10:56 +08:00
sapientialM added 1 commit 2024-10-29 11:52:42 +08:00
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b sapientialM-master master
git pull master

Step 2:

Merge the changes and update on Gitea.
git checkout master
git merge --no-ff sapientialM-master
git push origin master
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Lesin/reposync#13
No description provided.