【架构优化】从 gitwork.RecordBaseline 中拆出基线候选回退 resolveBaselineSHA 与提交解析 resolveCommitSHA
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- Medio día
- Aptitud para principiantes
- 25/100
Línea de trabajo
The work is in internal/gitwork/patch.go: read RecordBaseline and the inline resolve closure, then check the existing TestRecordBaseline* tests before extracting resolveCommitSHA and resolveBaselineSHA. Pull request #448 is already open against this issue, so coordinate with it before starting. Done means the existing tests pass unchanged and the new baseline_resolve_test.go covers the fallback order.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
现状问题
internal/gitwork/patch.go 中的 RecordBaseline 约 72 行,混合了三件事:
.git/ 基线文件的安全检查(Lstat、拒绝符号链接);- 一个内联闭包
resolve(通过 stdin 把 ref 交给git cat-file --batch-check,解析 commit SHA); - 四级候选回退链
origin/<base>→origin/master→origin/main→HEAD,用一串if err != nil逐级尝试,另外还有[]byte/string来回转换和一处bytes.TrimSpace(sha)冗余判断(resolve 成功时 sha 必为合法对象 ID,不可能为空)。
闭包和回退链无法单独测试,也让主函数的“检查 → 解析 → 写文件”流程不够直观。
重构方案
- 把闭包提为包级函数
resolveCommitSHA(workspace, ref string) (string, error),逻辑与报错文字逐字不变(仍拒绝含\r/\n的 ref,ref 仍经 stdin 传给 git)。 - 新增
resolveBaselineSHA(workspace, baseBranch string) (string, error):按原顺序构造候选列表并依次尝试,全部失败时返回最后一个候选(HEAD)的错误,与原实现一致。 RecordBaseline改为调用resolveBaselineSHA,外层错误包装resolve repository baseline: %w不变。
影响范围
仅 internal/gitwork/patch.go 一个文件;RecordBaseline 签名与行为不变,调用方(internal/runner/daemon.go、internal/engine/repository_workspace.go)无需改动。新增测试文件 internal/gitwork/baseline_resolve_test.go。
验证方式
gofmt、go vet ./internal/gitwork/、go build ./...go test ./internal/gitwork/:既有TestRecordBaseline*(诊断信息、符号链接拒绝、已冻结保留、远程基础分支、分支名不被当作 git 参数)全部通过;新增测试覆盖多行 ref 拒绝、SHA 解析、回退顺序(空/空白/不存在分支 → origin/main)、无远程时回退 HEAD、全部失败时报告最后候选错误。
- Lenguaje dominante
- Go
- Estrellas
- 141
- Forks
- 28
- Merge medio
- 1 d 15 h
- PR fusionados (30 d)
- 113
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Tencent/LoopForge
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
[Bug]: 官方镜像未安装 wecom-cli,企业微信通知报「通知服务未安装 wecom-cli」Posiblemente ocupada @newexploreor la tomó hace 1 día. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Tencent/LoopForge#156 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
【架构优化】合并 gitwork/workbranch.go 中 push/pull 重复的默认提交身份注入为 withFallbackIdentityPosiblemente ocupada @fx-kurumi la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 40/100
Los mantenedores suelen responder en 1 día
-
【架构优化】从 runtime.installNPMCLI 中拆出 npm 参数拼装 npmCLIInstallArgs 与安装结果启用 activateNPMStagePosiblemente ocupada @fx-kurumi la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 30/100
Los mantenedores suelen responder en 1 día
Todos los issues de Tencent/LoopForge
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
bazel-contrib/rules_go#4784 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Уязвимые компоненты в GoAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
POSIdev-community/aictl#40 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
nebari-dev/nebari-infrastructure-core#774 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
oracle/terraform-provider-oci#2662 ·
-
[BUG]: A pre-hashed ACL password in uppercase hex fails ACL LOAD and crash-loops restarted podsAbiertobug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
valkey-io/valkey-operator#644 ·
Los mantenedores suelen responder en 3 días