No Description

detect.go 2.9KB

    package main import ( "fmt" "os" "path" "./fileutil" ) /* detect - guess the project type from files present */ type Detection struct { Language string Type string } type detectorFunc func(string) bool type Detector struct { Detection Detection Detector detectorFunc } var Detectors = []Detector{ {Detection{"clojure", "leiningen"}, clojureLeiningen}, {Detection{"docker", "fig"}, dockerFig}, {Detection{"docker", "default"}, dockerDefault}, {Detection{"executable", "default"}, executableDefault}, {Detection{"go", "default"}, goDefault}, {Detection{"java", "maven"}, javaMaven}, {Detection{"javascript", "npm"}, javascriptNpm}, {Detection{"javascript", "meteor"}, javascriptMeteor}, {Detection{"javascript", "default"}, javascriptDefault}, {Detection{"make", "default"}, makeDefault}, {Detection{"procfile", "default"}, procfileDefault}, {Detection{"python", "django"}, pythonDjango}, {Detection{"python", "default"}, pythonDefault}, {Detection{"ruby", "rails"}, rubyRails}, {Detection{"ruby", "rake"}, rubyRake}, {Detection{"ruby", "default"}, rubyDefault}, } func main() { if len(os.Args) < 2 { fmt.Printf("Usage: %s <file>\n", os.Args[0]) os.Exit(1) } file := os.Args[1] for _, detector := range Detectors { fmt.Println(detector.Detection, detector.Detector(file)) } } func matchingFileOrDir(file string, pattern string) bool { if fileutil.IsFile(file) { _, f := path.Split(file) isMatch, _ := path.Match(pattern, f) return isMatch } else { return fileutil.MatchExists(path.Join(path.Dir(file), pattern)) } } func hasFile(fileOrDir string, file string) bool { return fileutil.IsFile(fileutil.Join(fileOrDir, file)) } func clojureLeiningen(file string) bool { return hasFile(file, "project.clj") } func dockerFig(file string) bool { return hasFile(file, "fig.yml") } func dockerDefault(file string) bool { return hasFile(file, "Dockerfile") } func executableDefault(file string) bool { return fileutil.IsExecutable(file) } func goDefault(file string) bool { return matchingFileOrDir(file, "*.go") } func javaMaven(file string) bool { return hasFile(file, "pom.xml") } func javascriptNpm(file string) bool { return hasFile(file, "package.json") } func javascriptMeteor(file string) bool { return hasFile(file, ".meteor/.id") } func javascriptDefault(file string) bool { return matchingFileOrDir(file, "*.js") } func makeDefault(file string) bool { return hasFile(file, "Makefile") } func procfileDefault(file string) bool { return hasFile(file, "Procfile") } func pythonDjango(file string) bool { return hasFile(file, "manage.py") } func pythonDefault(file string) bool { return matchingFileOrDir(file, "*.py") } func rubyRails(file string) bool { return hasFile(file, "bin/rails") } func rubyRake(file string) bool { return hasFile(file, "Rakefile") } func rubyDefault(file string) bool { return matchingFileOrDir(file, "*.rb") }