使用方式 ./command -p [git 目录] -s [每s秒查看一次git版本变化,默认60]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | 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() } |