mirror of
https://github.com/go-kratos/kratos.git
synced 2025-11-06 08:59:18 +02:00
Feat project create with dir name add test (#2576)
* fix issue:#2358 Support for creating a project with specifying the name for its place dir * add test and fixed path of dir * fixed bug:nomod param not working as expect * fix test * fix go1.16 unit test Co-authored-by: czyt <czyt@w.cn>
This commit is contained in:
@@ -17,7 +17,7 @@ var repoAddIgnores = []string{
|
||||
}
|
||||
|
||||
func (p *Project) Add(ctx context.Context, dir string, layout string, branch string, mod string) error {
|
||||
to := path.Join(dir, p.Path)
|
||||
to := path.Join(dir, p.Name)
|
||||
|
||||
if _, err := os.Stat(to); !os.IsNotExist(err) {
|
||||
fmt.Printf("🚫 %s already exists\n", p.Name)
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
@@ -64,7 +66,8 @@ func run(cmd *cobra.Command, args []string) {
|
||||
} else {
|
||||
name = args[0]
|
||||
}
|
||||
p := &Project{Name: path.Base(name), Path: name}
|
||||
wd = getProjectPlaceDir(name, wd)
|
||||
p := &Project{Name: filepath.Base(name), Path: name}
|
||||
done := make(chan error, 1)
|
||||
go func() {
|
||||
if !nomod {
|
||||
@@ -95,3 +98,28 @@ func run(cmd *cobra.Command, args []string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getProjectPlaceDir(projectName string, fallbackPlaceDir string) string {
|
||||
projectFullPath := projectName
|
||||
|
||||
wd := filepath.Dir(projectName)
|
||||
// check for home dir
|
||||
if strings.HasPrefix(wd, "~") {
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
// cannot get user home return fallback place dir
|
||||
return fallbackPlaceDir
|
||||
}
|
||||
projectFullPath = filepath.Join(homeDir, projectName[2:])
|
||||
}
|
||||
// check path is relative
|
||||
if !filepath.IsAbs(projectFullPath) {
|
||||
absPath, err := filepath.Abs(projectFullPath)
|
||||
if err != nil {
|
||||
return fallbackPlaceDir
|
||||
}
|
||||
projectFullPath = absPath
|
||||
}
|
||||
// create project logic will check stat,so not check path stat here
|
||||
return filepath.Dir(projectFullPath)
|
||||
}
|
||||
|
||||
29
cmd/kratos/internal/project/project_linux_test.go
Normal file
29
cmd/kratos/internal/project/project_linux_test.go
Normal file
@@ -0,0 +1,29 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package project
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_getProjectPlaceDir(t *testing.T) {
|
||||
type args struct {
|
||||
projectName string
|
||||
fallbackPlaceDir string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
}{
|
||||
{"absLinux", args{projectName: "/home/kratos/awesome/go/demo", fallbackPlaceDir: ""}, "/home/kratos/awesome/go"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := getProjectPlaceDir(tt.args.projectName, tt.args.fallbackPlaceDir); got != tt.want {
|
||||
t.Errorf("getProjectPlaceDir() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
30
cmd/kratos/internal/project/project_windows_test.go
Normal file
30
cmd/kratos/internal/project/project_windows_test.go
Normal file
@@ -0,0 +1,30 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package project
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_getProjectPlaceDir(t *testing.T) {
|
||||
type args struct {
|
||||
projectName string
|
||||
fallbackPlaceDir string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
}{
|
||||
{"absWindows", args{projectName: "c:\\kratos\\awesome\\go\\demo", fallbackPlaceDir: ""}, "c:\\kratos\\awesome\\go"},
|
||||
//{"relativeWindows", args{projectName: "/home/kratos/awesome/go/demo", fallbackPlaceDir: ""}, "/home/kratos/awesome/go"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := getProjectPlaceDir(tt.args.projectName, tt.args.fallbackPlaceDir); got != tt.want {
|
||||
t.Errorf("getProjectPlaceDir() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user