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

Offen
#480 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@fx-kurumi arbeitet bereits daran.

Seit 13.11.2026.

  • #481 von @fx-kurumi — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
25/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
go
Bereich
backend

Rechercherichtung

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.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

现状问题

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/ 通过。
Vorherrschende Sprache
Go
Sterne
141
Forks
28
Ø Merge
1 T. 15 Std.
Gemergte PRs (30 T.)
113

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus Tencent/LoopForge

Alle Issues in Tencent/LoopForge

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.