From 2592bc6939cefe2a2eac3746d4dbf9d1b5c7a474 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 25 Sep 2023 20:50:24 +0200 Subject: [PATCH] Add inline status for pushing tags and deleting remote tags --- pkg/gui/context/tags_context.go | 7 ++++++- pkg/gui/controllers/tags_controller.go | 13 +++++++++++++ pkg/gui/presentation/ref_operations.go | 2 ++ pkg/gui/presentation/tags.go | 21 +++++++++++++++++---- pkg/gui/types/common.go | 1 + 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/pkg/gui/context/tags_context.go b/pkg/gui/context/tags_context.go index 4a9f525f6..c9df8c853 100644 --- a/pkg/gui/context/tags_context.go +++ b/pkg/gui/context/tags_context.go @@ -27,7 +27,12 @@ func NewTagsContext( ) getDisplayStrings := func(_ int, _ int) [][]string { - return presentation.GetTagListDisplayStrings(viewModel.GetItems(), c.Modes().Diffing.Ref) + return presentation.GetTagListDisplayStrings( + viewModel.GetItems(), + func(tag *models.Tag) types.RefOperation { + return c.State().GetRefOperation(tag.FullRefName()) + }, + 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 91d590c32..bec53dc0a 100644 --- a/pkg/gui/controllers/tags_controller.go +++ b/pkg/gui/controllers/tags_controller.go @@ -131,6 +131,9 @@ func (self *TagsController) remoteDelete(tag *models.Tag) error { Prompt: confirmPrompt, HandleConfirm: func() error { return self.c.WithWaitingStatus(self.c.Tr.DeletingStatus, func(t gocui.Task) error { + self.c.State().SetRefOperation(tag.FullRefName(), types.RefOperationDeleting, context.TAGS_CONTEXT_KEY) + defer func() { self.c.State().ClearRefOperation(tag.FullRefName(), context.TAGS_CONTEXT_KEY) }() + self.c.LogAction(self.c.Tr.Actions.DeleteRemoteTag) if err := self.c.Git().Remote.DeleteRemoteTag(t, upstream, tag.Name); err != nil { return self.c.Error(err) @@ -190,6 +193,16 @@ func (self *TagsController) push(tag *models.Tag) error { FindSuggestionsFunc: self.c.Helpers().Suggestions.GetRemoteSuggestionsFunc(), HandleConfirm: func(response string) error { return self.c.WithWaitingStatus(self.c.Tr.PushingTagStatus, func(task gocui.Task) error { + self.c.State().SetRefOperation(tag.FullRefName(), types.RefOperationPushing, context.TAGS_CONTEXT_KEY) + defer func() { + self.c.State().ClearRefOperation(tag.FullRefName(), context.TAGS_CONTEXT_KEY) + // Render again to remove the inline status: + self.c.OnUIThread(func() error { + _ = self.c.Contexts().Tags.HandleRender() + return nil + }) + }() + self.c.LogAction(self.c.Tr.Actions.PushTag) err := self.c.Git().Tag.Push(task, response, tag.Name) if err != nil { diff --git a/pkg/gui/presentation/ref_operations.go b/pkg/gui/presentation/ref_operations.go index b87b3fbb4..0d7331569 100644 --- a/pkg/gui/presentation/ref_operations.go +++ b/pkg/gui/presentation/ref_operations.go @@ -15,6 +15,8 @@ func refOperationToString(refOperation types.RefOperation, tr *i18n.TranslationS return tr.PullingStatus case types.RefOperationFastForwarding: return tr.FastForwardingOperation + case types.RefOperationDeleting: + return tr.DeletingStatus } return "" diff --git a/pkg/gui/presentation/tags.go b/pkg/gui/presentation/tags.go index 13a0c9d77..ed6cad392 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, + getRefOperation func(branch *models.Tag) types.RefOperation, + 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, getRefOperation(tag), diffed, tr) }) } // getTagDisplayStrings returns the display string of branch -func getTagDisplayStrings(t *models.Tag, diffed bool) []string { +func getTagDisplayStrings(t *models.Tag, refOperation types.RefOperation, 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()) + refOperationStr := refOperationToString(refOperation, tr) + if refOperationStr != "" { + descriptionStr = style.FgCyan.Sprint(refOperationStr+" "+utils.Loader()) + " " + descriptionStr + } + res = append(res, textStyle.Sprint(t.Name), descriptionStr) return res } diff --git a/pkg/gui/types/common.go b/pkg/gui/types/common.go index 9e9a2b23f..5bfcf60a2 100644 --- a/pkg/gui/types/common.go +++ b/pkg/gui/types/common.go @@ -274,6 +274,7 @@ const ( RefOperationPushing RefOperationPulling RefOperationFastForwarding + RefOperationDeleting ) type IStateAccessor interface {