package cmd import ( "fmt" "os" "path/filepath" "git.jnss.me/joakim/jadedepo/internal/engine" "github.com/spf13/cobra" ) var depoCmd = &cobra.Command{ Use: "depo", Short: "Manage depositories", } var depoAddCmd = &cobra.Command{ Use: "add [path]", Short: "Add a depository", Long: "Register a new depository with a short name. If path is not provided, uses current working directory.", Args: cobra.RangeArgs(1, 2), Run: depoAdd, } var depoListCmd = &cobra.Command{ Use: "list", Short: "List all depositories", Run: depoList, } var depoRemoveCmd = &cobra.Command{ Use: "remove ", Short: "Remove a depository", Args: cobra.ExactArgs(1), Run: depoRemove, } var depoSetDefaultCmd = &cobra.Command{ Use: "set-default ", Short: "Set the default depository", Args: cobra.ExactArgs(1), Run: depoSetDefault, } func init() { rootCmd.AddCommand(depoCmd) depoCmd.AddCommand(depoAddCmd) depoCmd.AddCommand(depoListCmd) depoCmd.AddCommand(depoRemoveCmd) depoCmd.AddCommand(depoSetDefaultCmd) } func depoAdd(cmd *cobra.Command, args []string) { name := args[0] var path string if len(args) == 2 { path = args[1] } else { // Use current working directory cwd, err := os.Getwd() if err != nil { fmt.Fprintf(os.Stderr, "Error getting current directory: %v\n", err) os.Exit(1) } path = cwd } // Make path absolute absPath, err := filepath.Abs(path) if err != nil { fmt.Fprintf(os.Stderr, "Error resolving path: %v\n", err) os.Exit(1) } // Add depository if err := engine.AddDepository(name, absPath); err != nil { fmt.Fprintf(os.Stderr, "Error adding depository: %v\n", err) os.Exit(1) } fmt.Printf("Added depository '%s' at %s\n", name, absPath) } func depoList(cmd *cobra.Command, args []string) { depos, defaultDepo, err := engine.ListDepositories() if err != nil { fmt.Fprintf(os.Stderr, "Error listing depositories: %v\n", err) os.Exit(1) } if len(depos) == 0 { fmt.Println("No depositories configured") fmt.Println("Add one with: jade depo add [path]") return } fmt.Println("Depositories:") for name, path := range depos { if name == defaultDepo { fmt.Printf(" * %s -> %s (default)\n", name, path) } else { fmt.Printf(" %s -> %s\n", name, path) } } } func depoRemove(cmd *cobra.Command, args []string) { name := args[0] if err := engine.RemoveDepository(name); err != nil { fmt.Fprintf(os.Stderr, "Error removing depository: %v\n", err) os.Exit(1) } fmt.Printf("Removed depository '%s'\n", name) } func depoSetDefault(cmd *cobra.Command, args []string) { name := args[0] if err := engine.SetDefaultDepository(name); err != nil { fmt.Fprintf(os.Stderr, "Error setting default depository: %v\n", err) os.Exit(1) } fmt.Printf("Set '%s' as default depository\n", name) }