79 lines
1.7 KiB
Go
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}
|
|
})
|
|
}
|