forked from mirror/pkger
match error for nonGoDirRx
This commit is contained in:
parent
794943f042
commit
ac15f56d3f
41
here/dir.go
41
here/dir.go
|
@ -2,6 +2,7 @@ package here
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
@ -9,7 +10,6 @@ import (
|
||||||
// Dir attempts to gather info for the requested directory.
|
// Dir attempts to gather info for the requested directory.
|
||||||
func Dir(p string) (Info, error) {
|
func Dir(p string) (Info, error) {
|
||||||
i, err := Cache(p, func(p string) (Info, error) {
|
i, err := Cache(p, func(p string) (Info, error) {
|
||||||
|
|
||||||
var i Info
|
var i Info
|
||||||
|
|
||||||
fi, err := os.Stat(p)
|
fi, err := os.Stat(p)
|
||||||
|
@ -35,8 +35,11 @@ func Dir(p string) (Info, error) {
|
||||||
// build .: cannot find module for path .
|
// build .: cannot find module for path .
|
||||||
// no Go files in
|
// no Go files in
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if nonGoDirRx.MatchString(err.Error()) {
|
||||||
return fromNonGoDir(p)
|
return fromNonGoDir(p)
|
||||||
}
|
}
|
||||||
|
return i, fmt.Errorf("%w %s", err, p)
|
||||||
|
}
|
||||||
|
|
||||||
if err := json.Unmarshal(b, &i); err != nil {
|
if err := json.Unmarshal(b, &i); err != nil {
|
||||||
return i, err
|
return i, err
|
||||||
|
@ -55,42 +58,6 @@ func Dir(p string) (Info, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dir(p string) (Info, error) {
|
|
||||||
var i Info
|
|
||||||
|
|
||||||
fi, err := os.Stat(p)
|
|
||||||
if err != nil {
|
|
||||||
return i, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !fi.IsDir() {
|
|
||||||
p = filepath.Dir(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
pwd, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return i, err
|
|
||||||
}
|
|
||||||
|
|
||||||
defer os.Chdir(pwd)
|
|
||||||
|
|
||||||
os.Chdir(p)
|
|
||||||
|
|
||||||
b, err := run("go", "list", "-json")
|
|
||||||
// go: cannot find main module; see 'go help modules'
|
|
||||||
// build .: cannot find module for path .
|
|
||||||
// no Go files in
|
|
||||||
if err != nil {
|
|
||||||
return fromNonGoDir(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := json.Unmarshal(b, &i); err != nil {
|
|
||||||
return i, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return i, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func fromNonGoDir(dir string) (Info, error) {
|
func fromNonGoDir(dir string) (Info, error) {
|
||||||
i := Info{
|
i := Info{
|
||||||
Dir: dir,
|
Dir: dir,
|
||||||
|
|
|
@ -47,6 +47,7 @@ func Test_Dir(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, tt := range table {
|
for _, tt := range table {
|
||||||
t.Run(tt.in, func(st *testing.T) {
|
t.Run(tt.in, func(st *testing.T) {
|
||||||
|
here.ClearCache()
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
info, err := here.Dir(tt.in)
|
info, err := here.Dir(tt.in)
|
||||||
|
|
Loading…
Reference in New Issue