package cli import ( "fmt" "os" "path/filepath" "gitea-mail-templates/tools/builder" "github.com/urfave/cli/v2" ) // DeleteCommand returns the "delete" subcommand. func DeleteCommand() *cli.Command { return &cli.Command{ Name: "delete", Usage: "Delete one or more theme style directories", UsageText: "go run . delete [--folder ] ...", Flags: []cli.Flag{ &cli.StringFlag{ Name: "folder", Value: "../themes", Usage: "Path to the themes directory", }, }, Action: runDelete, } } func runDelete(c *cli.Context) error { names := c.Args().Slice() if len(names) == 0 { return fmt.Errorf("at least one style name is required") } folder := c.String("folder") for _, styleName := range names { if !builder.ValidName(styleName) { return fmt.Errorf("invalid theme name %q", styleName) } styleDir := filepath.Join(folder, styleName) if info, err := os.Lstat(styleDir); err == nil && info.Mode()&os.ModeSymlink != 0 { return fmt.Errorf("refusing to delete a theme symlink") } if _, err := os.Stat(styleDir); os.IsNotExist(err) { fmt.Printf("\033[33m[W]\033[0m [CLI] '%s' does not exist, skipped\n", styleName) continue } if _, err := builder.LoadTheme(styleDir); err != nil { return fmt.Errorf("refusing to delete a non-theme directory: %w", err) } if err := os.RemoveAll(styleDir); err != nil { return fmt.Errorf("cannot delete %s: %w", styleDir, err) } fmt.Printf("\033[32m[I]\033[0m [CLI] Deleted style '%s'\n", styleName) } return nil }