mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
refactor: display git stash count
This commit is contained in:
parent
07c985a680
commit
6df97363b8
|
@ -50,3 +50,5 @@ Local changes can also shown by default using the following syntax for both the
|
||||||
- cherry_pick_icon: `string` - icon/text to display before the context when doing a cherry-pick
|
- cherry_pick_icon: `string` - icon/text to display before the context when doing a cherry-pick
|
||||||
- commit_icon: `string` - icon/text to display before the commit context
|
- commit_icon: `string` - icon/text to display before the commit context
|
||||||
- tag_icon: `string` - icon/text to display before the tag context
|
- tag_icon: `string` - icon/text to display before the tag context
|
||||||
|
- display_stash_count: `boolean` show stash count or not
|
||||||
|
- stash_count_icon: `string` icon/text to display before the stash context
|
||||||
|
|
|
@ -15,7 +15,7 @@ type gitRepo struct {
|
||||||
behind int
|
behind int
|
||||||
HEAD string
|
HEAD string
|
||||||
upstream string
|
upstream string
|
||||||
stashCount int
|
stashCount string
|
||||||
}
|
}
|
||||||
|
|
||||||
type gitStatus struct {
|
type gitStatus struct {
|
||||||
|
@ -57,6 +57,10 @@ const (
|
||||||
CommitIcon Property = "commit_icon"
|
CommitIcon Property = "commit_icon"
|
||||||
//TagIcon shows before the tag context
|
//TagIcon shows before the tag context
|
||||||
TagIcon Property = "tag_icon"
|
TagIcon Property = "tag_icon"
|
||||||
|
//DisplayStashCount show stash count or not
|
||||||
|
DisplayStashCount Property = "display_stash_count"
|
||||||
|
//StashCountIcon shows before the stash context
|
||||||
|
StashCountIcon Property = "stash_count_icon"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (g *git) enabled() bool {
|
func (g *git) enabled() bool {
|
||||||
|
@ -97,7 +101,9 @@ func (g *git) string() string {
|
||||||
if g.hasWorking() {
|
if g.hasWorking() {
|
||||||
fmt.Fprintf(buffer, " %s +%d ~%d -%d", g.props.getString(LocalWorkingIcon, "#"), g.repo.working.added+g.repo.working.untracked, g.repo.working.modified, g.repo.working.deleted)
|
fmt.Fprintf(buffer, " %s +%d ~%d -%d", g.props.getString(LocalWorkingIcon, "#"), g.repo.working.added+g.repo.working.untracked, g.repo.working.modified, g.repo.working.deleted)
|
||||||
}
|
}
|
||||||
// TODO: Add stash entries
|
if g.props.getBool(DisplayStashCount, false) && g.repo.stashCount != "" {
|
||||||
|
fmt.Fprintf(buffer, " %s%s", g.props.getString(StashCountIcon, ""), g.repo.stashCount)
|
||||||
|
}
|
||||||
return buffer.String()
|
return buffer.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,9 +216,8 @@ func (g *git) parseGitStats(output []string, working bool) *gitStatus {
|
||||||
return &status
|
return &status
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *git) getStashContext() int {
|
func (g *git) getStashContext() string {
|
||||||
stash := g.getGitCommandOutput("stash", "list")
|
return g.getGitCommandOutput("rev-list", "--walk-reflogs", "--count", "refs/stash")
|
||||||
return numberOfLinesInString(stash)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *git) hasStaging() bool {
|
func (g *git) hasStaging() bool {
|
||||||
|
@ -240,16 +245,3 @@ func groupDict(pattern *regexp.Regexp, haystack string) map[string]string {
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func numberOfLinesInString(s string) int {
|
|
||||||
n := 0
|
|
||||||
for _, r := range s {
|
|
||||||
if r == '\n' {
|
|
||||||
n++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(s) > 0 && !strings.HasSuffix(s, "\n") {
|
|
||||||
n++
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math/rand"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -186,9 +185,9 @@ func TestGetGitHEADContextCherryPickOnTag(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetStashContextZeroEntries(t *testing.T) {
|
func TestGetStashContextZeroEntries(t *testing.T) {
|
||||||
want := 0
|
want := ""
|
||||||
env := new(MockedEnvironment)
|
env := new(MockedEnvironment)
|
||||||
env.On("runCommand", "git", []string{"-c", "core.quotepath=false", "-c", "color.status=false", "stash", "list"}).Return("")
|
env.On("runCommand", "git", []string{"-c", "core.quotepath=false", "-c", "color.status=false", "rev-list", "--walk-reflogs", "--count", "refs/stash"}).Return("")
|
||||||
g := &git{
|
g := &git{
|
||||||
env: env,
|
env: env,
|
||||||
}
|
}
|
||||||
|
@ -197,24 +196,9 @@ func TestGetStashContextZeroEntries(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetStashContextMultipleEntries(t *testing.T) {
|
func TestGetStashContextMultipleEntries(t *testing.T) {
|
||||||
want := rand.Intn(100)
|
want := "2"
|
||||||
var response string
|
|
||||||
for i := 0; i < want; i++ {
|
|
||||||
response += "I'm a stash entry\n"
|
|
||||||
}
|
|
||||||
env := new(MockedEnvironment)
|
env := new(MockedEnvironment)
|
||||||
env.On("runCommand", "git", []string{"-c", "core.quotepath=false", "-c", "color.status=false", "stash", "list"}).Return(response)
|
env.On("runCommand", "git", []string{"-c", "core.quotepath=false", "-c", "color.status=false", "rev-list", "--walk-reflogs", "--count", "refs/stash"}).Return("2")
|
||||||
g := &git{
|
|
||||||
env: env,
|
|
||||||
}
|
|
||||||
got := g.getStashContext()
|
|
||||||
assert.Equal(t, want, got)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetStashContextOneEntry(t *testing.T) {
|
|
||||||
want := 1
|
|
||||||
env := new(MockedEnvironment)
|
|
||||||
env.On("runCommand", "git", []string{"-c", "core.quotepath=false", "-c", "color.status=false", "stash", "list"}).Return("stash entry")
|
|
||||||
g := &git{
|
g := &git{
|
||||||
env: env,
|
env: env,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue