From 871f1de6b93835b069b6ef1bcbd823047a47c7a9 Mon Sep 17 00:00:00 2001 From: kvii <56432636+kvii@users.noreply.github.com> Date: Sat, 5 Nov 2022 11:52:08 +0800 Subject: [PATCH] fix logger path bug (#5836) --- utils/utils.go | 15 +++++++++++++-- utils/utils_unix_test.go | 33 +++++++++++++++++++++++++++++++++ utils/utils_windows_test.go | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 utils/utils_unix_test.go create mode 100644 utils/utils_windows_test.go diff --git a/utils/utils.go b/utils/utils.go index 90b4c8eaf..2d87f4c26 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -3,8 +3,8 @@ package utils import ( "database/sql/driver" "fmt" + "path/filepath" "reflect" - "regexp" "runtime" "strconv" "strings" @@ -16,7 +16,18 @@ var gormSourceDir string func init() { _, file, _, _ := runtime.Caller(0) // compatible solution to get gorm source directory with various operating systems - gormSourceDir = regexp.MustCompile(`gorm.utils.utils\.go`).ReplaceAllString(file, "") + gormSourceDir = sourceDir(file) +} + +func sourceDir(file string) string { + dir := filepath.Dir(file) + dir = filepath.Dir(dir) + + s := filepath.Dir(dir) + if filepath.Base(s) != "gorm.io" { + s = dir + } + return s + string(filepath.Separator) } // FileWithLineNum return the file name and line number of the current file diff --git a/utils/utils_unix_test.go b/utils/utils_unix_test.go new file mode 100644 index 000000000..da97aa2c0 --- /dev/null +++ b/utils/utils_unix_test.go @@ -0,0 +1,33 @@ +package utils + +import "testing" + +func TestSourceDir(t *testing.T) { + cases := []struct { + file string + want string + }{ + { + file: "/Users/name/go/pkg/mod/gorm.io/gorm@v1.2.3/utils/utils.go", + want: "/Users/name/go/pkg/mod/gorm.io/", + }, + { + file: "/go/work/proj/gorm/utils/utils.go", + want: "/go/work/proj/gorm/", + }, + { + file: "/go/work/proj/gorm_alias/utils/utils.go", + want: "/go/work/proj/gorm_alias/", + }, + { + file: "/go/work/proj/my.gorm.io/gorm@v1.2.3/utils/utils.go", + want: "/go/work/proj/my.gorm.io/gorm@v1.2.3/", + }, + } + for _, c := range cases { + s := sourceDir(c.file) + if s != c.want { + t.Fatalf("%s: expected %s, got %s", c.file, c.want, s) + } + } +} diff --git a/utils/utils_windows_test.go b/utils/utils_windows_test.go new file mode 100644 index 000000000..d1734e0ef --- /dev/null +++ b/utils/utils_windows_test.go @@ -0,0 +1,33 @@ +package utils + +import "testing" + +func TestSourceDir(t *testing.T) { + cases := []struct { + file string + want string + }{ + { + file: `C:\Users\name\go\pkg\mod\gorm.io\gorm@v1.20.8\utils\utils.go`, + want: `C:\Users\name\go\pkg\mod\gorm.io`, + }, + { + file: `C:\go\work\proj\gorm\utils\utils.go`, + want: `C:\go\work\proj\gorm`, + }, + { + file: `C:\go\work\proj\gorm_alias\utils\utils.go`, + want: `C:\go\work\proj\gorm_alias`, + }, + { + file: `C:\go\work\proj\my.gorm.io\gorm\utils\utils.go`, + want: `C:\go\work\proj\my.gorm.io\gorm`, + }, + } + for _, c := range cases { + s := sourceDir(c.file) + if s != c.want { + t.Fatalf("%s: expected %s, got %s", c.file, c.want, s) + } + } +}