From 0c91aa7937144100d677c41fbb61e6abce687181 Mon Sep 17 00:00:00 2001 From: Rolly Fordham Date: Mon, 13 Feb 2017 20:04:54 +1100 Subject: [PATCH] Strip the vendor'd section of the package path If the package that easyjson is being used on is vendor'd then we need to strip off the vendor'd bit of the pkg path Fixes: #29 See: golang/go#12739 --- parser/parser.go | 9 +++++ parser/parser_unix.go | 4 +-- parser/parser_windows.go | 74 ++++++++++++++++++++-------------------- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/parser/parser.go b/parser/parser.go index 1c0b94ca..d92b7723 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -89,3 +89,12 @@ func (p *Parser) Parse(fname string, isDir bool) error { } return nil } + +// fixes vendored paths +func fixPkgPathVendoring(pkgPath string) string { + const vendor = "/vendor/" + if i := strings.LastIndex(pkgPath, vendor); i != -1 { + return pkgPath[i+len(vendor):] + } + return pkgPath +} diff --git a/parser/parser_unix.go b/parser/parser_unix.go index a1b9d84d..01f3e431 100644 --- a/parser/parser_unix.go +++ b/parser/parser_unix.go @@ -22,9 +22,9 @@ func getPkgPath(fname string, isDir bool) (string, error) { prefix := path.Join(p, "src") + "/" if rel := strings.TrimPrefix(fname, prefix); rel != fname { if !isDir { - return path.Dir(rel), nil + return fixPkgPathVendoring(path.Dir(rel)), nil } else { - return path.Clean(rel), nil + return fixPkgPathVendoring(path.Clean(rel)), nil } } } diff --git a/parser/parser_windows.go b/parser/parser_windows.go index 64974aa9..47c9356c 100644 --- a/parser/parser_windows.go +++ b/parser/parser_windows.go @@ -1,37 +1,37 @@ -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 ( + "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 fixPkgPathVendoring(path.Dir(rel)), nil + } else { + return fixPkgPathVendoring(path.Clean(rel)), nil + } + } + } + + return "", fmt.Errorf("file '%v' is not in GOPATH", fname) +}