예제 #1
0
파일: prepare.go 프로젝트: blablacar/ggn
func loadEnvCommandsReturnNewRoot(osArgs []string, rootCmd *cobra.Command) *cobra.Command {
	logs.WithField("path", ggn.Home.Config.WorkPath).Debug("Loading envs")
	work := work.NewWork(ggn.Home.Config.WorkPath)

	newRootCmd := &cobra.Command{
		Use: "ggn",
	}

	for _, envNames := range work.ListEnvs() {
		env := work.LoadEnv(envNames)

		envCmd := &cobra.Command{
			Use:   env.GetName(),
			Short: "Run command for " + env.GetName(),
			Run: func(cmd *cobra.Command, args []string) {

				newRootCmd.AddCommand(prepareEnvCommands(env))
				newRootCmd.SetArgs(osArgs[1:])
				newRootCmd.Execute()
			},
		}
		rootCmd.AddCommand(envCmd)
	}
	return newRootCmd
}
예제 #2
0
By default, the file is written directly to ~/.config/green-garden/
Add ` + "`--completionfile=/path/to/file`" + ` flag to set alternative
file-path and name.
Logout and in again to reload the completion scripts,
or just source them in directly:
	$ . /etc/bash_completion`,

	Run: func(cmd *cobra.Command, args []string) {
		if autocompleteTarget == "" {
			autocompleteTarget = ggn.Home.Path + "/ggn_completion.sh"
		}
		if autocompleteType != "bash" {
			logs.WithField("type", autocompleteType).Fatal("Only Bash is supported for now")
		}

		work := work.NewWork(ggn.Home.Config.WorkPath)

		for _, command := range cmd.Root().Commands() {
			if command.Use != "genautocomplete" && command.Use != "version" && command.Use != "help [command]" { // TODO sux
				command.AddCommand(prepareEnvCommands(work.LoadEnv(command.Use)))
			}
		}
		err := cmd.Root().GenBashCompletionFile(autocompleteTarget)
		if err != nil {
			logs.WithE(err).Fatal("Failed to generate shell completion file")
		} else {
			logs.WithField("path", autocompleteTarget).Info("Bash completion saved")
		}
		os.Exit(0)
	},
}