123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package main
- import (
- "flag"
- "fmt"
- "os"
- "regexp"
- "strings"
- "github.com/pkg/errors"
- )
- var (
- flagDep = flag.String("dep", "main,live,openplatform,ep", "department list , split by comma")
- flagPrefix = flag.String("prefix", `business`, "prefix path")
- flagService = flag.String("serivce", "interface,job,admin,service", "service type")
- // flagWhite prefix下允许的dir名称
- flagWhite = flag.String("white", "", "white subpath from prefix , split by comma")
- )
- const (
- codeSuccess = 0
- codeFail = 1
- )
- func main() {
- flag.Parse()
- var (
- depList []string
- serviceList []string
- filePathList []string
- whiteDirList []string
- )
- filePathList = flag.Args()
- if len(filePathList) <= 0 {
- fmt.Println("No file to check")
- os.Exit(codeSuccess)
- }
- depList = strings.Split(*flagDep, ",")
- serviceList = strings.Split(*flagService, ",")
- for _, wd := range strings.Split(*flagWhite, ",") {
- if wd != "" {
- whiteDirList = append(whiteDirList, strings.Join([]string{*flagPrefix, wd}, "/"))
- }
- }
- code := check(filePathList, serviceList, depList, whiteDirList)
- os.Exit(code)
- }
- func check(filePathList []string, serviceTypeList []string, depList []string, whiteDirList []string) (code int) {
- var (
- regDep = strings.Join(depList, "|")
- serviceType = strings.Join(serviceTypeList, "|")
- regStr = fmt.Sprintf(`%s/(%s)/(%s)`, *flagPrefix, serviceType, regDep)
- reg *regexp.Regexp
- flag = true
- failedFiles []string
- err error
- )
- regStr = strings.Replace(regStr, "/", `\/`, -1)
- if reg, err = regexp.Compile(regStr); err != nil {
- err = errors.Wrapf(err, "regexp : %s", regStr)
- fmt.Printf("%+v\n", err)
- code = codeFail
- return
- }
- for _, p := range filePathList {
- if strings.HasPrefix(p, *flagPrefix) {
- if whiteCheck(whiteDirList, p) {
- continue
- }
- if !reg.MatchString(p) {
- failedFiles = append(failedFiles, p)
- flag = false
- break
- }
- }
- }
- if !flag {
- fmt.Println("invalid files : ")
- for _, f := range failedFiles {
- fmt.Printf("\t%s\n", f)
- }
- code = codeFail
- } else {
- code = codeSuccess
- }
- return
- }
- func whiteCheck(whiteDirList []string, path string) bool {
- for _, wd := range whiteDirList {
- if strings.HasPrefix(path, wd) {
- return true
- }
- }
- return false
- }
|