Files
superwork/tui/internal/tui/gitactions.go
T
2026-06-23 05:02:15 +08:00

79 lines
1.7 KiB
Go

package tui
import (
"context"
"time"
tea "charm.land/bubbletea/v2"
"superwork-tui/internal/cc"
"superwork-tui/internal/config"
"superwork-tui/internal/git"
"superwork-tui/internal/issue"
)
type commitRunMsg struct{ err error }
type mergePreviewResultMsg struct {
issueNumber int
result git.MergePreviewResult
err error
}
type hasChangesMsg struct{ hasChanges bool }
func commitRunCmd() tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
root, err := config.WorkspaceRoot()
if err != nil {
return commitRunMsg{err: err}
}
_, err = cc.SpawnClaude(ctx, cc.Opts{
Prompt: "提交下代码",
Cwd: root,
TimeoutMs: 30 * 60 * 1000,
})
return commitRunMsg{err: err}
}
}
func mergePreviewCmd(iss issue.Issue, _ string) tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
root, err := config.WorkspaceRoot()
if err != nil {
return mergePreviewResultMsg{issueNumber: iss.Number, err: err}
}
result, err := git.MergePreview(ctx, git.MergePreviewOpts{
WorkspaceRoot: root,
Branch: iss.Branch,
})
return mergePreviewResultMsg{issueNumber: iss.Number, result: result, err: err}
}
}
func hasCheckCmd() tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
root, err := config.WorkspaceRoot()
if err != nil {
return hasChangesMsg{}
}
has, _ := git.HasChanges(ctx, root)
return hasChangesMsg{hasChanges: has}
}
}
func hasChangesTickCmd() tea.Cmd {
return tea.Tick(30*time.Second, func(_ time.Time) tea.Msg {
ctx := context.Background()
root, err := config.WorkspaceRoot()
if err != nil {
return hasChangesMsg{}
}
has, _ := git.HasChanges(ctx, root)
return hasChangesMsg{hasChanges: has}
})
}