diff --git a/hello-world b/hello-world new file mode 100755 index 000000000..f57b78595 Binary files /dev/null and b/hello-world differ diff --git a/hello-world.go b/hello-world.go index 4cc31296e..266916bd4 100644 --- a/hello-world.go +++ b/hello-world.go @@ -9,23 +9,74 @@ import ( // "log" "os/exec" "os" + "strings" + "regexp" ) +func plus(a int, b int) int { + return a + b +} + +// from https://gobyexample.com/collection-functions +func Map(vs []string, f func(string) string) []string { + vsm := make([]string, len(vs)) + for i, v := range vs { + vsm[i] = f(v) + } + return vsm +} + +func sanitisedFileString(fileString string) string { + r := regexp.MustCompile("\\s| \\(new commits\\)|.* ") + fileString = r.ReplaceAllString(fileString, "") + return fileString +} + +func filesByMatches(statusString string, targets []string) []string { + files := make([]string, 0) + for _, target := range targets { + if strings.Index(statusString, target) == -1 { + continue + } + r := regexp.MustCompile("(?s)" + target + ".*?\n\n(.*?)\n\n") + fmt.Println(r) + + matchedFileStrings := strings.Split(r.FindStringSubmatch(statusString)[1], "\n") + // fmt.Println(matchedFileStrings) + + matchedFiles := Map(matchedFileStrings, sanitisedFileString) + // fmt.Println(matchedFiles) + files = append(files, matchedFiles...) + + } + fmt.Println(files) + return files +} + +func filesToStage(statusString string) []string { + targets := []string{"Changes not staged for commit:", "Untracked files:"} + return filesByMatches(statusString, targets) +} + +func runCommand(cmd string) (string, error) { + splitCmd := strings.Split(cmd, " ") + fmt.Println(splitCmd) + + cmdOut, err := exec.Command(splitCmd[0], splitCmd[1:]...).Output() + + // if err != nil { + // os.Exit(1) + // } + + return string(cmdOut), err +} + func main() { - var ( - cmdOut []byte - err error - ) - cmdName := "git" - cmdArgs := []string{"rev-parse", "--verify", "HEAD"} - if cmdOut, err = exec.Command(cmdName, cmdArgs...).Output(); err != nil { - fmt.Fprintln(os.Stderr, "There was an error running git rev-parse command: ", err) - fmt.Println(string(cmdOut)) - os.Exit(1) - } - sha := string(cmdOut) - firstSix := sha[:6] - fmt.Println("The first six chars of the SHA at HEAD in this repo are", firstSix) + statusString, _ := runCommand("git status") + fmt.Println(filesToStage(statusString)) + } + +