document root command and add different execute options

This commit is contained in:
Robin Olsen
2026-02-06 23:31:51 +01:00
parent d962ab9314
commit 3d2c522ce8

View File

@@ -1,8 +1,8 @@
package commands
import (
"bytes"
"context"
"os"
"github.com/LazyBachelor/LazyPM/internal/service"
"github.com/charmbracelet/fang"
@@ -10,35 +10,53 @@ import (
"github.com/spf13/cobra"
)
// svc is a global variable that holds beads, config and stats services.
// Must be called before executing any commands to ensure services are available.
var svc *service.Services
// rootCmd is the base command for the CLI application.
var rootCmd = &cobra.Command{
Short: "Project Management CLI",
Long: `Project Management CLI for managing issues and tasks.`,
}
func Execute(services *service.Services) error {
SetServices(services)
return fang.Execute(context.Background(), rootCmd,
fang.WithColorSchemeFunc(fang.AnsiColorScheme),
fang.WithNotifySignal(os.Interrupt, os.Kill))
}
// SetServices sets the global services variable for use in command execution.
// Must be called before executing any commands to ensure services are available.
func SetServices(services *service.Services) {
svc = services
rootCmd.Use = svc.Config.RootCmd
}
func ExecuteWithArgs(args []string) error {
// Execute executes the root command using the fang library.
func Execute() error {
return fang.Execute(context.Background(), rootCmd,
fang.WithColorSchemeFunc(fang.AnsiColorScheme))
}
// ExecuteArgs executes the command with the given arguments using the fang library.
func ExecuteArgs(args []string) error {
rootCmd.SetArgs(args)
return fang.Execute(context.Background(), rootCmd,
fang.WithColorSchemeFunc(fang.AnsiColorScheme))
}
// ExecuteArgsString executes the command with the given arguments and returns the output as a string.
// This is useful for testing command outputs and used in the REPL
func ExecuteArgsString(args []string) (string, error) {
buf := new(bytes.Buffer)
rootCmd.SetOut(buf)
rootCmd.SetErr(buf)
rootCmd.SetArgs(args)
err := rootCmd.Execute()
return buf.String(), err
}
// init function to set up the command hierarchy and options.
func init() {
rootCmd.AddCommand(createCmd)
rootCmd.AddCommand(deleteCmd)
rootCmd.CompletionOptions.DisableDefaultCmd = false
rootCmd.CompletionOptions.DisableDefaultCmd = true
rootCmd.AddGroup(&cobra.Group{ID: "help", Title: "Helping Commands"})
rootCmd.SetCompletionCommandGroupID("help")
rootCmd.SetHelpCommandGroupID("help")