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

Abierto
#480 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@fx-kurumi ya está trabajando en esto.

Desde el 13/11/2026.

  • #481 de @fx-kurumi — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
25/100
Tipo de issue
Refactorización
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
go
Área
backend

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

现状问题

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/ 通过。
Lenguaje dominante
Go
Estrellas
141
Forks
28
Merge medio
1 d 15 h
PR fusionados (30 d)
113

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Tencent/LoopForge

Todos los issues de Tencent/LoopForge

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.