fix: перезапуск задачи начинается с чистого worktree (reset+clean перед checkout -B)
All checks were successful
CI / test (push) Successful in 44s
CI / build-and-package (amd64, linux) (push) Successful in 38s
CI / build-and-package (amd64, windows) (push) Successful in 41s

This commit is contained in:
Hermes
2026-08-17 00:05:00 +05:00
parent a3c6b5f153
commit 2255917949

View File

@@ -10,12 +10,22 @@ import (
// baseBranch — ветка, от которой отходит feature-работа dev (свежайший main).
const baseBranch = "main"
// ensureBranch создаёт/переключает feature-ветку для задачи в repoDir,
// беря за базу свежайший origin/<baseBranch>. Возвращает ошибку при сбое.
// ensureBranch пересоздаёт feature-ветку для задачи в repoDir с нуля,
// беря за базу свежайший origin/<baseBranch>. Сначала сбрасывает worktree
// к чистому состоянию (reset --hard + clean -fd) — затирая наработки прошлых
// прогонов, иначе checkout -B упирается в «local changes would be overwritten».
func (w *Worker) ensureBranch(ctx context.Context, repoDir, branch string) error {
if _, err := w.git(ctx, repoDir, "fetch", "origin"); err != nil {
return err
}
// возвращаем worktree к чистому состоянию текущей ветки, затем чистим untracked
if _, err := w.git(ctx, repoDir, "reset", "--hard"); err != nil {
return err
}
if _, err := w.git(ctx, repoDir, "clean", "-fd"); err != nil {
return err
}
// пересоздаём ветку от свежайшего origin/<baseBranch>
if _, err := w.git(ctx, repoDir, "checkout", "-B", branch, "origin/"+baseBranch); err != nil {
return err
}