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  }