mirror of
				https://github.com/redhat-developer/odo.git
				synced 2025-10-19 03:06:19 +03:00 
			
		
		
		
	Replace RootCmd() by NewCmdOdo function and use it.
This commit is contained in:
		@@ -148,9 +148,9 @@ func main() {
 | 
			
		||||
			} else {
 | 
			
		||||
				switch args[0] {
 | 
			
		||||
				case "reference":
 | 
			
		||||
					fmt.Print(referencePrinter(cli.RootCmd(), 0))
 | 
			
		||||
					fmt.Print(referencePrinter(cli.NewCmdOdo(cli.OdoRecommendedName, cli.OdoRecommendedName), 0))
 | 
			
		||||
				case "structure":
 | 
			
		||||
					fmt.Print(commandPrinter(cli.RootCmd(), 0))
 | 
			
		||||
					fmt.Print(commandPrinter(cli.NewCmdOdo(cli.OdoRecommendedName, cli.OdoRecommendedName), 0))
 | 
			
		||||
				default:
 | 
			
		||||
					fmt.Print(command.Usage())
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,14 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/posener/complete"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/config"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli/version"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/util"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/util/completion"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
@@ -12,7 +17,7 @@ import (
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	// create the complete command
 | 
			
		||||
	root := cli.RootCmd()
 | 
			
		||||
	root := cli.NewCmdOdo(cli.OdoRecommendedName, cli.OdoRecommendedName)
 | 
			
		||||
	rootCmp := createCompletion(root)
 | 
			
		||||
	cmp := complete.New("odo", rootCmp)
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +29,9 @@ func main() {
 | 
			
		||||
	// add the completion flags to the root command, though they won't appear in completions
 | 
			
		||||
	root.Flags().AddGoFlagSet(flag.CommandLine)
 | 
			
		||||
	// override usage so that flag.Parse uses root command's usage instead of default one when invoked with -h
 | 
			
		||||
	flag.Usage = usage
 | 
			
		||||
	flag.Usage = func() {
 | 
			
		||||
		_ = root.Usage
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// parse the flags - both the program's flags and the completion flags
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
@@ -38,11 +45,26 @@ func main() {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Call commands
 | 
			
		||||
	cli.Execute()
 | 
			
		||||
}
 | 
			
		||||
	// checking the value of updatenotification in config
 | 
			
		||||
	// before proceeding with fetching the latest version
 | 
			
		||||
	cfg, err := config.New()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		util.CheckError(err, "")
 | 
			
		||||
	}
 | 
			
		||||
	if cfg.GetUpdateNotification() == true {
 | 
			
		||||
		updateInfo := make(chan string)
 | 
			
		||||
		go version.GetLatestReleaseInfo(updateInfo)
 | 
			
		||||
 | 
			
		||||
func usage() {
 | 
			
		||||
	_ = cli.RootCmd().Usage()
 | 
			
		||||
		util.CheckError(root.Execute(), "")
 | 
			
		||||
		select {
 | 
			
		||||
		case message := <-updateInfo:
 | 
			
		||||
			fmt.Println(message)
 | 
			
		||||
		default:
 | 
			
		||||
			glog.V(4).Info("Could not get the latest release information in time. Never mind, exiting gracefully :)")
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		util.CheckError(root.Execute(), "")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createCompletion(root *cobra.Command) complete.Command {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,6 @@ package cli
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/config"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli/application"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli/catalog"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli/component"
 | 
			
		||||
@@ -18,13 +15,24 @@ import (
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli/utils"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/cli/version"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/genericclioptions"
 | 
			
		||||
	"github.com/redhat-developer/odo/pkg/odo/util"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
	ktemplates "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Templates
 | 
			
		||||
var rootUsageTemplate = `Usage:{{if .Runnable}}
 | 
			
		||||
const OdoRecommendedName = "odo"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	odoLong = ktemplates.LongDesc(`
 | 
			
		||||
Odo (OpenShift Do) is a CLI tool for running OpenShift applications in a fast and automated matter. Odo reduces the complexity of deployment by adding iterative development without the worry of deploying your source code.
 | 
			
		||||
Find more information at https://github.com/redhat-developer/odo`)
 | 
			
		||||
	odoExample = ktemplates.Examples(`  # Creating and deploying a Node.js project
 | 
			
		||||
  git clone https://github.com/openshift/nodejs-ex && cd nodejs-ex
 | 
			
		||||
  %[1]s create nodejs
 | 
			
		||||
  %[1]s push
 | 
			
		||||
  # Accessing your Node.js component
 | 
			
		||||
  %[1]s url create`)
 | 
			
		||||
	rootUsageTemplate = `Usage:{{if .Runnable}}
 | 
			
		||||
  {{if .HasAvailableFlags}}{{appendIfNotPresent .UseLine "[flags]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasAvailableSubCommands}}
 | 
			
		||||
  {{ .CommandPath}} [command]{{end}}{{if gt .Aliases 0}}
 | 
			
		||||
 | 
			
		||||
@@ -54,58 +62,16 @@ Additional help topics:{{range .Commands}}{{if .IsHelpCommand}}
 | 
			
		||||
 | 
			
		||||
Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
 | 
			
		||||
`
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// rootCmd represents the base command when called without any subcommands
 | 
			
		||||
var rootCmd = &cobra.Command{
 | 
			
		||||
	Use:   rootCommandName,
 | 
			
		||||
	Short: "Odo (Openshift Do)",
 | 
			
		||||
	Long: `Odo (OpenShift Do) is a CLI tool for running OpenShift applications in a fast and automated matter. Odo reduces the complexity of deployment by adding iterative development without the worry of deploying your source code.
 | 
			
		||||
 | 
			
		||||
Find more information at https://github.com/redhat-developer/odo`,
 | 
			
		||||
	Example: `  # Creating and deploying a Node.js project
 | 
			
		||||
  git clone https://github.com/openshift/nodejs-ex && cd nodejs-ex
 | 
			
		||||
  odo create nodejs
 | 
			
		||||
  odo push
 | 
			
		||||
 | 
			
		||||
  # Accessing your Node.js component
 | 
			
		||||
  odo url create`,
 | 
			
		||||
	PersistentPreRun: func(cmd *cobra.Command, args []string) {
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RootCmd exposes the root command to main package to allow inspection by completion code
 | 
			
		||||
func RootCmd() *cobra.Command {
 | 
			
		||||
	return rootCmd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Execute adds all child commands to the root command and sets flags appropriately.
 | 
			
		||||
// This is called by main.main(). It only needs to happen once to the rootCmd.
 | 
			
		||||
func Execute() {
 | 
			
		||||
 | 
			
		||||
	// checking the value of updatenotification in config
 | 
			
		||||
	// before proceeding with fetching the latest version
 | 
			
		||||
	cfg, err := config.New()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		util.CheckError(err, "")
 | 
			
		||||
func NewCmdOdo(name, fullName string) *cobra.Command {
 | 
			
		||||
	// rootCmd represents the base command when called without any subcommands
 | 
			
		||||
	rootCmd := &cobra.Command{
 | 
			
		||||
		Use:     name,
 | 
			
		||||
		Short:   "Odo (OpenShift Do)",
 | 
			
		||||
		Long:    odoLong,
 | 
			
		||||
		Example: fmt.Sprintf(odoExample, fullName),
 | 
			
		||||
	}
 | 
			
		||||
	if cfg.GetUpdateNotification() == true {
 | 
			
		||||
		updateInfo := make(chan string)
 | 
			
		||||
		go version.GetLatestReleaseInfo(updateInfo)
 | 
			
		||||
 | 
			
		||||
		util.CheckError(rootCmd.Execute(), "")
 | 
			
		||||
		select {
 | 
			
		||||
		case message := <-updateInfo:
 | 
			
		||||
			fmt.Println(message)
 | 
			
		||||
		default:
 | 
			
		||||
			glog.V(4).Info("Could not get the latest release information in time. Never mind, exiting gracefully :)")
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		util.CheckError(rootCmd.Execute(), "")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	// Here you will define your flags and configuration settings.
 | 
			
		||||
	// Cobra supports persistent flags, which, if defined here,
 | 
			
		||||
	// will be global for your application.
 | 
			
		||||
@@ -144,7 +110,6 @@ func init() {
 | 
			
		||||
		utils.NewCmdUtils(),
 | 
			
		||||
		version.NewCmdVersion(),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// rootCommandName is the name of the root command
 | 
			
		||||
const rootCommandName = "odo"
 | 
			
		||||
	return rootCmd
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user