【架构优化】从 DeliveryRepo.applyMRDeliveryStates 中拆出工作项自记 MR 状态覆盖 overlayIssueMRState

Ouverte
#480 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@fx-kurumi y travaille déjà.

Depuis le 13/11/2026.

  • #481 par @fx-kurumi — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
25/100
Type d'issue
Refactorisation
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
go
Domaine
backend

Piste de recherche

Read internal/repo/delivery.go, especially DeliveryRepo.applyMRDeliveryStates, and inspect the existing repo tests such as mr_delivery_memory_test.go. A linked pull request (#481) is already open for this work, so it is not a good first-contribution task to pick up.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

现状问题

internal/repo/delivery.go 中 DeliveryRepo.applyMRDeliveryStates 约 125 行,在「遍历 issue 的每个 MR」循环内又嵌套了一段循环:逐个比对 issue.DeliveryMRList(),用工作项自己记录的 MR 状态去补齐/升级查询到的状态(unknown 时回退、否则走 EffectiveAnalyticsMRState)。这段逻辑:

  • 嵌套 4 层(for → for → if → if/else),读起来要同时记住外层 best/seen 等变量;
  • 每个 MR 引用都重新调用一次 DeliveryMRList()(每次都会复制切片);
  • 没有单独的测试,只能通过整条分析链路间接覆盖。

重构方案

  • 抽出包级纯函数 overlayIssueMRState(state, url string, own []domain.DeliveryMR) string,原样搬移这段判断;
  • applyMRDeliveryStates 在单个 item 的循环开头取一次 own := issues[id].DeliveryMRList(),内层改为一行调用。

影响范围

仅 internal/repo/delivery.go(以及新增测试文件),不改导出接口、不改行为。

验证方式

  • 新增 overlayIssueMRState 单元测试,覆盖:无匹配、unknown/空状态回退、own 状态为空不覆盖、integrated + merged 升级、URL 归一化匹配;
  • 现有 mr_delivery_memory_test.go 等 repo 测试通过;gofmt、go vet ./internal/repo/、go test ./internal/repo/ 通过。
Langage dominant
Go
Étoiles
141
Forks
28
Merge moyen
1 j 15 h
PR mergées (30 j)
113

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Tencent/LoopForge

Toutes les issues de Tencent/LoopForge

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.