mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Git now displays changed files and last ten commits
This commit is contained in:
parent
e1e8af5e38
commit
a79588e9cc
@ -4,6 +4,7 @@ import (
|
|||||||
//"fmt"
|
//"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
@ -31,15 +32,23 @@ func (client *Client) CurrentBranch() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (client *Client) ChangedFiles() []string {
|
func (client *Client) ChangedFiles() []string {
|
||||||
files := []string{}
|
arg := []string{"status", "--porcelain"}
|
||||||
|
cmd := exec.Command("git", arg...)
|
||||||
|
str := executeCommand(cmd)
|
||||||
|
|
||||||
return files
|
data := strings.Split(str, "\n")
|
||||||
|
|
||||||
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *Client) Commits() []string {
|
func (client *Client) Commits() []string {
|
||||||
files := []string{}
|
arg := []string{"log", "--date=format:\"%b %d, %Y\"", "-n 10", "--pretty=format:\"[forestgreen]%h [white]%s [grey]%an on %cd[white]\""}
|
||||||
|
cmd := exec.Command("git", arg...)
|
||||||
|
str := executeCommand(cmd)
|
||||||
|
|
||||||
return files
|
data := strings.Split(str, "\n")
|
||||||
|
|
||||||
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------- Unexported Functions -------------------- */
|
/* -------------------- Unexported Functions -------------------- */
|
||||||
|
@ -9,7 +9,7 @@ func Fetch() map[string][]string {
|
|||||||
|
|
||||||
result["repo"] = []string{client.Repository}
|
result["repo"] = []string{client.Repository}
|
||||||
result["branch"] = []string{client.CurrentBranch()}
|
result["branch"] = []string{client.CurrentBranch()}
|
||||||
result["changed"] = client.ChangedFiles()
|
result["changes"] = client.ChangedFiles()
|
||||||
result["commits"] = client.Commits()
|
result["commits"] = client.Commits()
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -2,7 +2,9 @@ package git
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
"github.com/senorprogrammer/wtf/wtf"
|
"github.com/senorprogrammer/wtf/wtf"
|
||||||
@ -48,18 +50,77 @@ func (widget *Widget) addView() {
|
|||||||
view.SetBorder(true)
|
view.SetBorder(true)
|
||||||
view.SetDynamicColors(true)
|
view.SetDynamicColors(true)
|
||||||
view.SetTitle(widget.Name)
|
view.SetTitle(widget.Name)
|
||||||
|
view.SetWrap(false)
|
||||||
|
|
||||||
widget.View = view
|
widget.View = view
|
||||||
}
|
}
|
||||||
|
|
||||||
func (widget *Widget) contentFrom(data map[string][]string) string {
|
func (widget *Widget) contentFrom(data map[string][]string) string {
|
||||||
str := "\n"
|
str := "\n"
|
||||||
str = str + fmt.Sprintf(" [green]%s[white] [grey]%s[white]\n", data["repo"][0], data["branch"][0])
|
str = str + fmt.Sprintf(" [green]%s[white] [dodgerblue]%s[white]\n", data["repo"][0], data["branch"][0])
|
||||||
|
|
||||||
|
str = str + widget.formatChanges(data["changes"])
|
||||||
str = str + "\n"
|
str = str + "\n"
|
||||||
|
str = str + widget.formatCommits(data["commits"])
|
||||||
|
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (widget *Widget) formatChanges(data []string) string {
|
||||||
|
str := ""
|
||||||
|
str = str + " [red]Changed Files[white]\n"
|
||||||
|
|
||||||
|
for _, line := range data {
|
||||||
|
str = str + widget.formatChange(line)
|
||||||
|
}
|
||||||
|
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
func (widget *Widget) formatChange(line string) string {
|
||||||
|
if len(line) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
line = strings.TrimSpace(line)
|
||||||
|
firstChar, _ := utf8.DecodeRuneInString(line)
|
||||||
|
|
||||||
|
// Revisit this and kill the ugly duplication
|
||||||
|
switch firstChar {
|
||||||
|
case 'A':
|
||||||
|
line = strings.Replace(line, "A", "[green]A[white]", 1)
|
||||||
|
case 'D':
|
||||||
|
line = strings.Replace(line, "D", "[red]D[white]", 1)
|
||||||
|
case 'M':
|
||||||
|
line = strings.Replace(line, "M", "[blue]M[white]", 1)
|
||||||
|
case 'R':
|
||||||
|
line = strings.Replace(line, "R", "[purple]R[white]", 1)
|
||||||
|
case '!':
|
||||||
|
line = strings.Replace(line, "!", "[yellow]![white]", 1)
|
||||||
|
case '?':
|
||||||
|
line = strings.Replace(line, "?", "[yellow]?[white]", 1)
|
||||||
|
default:
|
||||||
|
line = line
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf(" %s\n", strings.Replace(line, "\"", "", -1))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (widget *Widget) formatCommits(data []string) string {
|
||||||
|
str := ""
|
||||||
|
str = str + " [red]Recent Commits[white]\n"
|
||||||
|
|
||||||
|
for _, line := range data {
|
||||||
|
str = str + widget.formatCommit(line)
|
||||||
|
}
|
||||||
|
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
func (widget *Widget) formatCommit(line string) string {
|
||||||
|
return fmt.Sprintf(" %s\n", strings.Replace(line, "\"", "", -1))
|
||||||
|
}
|
||||||
|
|
||||||
func (widget *Widget) refresher() {
|
func (widget *Widget) refresher() {
|
||||||
tick := time.NewTicker(time.Duration(widget.RefreshInterval) * time.Minute)
|
tick := time.NewTicker(time.Duration(widget.RefreshInterval) * time.Minute)
|
||||||
quit := make(chan struct{})
|
quit := make(chan struct{})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user