mirror of
https://github.com/netbirdio/easyjson.git
synced 2026-05-22 18:44:42 -07:00
Updated getPkgPath to use package filepath, rather than path. Fixes an issue with os.Getwd() returning a random letter case drive letter on Windows, making the working directory unequal to GOPATH.
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -89,3 +93,29 @@ func (p *Parser) Parse(fname string, isDir bool) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getPkgPath(fname string, isDir bool) (string, error) {
|
||||
fname, err := filepath.Abs(fname)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
for _, p := range filepath.SplitList(os.Getenv("GOPATH")) {
|
||||
gopath := filepath.Join(p, "src")
|
||||
pkg, err := filepath.Rel(gopath, fname)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if pkg != fname {
|
||||
p := normalizePath(pkg)
|
||||
|
||||
if !isDir {
|
||||
return path.Dir(p), nil
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("file '%v' is not in GOPATH", fname)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package parser
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestGetPkgPath(t *testing.T) {
|
||||
cases := []struct {
|
||||
fname string
|
||||
isDir bool
|
||||
}{
|
||||
{"parser.go", false},
|
||||
{".", true},
|
||||
}
|
||||
exp := "github.com/mailru/easyjson/parser"
|
||||
|
||||
for _, tc := range cases {
|
||||
|
||||
pkg, err := getPkgPath(tc.fname, tc.isDir)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if pkg != exp {
|
||||
t.Errorf("in: \"%s\" isDir: %v want: %s got: %s", tc.fname, tc.isDir, exp, pkg)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+2
-28
@@ -2,32 +2,6 @@
|
||||
|
||||
package parser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func getPkgPath(fname string, isDir bool) (string, error) {
|
||||
if !path.IsAbs(fname) {
|
||||
pwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
fname = path.Join(pwd, fname)
|
||||
}
|
||||
|
||||
for _, p := range strings.Split(os.Getenv("GOPATH"), ":") {
|
||||
prefix := path.Join(p, "src") + "/"
|
||||
if rel := strings.TrimPrefix(fname, prefix); rel != fname {
|
||||
if !isDir {
|
||||
return path.Dir(rel), nil
|
||||
} else {
|
||||
return path.Clean(rel), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("file '%v' is not in GOPATH", fname)
|
||||
func normalizePath(path string) string {
|
||||
return path
|
||||
}
|
||||
|
||||
@@ -1,37 +1,9 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func normalizePath(path string) string {
|
||||
return strings.Replace(path, "\\", "/", -1)
|
||||
}
|
||||
|
||||
func getPkgPath(fname string, isDir bool) (string, error) {
|
||||
if !path.IsAbs(fname) {
|
||||
pwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
fname = path.Join(pwd, fname)
|
||||
}
|
||||
|
||||
fname = normalizePath(fname)
|
||||
|
||||
for _, p := range strings.Split(os.Getenv("GOPATH"), ";") {
|
||||
prefix := path.Join(normalizePath(p), "src") + "/"
|
||||
if rel := strings.TrimPrefix(fname, prefix); rel != fname {
|
||||
if !isDir {
|
||||
return path.Dir(rel), nil
|
||||
} else {
|
||||
return path.Clean(rel), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("file '%v' is not in GOPATH", fname)
|
||||
}
|
||||
package parser
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
func normalizePath(path string) string {
|
||||
return strings.Replace(path, "\\", "/", -1)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user