mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-11 12:25:47 +02:00
Remove ColoredBranchStatus and branchStatusColor
Previously the entire status was colored in a single color, so the API made sense. This is going to change later in this branch, so now we must include the color in the string returned from BranchStatus(), which means that callers who need to do hit detection or measure the length need to decolorize it. While we're at it, switch the order of ↑3↓7 to ↓7↑3. For some reason that I can't really explain I find it more logical this way. The software out there is pretty undecided about it, it seems: VS Code puts ↓7 first, and so does the shell prompt that comes with git; git status and git branch -v put "ahead" first though. Shrug.
This commit is contained in:
parent
aba0290e51
commit
e7ac70c415
10 changed files with 26 additions and 48 deletions
|
@ -12,6 +12,7 @@ import (
|
|||
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
|
@ -116,7 +117,7 @@ func (self *StatusController) onClick(opts gocui.ViewMouseBindingOpts) error {
|
|||
return err
|
||||
}
|
||||
|
||||
upstreamStatus := presentation.BranchStatus(currentBranch, types.ItemOperationNone, self.c.Tr, time.Now(), self.c.UserConfig)
|
||||
upstreamStatus := utils.Decolorise(presentation.BranchStatus(currentBranch, types.ItemOperationNone, self.c.Tr, time.Now(), self.c.UserConfig))
|
||||
repoName := self.c.Git().RepoPaths.RepoName()
|
||||
workingTreeState := self.c.Git().Status.WorkingTreeState()
|
||||
switch workingTreeState {
|
||||
|
|
|
@ -56,7 +56,7 @@ func getBranchDisplayStrings(
|
|||
// Recency is always three characters, plus one for the space
|
||||
availableWidth := viewWidth - 4
|
||||
if len(branchStatus) > 0 {
|
||||
availableWidth -= runewidth.StringWidth(branchStatus) + 1
|
||||
availableWidth -= runewidth.StringWidth(utils.Decolorise(branchStatus)) + 1
|
||||
}
|
||||
if icons.IsIconEnabled() {
|
||||
availableWidth -= 2 // one for the icon, one for the space
|
||||
|
@ -89,8 +89,7 @@ func getBranchDisplayStrings(
|
|||
coloredName = fmt.Sprintf("%s %s", coloredName, style.FgDefault.Sprint(worktreeIcon))
|
||||
}
|
||||
if len(branchStatus) > 0 {
|
||||
coloredStatus := branchStatusColor(b, itemOperation).Sprint(branchStatus)
|
||||
coloredName = fmt.Sprintf("%s %s", coloredName, coloredStatus)
|
||||
coloredName = fmt.Sprintf("%s %s", coloredName, branchStatus)
|
||||
}
|
||||
|
||||
recencyColor := style.FgCyan
|
||||
|
@ -144,30 +143,6 @@ func GetBranchTextStyle(name string) style.TextStyle {
|
|||
}
|
||||
}
|
||||
|
||||
func branchStatusColor(branch *models.Branch, itemOperation types.ItemOperation) style.TextStyle {
|
||||
colour := style.FgYellow
|
||||
if itemOperation != types.ItemOperationNone {
|
||||
colour = style.FgCyan
|
||||
} else if branch.UpstreamGone {
|
||||
colour = style.FgRed
|
||||
} else if branch.MatchesUpstream() {
|
||||
colour = style.FgGreen
|
||||
} else if branch.RemoteBranchNotStoredLocally() {
|
||||
colour = style.FgMagenta
|
||||
}
|
||||
|
||||
return colour
|
||||
}
|
||||
|
||||
func ColoredBranchStatus(
|
||||
branch *models.Branch,
|
||||
itemOperation types.ItemOperation,
|
||||
tr *i18n.TranslationSet,
|
||||
userConfig *config.UserConfig,
|
||||
) string {
|
||||
return branchStatusColor(branch, itemOperation).Sprint(BranchStatus(branch, itemOperation, tr, time.Now(), userConfig))
|
||||
}
|
||||
|
||||
func BranchStatus(
|
||||
branch *models.Branch,
|
||||
itemOperation types.ItemOperation,
|
||||
|
@ -177,7 +152,7 @@ func BranchStatus(
|
|||
) string {
|
||||
itemOperationStr := ItemOperationToString(itemOperation, tr)
|
||||
if itemOperationStr != "" {
|
||||
return itemOperationStr + " " + utils.Loader(now, userConfig.Gui.Spinner)
|
||||
return style.FgCyan.Sprintf("%s %s", itemOperationStr, utils.Loader(now, userConfig.Gui.Spinner))
|
||||
}
|
||||
|
||||
if !branch.IsTrackingRemote() {
|
||||
|
@ -185,25 +160,27 @@ func BranchStatus(
|
|||
}
|
||||
|
||||
if branch.UpstreamGone {
|
||||
return tr.UpstreamGone
|
||||
return style.FgRed.Sprint(tr.UpstreamGone)
|
||||
}
|
||||
|
||||
if branch.MatchesUpstream() {
|
||||
return "✓"
|
||||
return style.FgGreen.Sprint("✓")
|
||||
}
|
||||
if branch.RemoteBranchNotStoredLocally() {
|
||||
return "?"
|
||||
return style.FgMagenta.Sprint("?")
|
||||
}
|
||||
|
||||
result := ""
|
||||
if branch.HasCommitsToPush() {
|
||||
result = fmt.Sprintf("↑%s", branch.Pushables)
|
||||
if branch.HasCommitsToPull() && branch.HasCommitsToPush() {
|
||||
return style.FgYellow.Sprintf("↓%s↑%s", branch.Pullables, branch.Pushables)
|
||||
}
|
||||
if branch.HasCommitsToPull() {
|
||||
result = fmt.Sprintf("%s↓%s", result, branch.Pullables)
|
||||
return style.FgYellow.Sprintf("↓%s", branch.Pullables)
|
||||
}
|
||||
if branch.HasCommitsToPush() {
|
||||
return style.FgYellow.Sprintf("↑%s", branch.Pushables)
|
||||
}
|
||||
|
||||
return result
|
||||
return ""
|
||||
}
|
||||
|
||||
func SetCustomBranches(customBranchColors map[string]string) {
|
||||
|
|
|
@ -81,7 +81,7 @@ func Test_getBranchDisplayStrings(t *testing.T) {
|
|||
viewWidth: 100,
|
||||
useIcons: false,
|
||||
checkedOutByWorktree: true,
|
||||
expected: []string{"1m", "branch_name (worktree) ↑3↓5"},
|
||||
expected: []string{"1m", "branch_name (worktree) ↓5↑3"},
|
||||
},
|
||||
{
|
||||
branch: &models.Branch{Name: "branch_name", Recency: "1m"},
|
||||
|
@ -167,7 +167,7 @@ func Test_getBranchDisplayStrings(t *testing.T) {
|
|||
viewWidth: 30,
|
||||
useIcons: false,
|
||||
checkedOutByWorktree: true,
|
||||
expected: []string{"1m", "branch_na… (worktree) ↑3↓5"},
|
||||
expected: []string{"1m", "branch_na… (worktree) ↓5↑3"},
|
||||
},
|
||||
{
|
||||
branch: &models.Branch{Name: "branch_name", Recency: "1m"},
|
||||
|
|
|
@ -2,6 +2,7 @@ package presentation
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
||||
|
@ -10,7 +11,6 @@ import (
|
|||
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/jesseduffield/lazygit/pkg/i18n"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
)
|
||||
|
||||
func FormatStatus(
|
||||
|
@ -25,8 +25,8 @@ func FormatStatus(
|
|||
status := ""
|
||||
|
||||
if currentBranch.IsRealBranch() {
|
||||
status += ColoredBranchStatus(currentBranch, itemOperation, tr, userConfig)
|
||||
if utils.Decolorise(status) != "" {
|
||||
status += BranchStatus(currentBranch, itemOperation, tr, time.Now(), userConfig)
|
||||
if status != "" {
|
||||
status += " "
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ var PullMerge = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Equals("↑1↓2 repo → master"))
|
||||
t.Views().Status().Content(Equals("↓2↑1 repo → master"))
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
|
|
|
@ -34,7 +34,7 @@ var PullMergeConflict = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Equals("↑1↓2 repo → master"))
|
||||
t.Views().Status().Content(Equals("↓2↑1 repo → master"))
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
|
|
|
@ -35,7 +35,7 @@ var PullRebase = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Equals("↑1↓2 repo → master"))
|
||||
t.Views().Status().Content(Equals("↓2↑1 repo → master"))
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
|
|
|
@ -34,7 +34,7 @@ var PullRebaseConflict = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Equals("↑1↓2 repo → master"))
|
||||
t.Views().Status().Content(Equals("↓2↑1 repo → master"))
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
|
|
|
@ -38,7 +38,7 @@ var PullRebaseInteractiveConflict = NewIntegrationTest(NewIntegrationTestArgs{
|
|||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Equals("↑2↓2 repo → master"))
|
||||
t.Views().Status().Content(Equals("↓2↑2 repo → master"))
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
|
|
|
@ -38,7 +38,7 @@ var PullRebaseInteractiveConflictDrop = NewIntegrationTest(NewIntegrationTestArg
|
|||
Contains("one"),
|
||||
)
|
||||
|
||||
t.Views().Status().Content(Equals("↑2↓2 repo → master"))
|
||||
t.Views().Status().Content(Equals("↓2↑2 repo → master"))
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue