fix: перезапуск задачи начинается с чистого worktree (reset+clean перед checkout -B)
This commit is contained in:
@@ -10,12 +10,22 @@ import (
|
|||||||
// baseBranch — ветка, от которой отходит feature-работа dev (свежайший main).
|
// baseBranch — ветка, от которой отходит feature-работа dev (свежайший main).
|
||||||
const baseBranch = "main"
|
const baseBranch = "main"
|
||||||
|
|
||||||
// ensureBranch создаёт/переключает feature-ветку для задачи в repoDir,
|
// ensureBranch пересоздаёт feature-ветку для задачи в repoDir с нуля,
|
||||||
// беря за базу свежайший origin/<baseBranch>. Возвращает ошибку при сбое.
|
// беря за базу свежайший 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 {
|
func (w *Worker) ensureBranch(ctx context.Context, repoDir, branch string) error {
|
||||||
if _, err := w.git(ctx, repoDir, "fetch", "origin"); err != nil {
|
if _, err := w.git(ctx, repoDir, "fetch", "origin"); err != nil {
|
||||||
return err
|
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 {
|
if _, err := w.git(ctx, repoDir, "checkout", "-B", branch, "origin/"+baseBranch); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user