fix: This fixes #247

Moved isBeegoProject(app) method from pack.go to util.go. Rewrite it
to walk the application folder tree looking for main files.
This commit is contained in:
Faissal Elamraoui 2016-09-26 20:25:15 +02:00
parent f7d2e04e07
commit 287af20d1a
2 changed files with 36 additions and 22 deletions

19
pack.go
View File

@ -21,7 +21,6 @@ import (
"flag"
"fmt"
"io"
"io/ioutil"
"os"
"os/exec"
path "path/filepath"
@ -454,24 +453,6 @@ func packDirectory(excludePrefix []string, excludeSuffix []string,
return
}
func isBeegoProject(thePath string) bool {
fh, _ := os.Open(thePath)
fis, _ := fh.Readdir(-1)
regex := regexp.MustCompile(`(?s)package main.*?import.*?\(.*?github.com/astaxie/beego".*?\).*func main()`)
for _, fi := range fis {
if fi.IsDir() == false && strings.HasSuffix(fi.Name(), ".go") {
data, err := ioutil.ReadFile(path.Join(thePath, fi.Name()))
if err != nil {
continue
}
if len(regex.Find(data)) > 0 {
return true
}
}
}
return false
}
func packApp(cmd *Command, args []string) int {
ShowShortVersionBanner()

39
util.go
View File

@ -15,14 +15,16 @@
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
"regexp"
"runtime"
"strings"
"time"
"path"
"fmt"
)
// Go is a basic promise implementation: it wraps calls a function in a goroutine
@ -35,7 +37,7 @@ func Go(f func() error) chan error {
return ch
}
// if os.env DEBUG set, debug is on
// Debugf outputs a formtted debug message, when os.env DEBUG is set.
func Debugf(format string, a ...interface{}) {
if os.Getenv("DEBUG") != "" {
_, file, line, ok := runtime.Caller(1)
@ -174,6 +176,37 @@ func GetGOPATHs() []string {
return paths
}
func isBeegoProject(thePath string) bool {
mainFiles := []string{}
hasBeegoRegex := regexp.MustCompile(`(?s)package main.*?import.*?\(.*?github.com/astaxie/beego".*?\).*func main()`)
// Walk the application path tree to look for main files.
// Main files must satisfy the 'hasBeegoRegex' regular expression.
err := filepath.Walk(thePath, func(fpath string, f os.FileInfo, err error) error {
if !f.IsDir() { // Skip sub-directories
data, _err := ioutil.ReadFile(fpath)
if _err != nil {
return _err
}
if len(hasBeegoRegex.Find(data)) > 0 {
mainFiles = append(mainFiles, fpath)
}
}
return nil
})
if err != nil {
log.Fatalf("Unable to walk '%s' tree: %v", thePath, err)
return false
}
if len(mainFiles) > 0 {
return true
}
return false
}
// SearchGOPATHs searchs the user GOPATH(s) for the specified application name.
// It returns a boolean, the application's GOPATH and its full path.
func SearchGOPATHs(app string) (bool, string, string) {
gps := GetGOPATHs()
if len(gps) == 0 {