github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/cmd/rename.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/criteo/command-launcher/internal/backend" 8 "github.com/criteo/command-launcher/internal/console" 9 "github.com/criteo/command-launcher/internal/context" 10 "github.com/spf13/cobra" 11 ) 12 13 type RenameFlags struct { 14 delete bool 15 list bool 16 } 17 18 var ( 19 renameFlags = RenameFlags{} 20 ) 21 22 func AddRenameCmd(rootCmd *cobra.Command, appCtx context.LauncherContext, back backend.Backend) { 23 renameCmd := &cobra.Command{ 24 Use: "rename", 25 Short: "Rename installed command", 26 Long: fmt.Sprintf(` 27 Rename installed command to a different name. 28 29 Each command has an unique internal name in form of: 30 [name]@[group]@[package]@[repository] 31 32 For group command, the internal name is: 33 [group]@@[package]@[repository] 34 35 Without any conflict, the command name registered to Command Launcher is '%s [group] [name]' 36 37 To change the group name: 38 %s rename [group]@@[package]@[repository] [new group] 39 40 To change the command name: 41 %s rename [name]@[group]@[package]@[repository] [new name]`, 42 strings.ToTitle(appCtx.AppName()), 43 strings.ToTitle(appCtx.AppName()), 44 strings.ToTitle(appCtx.AppName())), 45 RunE: func(cmd *cobra.Command, args []string) error { 46 if renameFlags.list { 47 renamedCmds := back.AllRenamedCommands() 48 if renamedCmds == nil || len(renamedCmds) == 0 { 49 console.Highlight("No renamed command found") 50 } else { 51 fmt.Printf("%-20s %s\n", "Name Alias", "Command Full Name") 52 for k, v := range renamedCmds { 53 fmt.Printf("%-20s: %s\n", v, k) 54 } 55 } 56 return nil 57 } 58 59 if len(args) < 2 && !renameFlags.delete { 60 cmd.Help() 61 return nil 62 } 63 64 if renameFlags.delete && len(args) < 1 { 65 cmd.Help() 66 return nil 67 } 68 icmd, err := back.FindCommandByFullName(args[0]) 69 if err != nil { 70 console.Error("No command with full name %s", args[0]) 71 return err 72 } 73 74 new_name := "" 75 if !renameFlags.delete { 76 new_name = args[1] 77 } 78 err = back.RenameCommand(icmd, new_name) 79 return err 80 }, 81 ValidArgsFunction: func(c *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { 82 options := []string{} 83 if len(args) == 0 { 84 for _, group := range back.GroupCommands() { 85 options = append(options, group.FullName()) 86 } 87 for _, exec := range back.ExecutableCommands() { 88 options = append(options, exec.FullName()) 89 } 90 return options, cobra.ShellCompDirectiveNoFileComp 91 } 92 return []string{}, cobra.ShellCompDirectiveNoFileComp 93 }, 94 } 95 96 renameCmd.Flags().BoolVarP(&renameFlags.delete, "delete", "d", false, "delete renaming") 97 renameCmd.Flags().BoolVarP(&renameFlags.list, "list", "l", false, "list all renamed commands") 98 rootCmd.AddCommand(renameCmd) 99 }