【架构优化】合并 gitwork/workbranch.go 中 push/pull 重复的非工作分支严格校验为 verifyOffWorkBranch

Abierto
#451 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.

  • #452 de @fx-kurumi — abierto

Evaluación

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

Línea de trabajo

The duplicated block sits at the top of pushWorkBranch and pullWorkBranch in internal/gitwork/workbranch.go. Read how onWorkBranch and fetchExistingWorkBranch are used there, then check whether PR #452 already covers this refactor before starting. Done means a package-private verifyOffWorkBranch with unchanged error text and order, plus unit tests in internal/gitwork/ passing.

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

Descripción

现状问题

internal/gitwork/workbranch.go 中 pushWorkBranch 与 pullWorkBranch 开头有一段逐字相同的分支:

if !onWorkBranch(ctx, workspace, branch) {
    if requireExisting {
        if _, err := fetchExistingWorkBranch(ctx, workspace, branch); err != nil {
            return "", err
        }
        if current, _ := C(ctx, workspace, "branch", "--show-current"); strings.TrimSpace(current) != branch {
            return "", fmt.Errorf("工作区未检出已有工作分支 %s", branch)
        }
    }
    return "", nil
}

即“不在工作分支上(或有 merge/rebase 进行中)时跳过,但严格模式仍要校验远端分支存在且已检出”。两份副本必须同步维护,任何一边改动报错文字或校验顺序都会造成 push/pull 行为分叉。

重构方案

抽出包内私有函数:

// verifyOffWorkBranch 处理工作区不在工作分支上的情况:
// 非严格模式直接放行;严格模式仍校验远端分支存在且当前已检出它。
func verifyOffWorkBranch(ctx context.Context, workspace, branch string, requireExisting bool) error

pushWorkBranch / pullWorkBranch 改为:

if !onWorkBranch(ctx, workspace, branch) {
    // (push 侧保留原有注释)
    return "", verifyOffWorkBranch(ctx, workspace, branch, requireExisting)
}

报错文字、校验顺序、返回值完全不变。

影响范围

  • 仅 internal/gitwork/workbranch.go 内部两个私有函数;
  • 对外 PushWorkBranch / PushExistingWorkBranch / PullWorkBranch / PullExistingWorkBranch 签名与行为不变,调用方无需改动。

验证方式

  • 新增 verifyOffWorkBranch 单元测试:非严格模式放行;严格模式远端分支不存在报错;严格模式远端存在但未检出报「工作区未检出已有工作分支」;已检出时通过;
  • gofmt、go vet ./internal/gitwork/、go test ./internal/gitwork/ ./internal/runner/ 通过。
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.