github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/cmd/state/internal/cmdtree/ppm.go (about)

     1  package cmdtree
     2  
     3  import (
     4  	"github.com/ActiveState/cli/internal/captain"
     5  	"github.com/ActiveState/cli/internal/locale"
     6  	"github.com/ActiveState/cli/internal/primer"
     7  	"github.com/ActiveState/cli/internal/runners/ppm"
     8  )
     9  
    10  func newPpmCommand(prime *primer.Values) *captain.Command {
    11  	shim := ppm.NewShim(prime)
    12  	conversion := ppm.NewConversionFlow(prime)
    13  	rootCmd := captain.NewHiddenShimCommand(
    14  		"_ppm",
    15  		prime,
    16  		nil, nil,
    17  		func(_ *captain.Command, args []string) error {
    18  			for _, arg := range args {
    19  				if arg == "--version" {
    20  					return shim.PrintDefault()
    21  				}
    22  			}
    23  			converted, err := conversion.StartIfNecessary()
    24  			if err != nil {
    25  				return err
    26  			}
    27  			return shim.RunPPM(converted, args...)
    28  		},
    29  	)
    30  
    31  	var children []*captain.Command
    32  	children = addPackagesCommands(prime, children)
    33  	children = addRepositoryCommands(prime, children)
    34  	children = addProjectCommands(prime, children)
    35  	children = addVersionCommand(prime, children)
    36  	children = addInfoCommand(prime, children)
    37  	children = addOtherCommands(prime, children)
    38  
    39  	rootCmd.AddChildren(children...)
    40  	return rootCmd
    41  }
    42  
    43  func addPackagesCommands(prime *primer.Values, cmds []*captain.Command) []*captain.Command {
    44  	shim := ppm.NewShim(prime)
    45  	conversion := ppm.NewConversionFlow(prime)
    46  	return append(cmds,
    47  		captain.NewShimCommand(
    48  			"install",
    49  			"installs new packages",
    50  			func(_ *captain.Command, args []string) error {
    51  				converted, err := conversion.StartIfNecessary()
    52  				if err != nil {
    53  					return err
    54  				}
    55  
    56  				return shim.RunInstall(converted, args...)
    57  			},
    58  		),
    59  		captain.NewShimCommand(
    60  			"upgrade",
    61  			"upgrades installed packages",
    62  			func(_ *captain.Command, args []string) error {
    63  				converted, err := conversion.StartIfNecessary()
    64  				if err != nil {
    65  					return err
    66  				}
    67  
    68  				return shim.RunUpgrade(converted, args...)
    69  			},
    70  		),
    71  		captain.NewShimCommand(
    72  			"remove",
    73  			"removes installed packages",
    74  			func(_ *captain.Command, args []string) error {
    75  				converted, err := conversion.StartIfNecessary()
    76  				if err != nil {
    77  					return err
    78  				}
    79  
    80  				return shim.RunRemove(converted, args...)
    81  			},
    82  		),
    83  	)
    84  }
    85  
    86  func addVersionCommand(prime *primer.Values, cmds []*captain.Command) []*captain.Command {
    87  	shim := ppm.NewShim(prime)
    88  	return append(cmds,
    89  		captain.NewShimCommand(
    90  			"version",
    91  			"print version info",
    92  			func(_ *captain.Command, _ []string) error {
    93  				return shim.PrintDefault()
    94  			},
    95  		),
    96  	)
    97  }
    98  
    99  func addProjectCommands(prime *primer.Values, cmds []*captain.Command) []*captain.Command {
   100  	shim := ppm.NewShim(prime)
   101  	conversion := ppm.NewConversionFlow(prime)
   102  	return append(cmds,
   103  		captain.NewShimCommand(
   104  			"area",
   105  			"organizes packages in different areas",
   106  			func(_ *captain.Command, _ []string) error {
   107  				_, err := conversion.StartIfNecessary()
   108  				if err != nil {
   109  					return err
   110  				}
   111  
   112  				prime.Output().Print(locale.Tr("ppm_print_area_redundant", "state packages"))
   113  				return nil
   114  			},
   115  		),
   116  		captain.NewShimCommand(
   117  			"list",
   118  			"lists installed packages",
   119  			func(_ *captain.Command, args []string) error {
   120  				converted, err := conversion.StartIfNecessary()
   121  				if err != nil {
   122  					return err
   123  				}
   124  
   125  				return shim.RunList(converted, args...)
   126  			},
   127  		),
   128  		//	Long:  strings.TrimSpace(locale.T("ppm_header_message")),
   129  		captain.NewShimCommand(
   130  			"files",
   131  			"lists the full path name of the files belonging to the given package, one line per file.",
   132  			func(_ *captain.Command, _ []string) error {
   133  				return shim.PrintDefault()
   134  			},
   135  		),
   136  		//	Long:  strings.TrimSpace(locale.T("ppm_header_message")),
   137  		captain.NewShimCommand(
   138  			"verify",
   139  			"checks that the installed files are present and unmodified.",
   140  			func(_ *captain.Command, _ []string) error {
   141  				return shim.PrintDefault()
   142  			},
   143  		),
   144  	)
   145  }
   146  
   147  func addRepositoryCommands(prime *primer.Values, cmds []*captain.Command) []*captain.Command {
   148  	shim := ppm.NewShim(prime)
   149  	return append(cmds,
   150  		// The repo sub-commands in ppm configure alternative package
   151  		// directories. At this point, this is an unsupported functionality, as
   152  		// you cannot host a private platform yet.
   153  		// So, I am just printing the default message.
   154  		// Long:  strings.TrimSpace(locale.T("ppm_header_message")),
   155  		captain.NewShimCommand(
   156  			"repo",
   157  			"manages package repositories",
   158  			func(_ *captain.Command, _ []string) error {
   159  				return shim.PrintDefault()
   160  			},
   161  		),
   162  		captain.NewShimCommand(
   163  			"search",
   164  			"searches for packages in all enabled repositories",
   165  			func(_ *captain.Command, _ []string) error {
   166  				return shim.PrintSuggestion(locale.T("ppm_search_intent"), "state packages search", "state/packages.html")
   167  			},
   168  		),
   169  		captain.NewShimCommand(
   170  			"describe",
   171  			"shows all properties from a particular package from the last search result",
   172  			func(_ *captain.Command, _ []string) error {
   173  				return shim.PrintDefault()
   174  			},
   175  		),
   176  		captain.NewShimCommand(
   177  			"tree",
   178  			"shows all dependencies for a particular package.",
   179  			func(_ *captain.Command, _ []string) error {
   180  				return shim.PrintDefault()
   181  			},
   182  		),
   183  	)
   184  }
   185  
   186  func addOtherCommands(prime *primer.Values, cmds []*captain.Command) []*captain.Command {
   187  	shim := ppm.NewShim(prime)
   188  	return append(cmds,
   189  		// The repo sub-commands in ppm configure alternative package
   190  		// directories. At this point, this is an unsupported functionality, as
   191  		// you cannot host a private platform yet.
   192  		// So, I am just printing the default message.
   193  		captain.NewShimCommand(
   194  			"config",
   195  			"configuration settings",
   196  			func(_ *captain.Command, _ []string) error {
   197  				return shim.PrintDefault()
   198  			},
   199  		),
   200  		captain.NewShimCommand(
   201  			"gui",
   202  			"opens the graphical user-interface",
   203  			func(_ *captain.Command, _ []string) error {
   204  				return shim.PrintDefault()
   205  			},
   206  		),
   207  	)
   208  }
   209  
   210  func addInfoCommand(prime *primer.Values, cmds []*captain.Command) []*captain.Command {
   211  	shim := ppm.NewShim(prime)
   212  	return append(cmds, captain.NewShimCommand(
   213  		"info",
   214  		"prints ppm help message",
   215  		func(_ *captain.Command, _ []string) error {
   216  			return shim.PrintMain()
   217  		},
   218  	))
   219  }