parser_unix.go 779 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // +build !windows
  2. package parser
  3. import (
  4. "fmt"
  5. "os"
  6. "path"
  7. "strings"
  8. )
  9. func getPkgPath(fname string, isDir bool) (string, error) {
  10. if !path.IsAbs(fname) {
  11. pwd, err := os.Getwd()
  12. if err != nil {
  13. return "", err
  14. }
  15. fname = path.Join(pwd, fname)
  16. }
  17. gopath := os.Getenv("GOPATH")
  18. if gopath == "" {
  19. var err error
  20. gopath, err = getDefaultGoPath()
  21. if err != nil {
  22. return "", fmt.Errorf("cannot determine GOPATH: %s", err)
  23. }
  24. }
  25. for _, p := range strings.Split(os.Getenv("GOPATH"), ":") {
  26. prefix := path.Join(p, "src") + "/"
  27. if rel := strings.TrimPrefix(fname, prefix); rel != fname {
  28. if !isDir {
  29. return path.Dir(rel), nil
  30. } else {
  31. return path.Clean(rel), nil
  32. }
  33. }
  34. }
  35. return "", fmt.Errorf("file '%v' is not in GOPATH", fname)
  36. }