// This is a simple example package repostatus import ( "os" "os/exec" "strings" "regexp" "go.wit.com/log" ) func fullpath(repo string) string { return "/home/jcarr/go/src/" + repo } func run(path string, thing string, cmdline string) string { parts := strings.Split(cmdline, " ") // Create the command cmd := exec.Command(thing, parts...) // Set the working directory cmd.Dir = fullpath(path) // Execute the command output, err := cmd.CombinedOutput() if err != nil { log.Error(err, "cmd error'd out", parts) return "" } tmp := string(output) tmp = strings.TrimSpace(tmp) // Print the output log.Log(WARN, "run()", path, thing, cmdline, "=", tmp) return tmp } func listFiles(directory string) []string { var files []string fileInfo, err := os.ReadDir(directory) if err != nil { log.Error(err) return nil } for _, file := range fileInfo { if !file.IsDir() { files = append(files, file.Name()) } } return files } /* // string handling examples that might be helpful for normalizeInt() isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString for _, username := range []string{"userone", "user2", "user-three"} { if !isAlpha(username) { log.Log(GUI, "%q is not valid\n", username) } } const alpha = "abcdefghijklmnopqrstuvwxyz" func alphaOnly(s string) bool { for _, char := range s { if !strings.Contains(alpha, strings.ToLower(string(char))) { return false } } return true } */ func normalizeVersion(s string) string { // reg, err := regexp.Compile("[^a-zA-Z0-9]+") parts := strings.Split(s, "-") if len(parts) == 0 { return "" } reg, err := regexp.Compile("[^0-9.]+") if err != nil { log.Log(WARN, "normalizeVersion() regexp.Compile() ERROR =", err) return parts[0] } clean := reg.ReplaceAllString(parts[0], "") log.Log(WARN, "normalizeVersion() s =", clean) return clean } func splitVersion(version string) (a, b, c string) { tmp := normalizeVersion(version) parts := strings.Split(tmp, ".") switch len(parts) { case 1: return parts[0], "", "" case 2: return parts[0], parts[1], "" default: return parts[0], parts[1], parts[2] } } func runCmd(path string, parts []string) (bool, string) { if len(parts) == 0 { log.Warn("command line was empty") return false, "" } if parts[0] == "" { log.Warn("command line was empty") return false, "" } thing := parts[0] parts = parts[1:] log.Warn("path =", path, "thing =", thing, "cmdline =", parts) // Create the command cmd := exec.Command(thing, parts...) // Set the working directory cmd.Dir = fullpath(path) // Execute the command output, err := cmd.CombinedOutput() if err != nil { log.Error(err) log.Warn("output was", output) log.Warn("cmd exited with error", err) return false, string(output) } tmp := string(output) tmp = strings.TrimSpace(tmp) // Print the output return true, tmp }