github.com/titpetric/pendulum@v0.1.180207-1512.0.20180514135826-1f399445df57/cmd/pendulum/git.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "strings" 8 "time" 9 10 "os/exec" 11 ) 12 13 type Git struct { 14 Filename string 15 } 16 17 func (r *Git) Commit() (string, error) { 18 cwd, err := os.Getwd() 19 if err != nil { 20 return "", err 21 } 22 err = os.Chdir(path.Dir(r.Filename)) 23 if err != nil { 24 return "", err 25 } 26 defer os.Chdir(cwd) 27 28 // Don't error out if git isn't configured 29 name := r.UserName() 30 email := r.UserEmail() 31 if name == "" || email == "" { 32 return "", nil 33 } 34 35 hostname, _ := os.Hostname() 36 message := fmt.Sprintf("Edited with Pendulum@%s on %s", hostname, time.Now().Format(time.UnixDate)) 37 38 output := r.exec([]string{"git", "add", path.Base(r.Filename)}) 39 return output + "\n" + r.exec([]string{"git", "commit", "-m", message}), nil 40 } 41 42 func (r *Git) UserName() string { 43 return r.exec(strings.Split("git config user.name", " ")) 44 } 45 46 func (r *Git) UserEmail() string { 47 return r.exec(strings.Split("git config user.email", " ")) 48 } 49 50 func (r *Git) exec(cmdArgs []string) string { 51 cmdName := cmdArgs[0] 52 if cmdOut, err := exec.Command(cmdName, cmdArgs[1:]...).Output(); err == nil { 53 return strings.TrimSpace(string(cmdOut)) 54 } 55 return "" 56 }