mirror of https://github.com/go-python/gopy.git
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
// Copyright 2015 The go-python Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"go/build"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// GoSrcDir tries to locate dir in GOPATH/src/ or GOROOT/src/pkg/ and returns its
|
|
// full path. GOPATH may contain a list of paths. From Robin Elkind github.com/mewkiz/pkg
|
|
func GoSrcDir(dir string) (absDir string, err error) {
|
|
for _, srcDir := range build.Default.SrcDirs() {
|
|
absDir = filepath.Join(srcDir, dir)
|
|
finfo, err := os.Stat(absDir)
|
|
if err == nil && finfo.IsDir() {
|
|
return absDir, nil
|
|
}
|
|
}
|
|
return "", fmt.Errorf("GoSrcDir: unable to locate directory (%q) in GOPATH/src/ (%q) or GOROOT/src/pkg/ (%q)", dir, os.Getenv("GOPATH"), os.Getenv("GOROOT"))
|
|
}
|
|
|
|
// Dirs returns a slice of all the directories within a given directory
|
|
func Dirs(path string) []string {
|
|
files, err := ioutil.ReadDir(path)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
var fnms []string
|
|
for _, fi := range files {
|
|
if fi.IsDir() {
|
|
fnms = append(fnms, fi.Name())
|
|
}
|
|
}
|
|
return fnms
|
|
}
|
|
|
|
// GoFiles returns a slice of all the go files within a given directory
|
|
func GoFiles(path string) []string {
|
|
files, err := ioutil.ReadDir(path)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
var fnms []string
|
|
for _, fi := range files {
|
|
if !fi.IsDir() && strings.HasSuffix(fi.Name(), ".go") {
|
|
fnms = append(fnms, fi.Name())
|
|
}
|
|
}
|
|
return fnms
|
|
}
|