mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
First pass at multi-Git repos. Works; no tick marks yet
This commit is contained in:
79
git/git_repo.go
Normal file
79
git/git_repo.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package git
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/senorprogrammer/wtf/wtf"
|
||||
)
|
||||
|
||||
type GitRepo struct {
|
||||
Branch string
|
||||
ChangedFiles []string
|
||||
Commits []string
|
||||
Repository string
|
||||
Path string
|
||||
}
|
||||
|
||||
func NewGitRepo(repoPath string) *GitRepo {
|
||||
repo := GitRepo{Path: repoPath}
|
||||
|
||||
repo.Branch = repo.branch()
|
||||
repo.ChangedFiles = repo.changedFiles()
|
||||
repo.Commits = repo.commits()
|
||||
repo.Repository = repo.repository()
|
||||
|
||||
return &repo
|
||||
}
|
||||
|
||||
/* -------------------- Unexported Functions -------------------- */
|
||||
|
||||
func (repo *GitRepo) branch() string {
|
||||
arg := []string{repo.gitDir(), repo.workTree(), "rev-parse", "--abbrev-ref", "HEAD"}
|
||||
|
||||
cmd := exec.Command("git", arg...)
|
||||
str := wtf.ExecuteCommand(cmd)
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func (repo *GitRepo) changedFiles() []string {
|
||||
arg := []string{repo.gitDir(), repo.workTree(), "status", "--porcelain"}
|
||||
|
||||
cmd := exec.Command("git", arg...)
|
||||
str := wtf.ExecuteCommand(cmd)
|
||||
|
||||
data := strings.Split(str, "\n")
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (repo *GitRepo) commits() []string {
|
||||
numStr := fmt.Sprintf("-n %d", Config.UInt("wtf.mods.git.commitCount", 10))
|
||||
|
||||
arg := []string{repo.gitDir(), repo.workTree(), "log", "--date=format:\"%b %d, %Y\"", numStr, "--pretty=format:\"[forestgreen]%h [white]%s [grey]%an on %cd[white]\""}
|
||||
|
||||
cmd := exec.Command("git", arg...)
|
||||
str := wtf.ExecuteCommand(cmd)
|
||||
|
||||
data := strings.Split(str, "\n")
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (repo *GitRepo) repository() string {
|
||||
arg := []string{repo.gitDir(), repo.workTree(), "rev-parse", "--show-toplevel"}
|
||||
cmd := exec.Command("git", arg...)
|
||||
str := wtf.ExecuteCommand(cmd)
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func (repo *GitRepo) gitDir() string {
|
||||
return fmt.Sprintf("--git-dir=%s/.git", repo.Path)
|
||||
}
|
||||
|
||||
func (repo *GitRepo) workTree() string {
|
||||
return fmt.Sprintf("--work-tree=%s", repo.Path)
|
||||
}
|
||||
Reference in New Issue
Block a user