All Files / internal/utils / file.go

0% Statements 0/9
0% Functions 0/1
0% Lines 0/18
package utils

import (
        "errors"
        "fmt"
        "path"
        "path/filepath"
        "strings"
)

// findFile finds the location of the named file in GOROOT, GOPATH etc.
func FindFile(pkgs map[string]*Pkg, file string) (string, error) {
        if strings.HasPrefix(file, ".") || filepath.IsAbs(file) {
                // Relative or absolute path.
                return file, nil
        }
        pkg := pkgs[path.Dir(file)]
        if pkg != nil {
                if pkg.Dir != "" {
                        return filepath.Join(pkg.Dir, path.Base(file)), nil
                }
                if pkg.Error != nil {
                        return "", errors.New(pkg.Error.Err)
                }
        }
        return "", fmt.Errorf("did not find package for %s in go list output", file)
}