From 4c1d2278d574c18d1de156988d72470bbb689d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E6=99=93=E6=9D=B0?= Date: Mon, 26 May 2025 15:30:50 +0800 Subject: [PATCH] fixed: only submodule commit failed --- internal/ext/lint-staged/gitWorkflow.go | 11 +++++++++++ internal/ext/lint-staged/run.go | 3 ++- internal/lib/tl/list.go | 7 ++++++- internal/lib/tl/task.go | 3 +++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/internal/ext/lint-staged/gitWorkflow.go b/internal/ext/lint-staged/gitWorkflow.go index de5f2d4..df1d95f 100644 --- a/internal/ext/lint-staged/gitWorkflow.go +++ b/internal/ext/lint-staged/gitWorkflow.go @@ -20,6 +20,7 @@ type gitWorkflow struct { allowEmpty bool diff string diffFilter string + breakReason string logger *slog.Logger partiallyStagedFiles []string @@ -59,6 +60,10 @@ var gitDiffArgs = []string{ } var gitApplyArgs = []string{"-v", "--whitespace=nowarn", "--recount", "--unidiff-zero"} +func (g *gitWorkflow) prepareOK() (bool, string) { + return g.breakReason != "", g.breakReason +} + // Create a diff of partially staged files and backup stash if enabled. // // will set state.hasPartiallyStagedFiles @@ -109,6 +114,12 @@ func (g *gitWorkflow) prepare(state *State) (err error) { if err != nil { return ee.Wrap(err, "cannot create stash") } + + if hash == "" { + g.breakReason = "workspace is clean" + return nil + } + _, err = g.execGit("stash", "store", "--quiet", "--message", stashMessage, hash) if err != nil { return ee.Wrap(err, "cannot save stash") diff --git a/internal/ext/lint-staged/run.go b/internal/ext/lint-staged/run.go index e17c5b1..f740165 100644 --- a/internal/ext/lint-staged/run.go +++ b/internal/ext/lint-staged/run.go @@ -139,7 +139,8 @@ func runAll(options *Options) (*State, error) { Run: func(callback tl.TaskCallback) error { return gw.prepare(ctx) }, - PostRun: handleInternalError, + PostRun: handleInternalError, + BreakFlow: gw.prepareOK, }, { Title: "Hiding unstaged changes to partially staged files...", diff --git a/internal/lib/tl/list.go b/internal/lib/tl/list.go index 503d430..44237c1 100644 --- a/internal/lib/tl/list.go +++ b/internal/lib/tl/list.go @@ -98,9 +98,10 @@ func (tl *TaskList) start(p *tea.Program) (result *Result) { } preventContinue := false + shouldBreak := false for i, task := range tl.tasks { - if preventContinue { + if preventContinue || shouldBreak { task.skip(p) continue } @@ -108,6 +109,10 @@ func (tl *TaskList) start(p *tea.Program) (result *Result) { taskResult := task.start(p) result.SubResults[i] = taskResult + if task.BreakFlow != nil { + shouldBreak, _ = task.BreakFlow() + } + if taskResult.Error { result.Error = true diff --git a/internal/lib/tl/task.go b/internal/lib/tl/task.go index 7b20421..e3cd50f 100644 --- a/internal/lib/tl/task.go +++ b/internal/lib/tl/task.go @@ -16,6 +16,9 @@ type Task struct { PostRun func(result *Result) Enable func() bool + // BreakFlow return true interrupts flow execution + BreakFlow func() (shouldBreak bool, reason string) + Options []OptionApplier id string