blob: 3ab49608e4f2eb98bb0bcdfd3b0e384b58a44863 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cmd
import (
"fmt"
"os/exec"
)
import (
"github.com/spf13/cobra"
)
var installCmd = &cobra.Command{
Use: "install",
Short: "Install tools of dubbo-go ecology.",
Run: InstallCommand,
}
type InstallFactory interface {
GetCmdName() string
GetPackage() string
}
type InstallFormatter struct {
}
func (InstallFormatter) GetCmdName() string {
return "formatter"
}
func (InstallFormatter) GetPackage() string {
return "github.com/dubbogo/tools/cmd/imports-formatter@latest"
}
type InstallDubbo3Grpc struct {
}
func (InstallDubbo3Grpc) GetCmdName() string {
return "dubbo3grpc"
}
func (InstallDubbo3Grpc) GetPackage() string {
return "github.com/dubbogo/tools/cmd/protoc-gen-dubbo3grpc@latest"
}
type Installtriple struct {
}
func (Installtriple) GetCmdName() string {
return "triple"
}
func (Installtriple) GetPackage() string {
return "github.com/dubbogo/tools/cmd/protoc-gen-go-triple@v1.0.10-rc2"
}
var installFactory = make(map[string]InstallFactory)
func registerInstallFactory(f InstallFactory) {
installFactory[f.GetCmdName()] = f
}
func init() {
rootCmd.AddCommand(installCmd)
registerInstallFactory(&InstallFormatter{})
registerInstallFactory(&InstallDubbo3Grpc{})
registerInstallFactory(&Installtriple{})
}
func InstallCommand(cmd *cobra.Command, args []string) {
argFilter := make(map[string]InstallFactory)
var f InstallFactory
var existed bool
for _, arg := range args {
fName := arg
if f, existed = installFactory[fName]; !existed {
f = nil
}
argFilter[arg] = f
}
if _, existed = argFilter["all"]; existed {
delete(argFilter, "all")
for k, f := range installFactory {
argFilter[k] = f
}
}
var k string
for k, f = range argFilter {
if f != nil {
fmt.Println("go", "install", f.GetPackage())
cmd := exec.Command("go", "install", f.GetPackage())
if _, err := cmd.StdoutPipe(); err != nil { //获取输出对象,可以从该对象中读取输出结果
fmt.Println(err)
} else {
if err := cmd.Run(); err != nil { // 运行命令
fmt.Println(err)
}
}
continue
}
fmt.Println("不支持安装 " + k)
}
}