mirror of
https://github.com/go-kratos/kratos.git
synced 2025-02-05 13:15:11 +02:00
fix(cmd/run): command execution directory error (#1336)
* fix(cmd/run): command execution directory error * fix
This commit is contained in:
parent
c2b4d45cdf
commit
3f68c9a9e0
@ -34,7 +34,7 @@ func Run(cmd *cobra.Command, args []string) {
|
||||
}
|
||||
if dir == "" {
|
||||
// find the directory containing the cmd/*
|
||||
cmdDir, cmdPath, err := findCMD(base)
|
||||
cmdPath, err := findCMD(base)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "\033[31mERROR: %s\033[m\n", err)
|
||||
return
|
||||
@ -43,17 +43,23 @@ func Run(cmd *cobra.Command, args []string) {
|
||||
fmt.Fprintf(os.Stderr, "\033[31mERROR: %s\033[m\n", "The cmd directory cannot be found in the current directory")
|
||||
return
|
||||
} else if len(cmdPath) == 1 {
|
||||
dir = path.Join(cmdDir, cmdPath[0])
|
||||
for k, v := range cmdPath {
|
||||
dir = path.Join(v, k)
|
||||
}
|
||||
} else {
|
||||
var cmdPaths []string
|
||||
for k, _ := range cmdPath {
|
||||
cmdPaths = append(cmdPaths, k)
|
||||
}
|
||||
prompt := &survey.Select{
|
||||
Message: "Which directory do you want to run?",
|
||||
Options: cmdPath,
|
||||
Options: cmdPaths,
|
||||
}
|
||||
survey.AskOne(prompt, &dir)
|
||||
if dir == "" {
|
||||
return
|
||||
}
|
||||
dir = path.Join(cmdDir, dir)
|
||||
dir = path.Join(cmdPath[dir], dir)
|
||||
}
|
||||
}
|
||||
fd := exec.Command("go", "run", ".")
|
||||
@ -67,15 +73,12 @@ func Run(cmd *cobra.Command, args []string) {
|
||||
return
|
||||
}
|
||||
|
||||
func findCMD(base string) (string, []string, error) {
|
||||
func findCMD(base string) (map[string]string, error) {
|
||||
var root bool
|
||||
next := func(dir string) (string, []string, error) {
|
||||
var (
|
||||
cmdDir string
|
||||
cmdPath []string
|
||||
)
|
||||
next := func(dir string) (map[string]string, error) {
|
||||
cmdPath := make(map[string]string)
|
||||
err := filepath.Walk(dir, func(walkPath string, info os.FileInfo, err error) error {
|
||||
// multi level directory is not allowed under the cmd directory, so it is judged that the path ends with cmd.
|
||||
// multi level directory is not allowed under the cmdPath directory, so it is judged that the path ends with cmdPath.
|
||||
if strings.HasSuffix(walkPath, "cmd") {
|
||||
paths, err := ioutil.ReadDir(walkPath)
|
||||
if err != nil {
|
||||
@ -83,10 +86,9 @@ func findCMD(base string) (string, []string, error) {
|
||||
}
|
||||
for _, fileInfo := range paths {
|
||||
if fileInfo.IsDir() {
|
||||
cmdPath = append(cmdPath, path.Join("cmd", fileInfo.Name()))
|
||||
cmdPath[path.Join("cmd", fileInfo.Name())] = filepath.Join(walkPath, "..")
|
||||
}
|
||||
}
|
||||
cmdDir = filepath.Join(walkPath, "..")
|
||||
return nil
|
||||
}
|
||||
if info.Name() == "go.mod" {
|
||||
@ -94,20 +96,21 @@ func findCMD(base string) (string, []string, error) {
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return cmdDir, cmdPath, err
|
||||
return cmdPath, err
|
||||
}
|
||||
for i := 0; i < 5; i++ {
|
||||
cmdDir, res, err := next(base)
|
||||
tmp := base
|
||||
cmd, err := next(tmp)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
return nil, err
|
||||
}
|
||||
if len(res) > 0 {
|
||||
return cmdDir, res, nil
|
||||
if len(cmd) > 0 {
|
||||
return cmd, nil
|
||||
}
|
||||
if root {
|
||||
break
|
||||
}
|
||||
base = filepath.Join(base, "..")
|
||||
tmp = filepath.Join(base, "..")
|
||||
}
|
||||
return "", []string{base}, nil
|
||||
return map[string]string{"": base}, nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user