使用方式 ./command -p [git 目录] -s [每s秒查看一次git版本变化,默认60]
package main import ( "bytes" "flag" "fmt" "log" "os" "os/exec" "strings" "sync" "time" ) var gitVersion = "" var wg sync.WaitGroup var path string var sleepTime int func ExecCommand(command string, params []string, dir string) string{ cmd := exec.Command(command, params...) if dir != "" { cmd.Dir = dir } var out bytes.Buffer cmd.Stdout = &out err := cmd.Run() if err != nil { log.Fatal("error ", err) } return out.String() } func InitArgs() { flag.StringVar(&path, "p", "", "git路径") flag.IntVar(&sleepTime, "s", 60, "每多少秒检查一次git version") flag.Parse() } func dirExists(p string) bool{ fi, err := os.Stat(p) if err != nil { return false } return fi.IsDir() } func getVerson(vChan chan <- string){ for { ExecCommand("git", []string{"pull"}, path) out := ExecCommand("git", []string{ "log", "-1"}, path) lines := strings.Split(out, "\n") vChan <- strings.Split(lines[0], " ")[1] time.Sleep( time.Second * time.Duration(sleepTime) ) } wg.Done() } func do(vChan <- chan string){ for{ _v := <- vChan if _v != gitVersion { fmt.Println("获取到新版本,开始更新...") gitVersion = _v res2 := ExecCommand("yarn", []string{}, path) res3 := ExecCommand("yarn", []string{"build"}, path) fmt.Println("已经构建完成:", res2, res3) fmt.Println("当前版本为:"+gitVersion) } } } func main() { InitArgs() if path == "" { log.Fatal("路径参数不能为空") } if !dirExists(path) { log.Fatal("目录不存在:" + path) } fmt.Println("开始监控目录:",path) vChan := make(chan string, 1) wg.Add(2) go getVerson(vChan) go do(vChan) wg.Wait() }