summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-10-08 16:46:04 +0200
committerStefan Haller <stefan@haller-berlin.de>2023-10-08 18:45:36 +0200
commit3d6965ccbbd992adc7cd68015dfd38309cbc8835 (patch)
treedeaf6ae598dd10e06747d248269c37e4c5addfb9
parent707fa37160e82c1c88cc44a7ae07762ccec48008 (diff)
Add inline status for pushing tags and deleting remote tags
-rw-r--r--pkg/commands/models/tag.go4
-rw-r--r--pkg/gui/context/tags_context.go5
-rw-r--r--pkg/gui/controllers/tags_controller.go13
-rw-r--r--pkg/gui/presentation/tags.go21
4 files changed, 35 insertions, 8 deletions
diff --git a/pkg/commands/models/tag.go b/pkg/commands/models/tag.go
index ab6076a7a..24cb83254 100644
--- a/pkg/commands/models/tag.go
+++ b/pkg/commands/models/tag.go
@@ -24,6 +24,10 @@ func (t *Tag) ID() string {
return t.RefName()
}
+func (t *Tag) URN() string {
+ return "tag-" + t.ID()
+}
+
func (t *Tag) Description() string {
return t.Message
}
diff --git a/pkg/gui/context/tags_context.go b/pkg/gui/context/tags_context.go
index 4a9f525f6..3da5a9576 100644
--- a/pkg/gui/context/tags_context.go
+++ b/pkg/gui/context/tags_context.go
@@ -27,7 +27,10 @@ func NewTagsContext(
)
getDisplayStrings := func(_ int, _ int) [][]string {
- return presentation.GetTagListDisplayStrings(viewModel.GetItems(), c.Modes().Diffing.Ref)
+ return presentation.GetTagListDisplayStrings(
+ viewModel.GetItems(),
+ c.State().GetItemOperation,
+ c.Modes().Diffing.Ref, c.Tr)
}
return &TagsContext{
diff --git a/pkg/gui/controllers/tags_controller.go b/pkg/gui/controllers/tags_controller.go
index 2fa24f734..224ad83a4 100644
--- a/pkg/gui/controllers/tags_controller.go
+++ b/pkg/gui/controllers/tags_controller.go
@@ -129,9 +129,9 @@ func (self *TagsController) remoteDelete(tag *models.Tag) error {
Title: confirmTitle,
Prompt: confirmPrompt,
HandleConfirm: func() error {
- return self.c.WithWaitingStatus(self.c.Tr.DeletingStatus, func(t gocui.Task) error {
+ return self.c.WithInlineStatus(tag, types.ItemOperationDeleting, context.TAGS_CONTEXT_KEY, func(task gocui.Task) error {
self.c.LogAction(self.c.Tr.Actions.DeleteRemoteTag)
- if err := self.c.Git().Remote.DeleteRemoteTag(t, upstream, tag.Name); err != nil {
+ if err := self.c.Git().Remote.DeleteRemoteTag(task, upstream, tag.Name); err != nil {
return err
}
self.c.Toast(self.c.Tr.RemoteTagDeletedMessage)
@@ -188,9 +188,16 @@ func (self *TagsController) push(tag *models.Tag) error {
InitialContent: "origin",
FindSuggestionsFunc: self.c.Helpers().Suggestions.GetRemoteSuggestionsFunc(),
HandleConfirm: func(response string) error {
- return self.c.WithWaitingStatus(self.c.Tr.PushingTagStatus, func(task gocui.Task) error {
+ return self.c.WithInlineStatus(tag, types.ItemOperationPushing, context.TAGS_CONTEXT_KEY, func(task gocui.Task) error {
self.c.LogAction(self.c.Tr.Actions.PushTag)
err := self.c.Git().Tag.Push(task, response, tag.Name)
+
+ // Render again to remove the inline status:
+ self.c.OnUIThread(func() error {
+ _ = self.c.Contexts().Tags.HandleRender()
+ return nil
+ })
+
return err
})
},
diff --git a/pkg/gui/presentation/tags.go b/pkg/gui/presentation/tags.go
index 13a0c9d77..9bdabcf40 100644
--- a/pkg/gui/presentation/tags.go
+++ b/pkg/gui/presentation/tags.go
@@ -4,19 +4,27 @@ import (
"github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/gui/presentation/icons"
"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/theme"
+ "github.com/jesseduffield/lazygit/pkg/utils"
"github.com/samber/lo"
)
-func GetTagListDisplayStrings(tags []*models.Tag, diffName string) [][]string {
+func GetTagListDisplayStrings(
+ tags []*models.Tag,
+ getItemOperation func(item types.HasUrn) types.ItemOperation,
+ diffName string,
+ tr *i18n.TranslationSet,
+) [][]string {
return lo.Map(tags, func(tag *models.Tag, _ int) []string {
diffed := tag.Name == diffName
- return getTagDisplayStrings(tag, diffed)
+ return getTagDisplayStrings(tag, getItemOperation(tag), diffed, tr)
})
}
// getTagDisplayStrings returns the display string of branch
-func getTagDisplayStrings(t *models.Tag, diffed bool) []string {
+func getTagDisplayStrings(t *models.Tag, itemOperation types.ItemOperation, diffed bool, tr *i18n.TranslationSet) []string {
textStyle := theme.DefaultTextColor
if diffed {
textStyle = theme.DiffTerminalColor
@@ -26,6 +34,11 @@ func getTagDisplayStrings(t *models.Tag, diffed bool) []string {
res = append(res, textStyle.Sprint(icons.IconForTag(t)))
}
descriptionColor := style.FgYellow
- res = append(res, textStyle.Sprint(t.Name), descriptionColor.Sprint(t.Description()))
+ descriptionStr := descriptionColor.Sprint(t.Description())
+ itemOperationStr := itemOperationToString(itemOperation, tr)
+ if itemOperationStr != "" {
+ descriptionStr = style.FgCyan.Sprint(itemOperationStr+" "+utils.Loader()) + " " + descriptionStr
+ }
+ res = append(res, textStyle.Sprint(t.Name), descriptionStr)
return res
}