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

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

  • #452 de @fx-kurumi — aberto

Avaliação

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

Direção de pesquisa

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.

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

Descrição

现状问题

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/ 通过。
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.