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

Aberta
#480 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@fx-kurumi já está trabalhando nisso.

Desde 13/11/2026.

  • #481 de @fx-kurumi — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
25/100
Tipo de issue
Refatoração
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
go
Domínio
backend

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

现状问题

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/ 通过。
Linguagem predominante
Go
Estrelas
141
Forks
28
Merge médio
1d 15h
PRs com merge (30d)
113

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de Tencent/LoopForge

Todas as issues de Tencent/LoopForge

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.