@@ -177,6 +177,59 @@ func (self *TagsController) remoteDelete(tag *models.Tag) error {
177177 return nil
178178}
179179
180+ func (self * TagsController ) localAndRemoteDelete (tag * models.Tag ) error {
181+ title := utils .ResolvePlaceholderString (
182+ self .c .Tr .SelectRemoteTagUpstream ,
183+ map [string ]string {
184+ "tagName" : tag .Name ,
185+ },
186+ )
187+
188+ self .c .Prompt (types.PromptOpts {
189+ Title : title ,
190+ InitialContent : "origin" ,
191+ FindSuggestionsFunc : self .c .Helpers ().Suggestions .GetRemoteSuggestionsFunc (),
192+ HandleConfirm : func (upstream string ) error {
193+ confirmTitle := utils .ResolvePlaceholderString (
194+ self .c .Tr .DeleteTagTitle ,
195+ map [string ]string {
196+ "tagName" : tag .Name ,
197+ },
198+ )
199+ confirmPrompt := utils .ResolvePlaceholderString (
200+ self .c .Tr .DeleteLocalAndRemoteTagPrompt ,
201+ map [string ]string {
202+ "tagName" : tag .Name ,
203+ "upstream" : upstream ,
204+ },
205+ )
206+
207+ self .c .Confirm (types.ConfirmOpts {
208+ Title : confirmTitle ,
209+ Prompt : confirmPrompt ,
210+ HandleConfirm : func () error {
211+ return self .c .WithInlineStatus (tag , types .ItemOperationDeleting , context .TAGS_CONTEXT_KEY , func (task gocui.Task ) error {
212+ self .c .LogAction (self .c .Tr .Actions .DeleteRemoteTag )
213+ if err := self .c .Git ().Remote .DeleteRemoteTag (task , upstream , tag .Name ); err != nil {
214+ return err
215+ }
216+
217+ self .c .LogAction (self .c .Tr .Actions .DeleteLocalTag )
218+ if err := self .c .Git ().Tag .LocalDelete (tag .Name ); err != nil {
219+ return err
220+ }
221+ return self .c .Refresh (types.RefreshOptions {Mode : types .ASYNC , Scope : []types.RefreshableView {types .COMMITS , types .TAGS }})
222+ })
223+ },
224+ })
225+
226+ return nil
227+ },
228+ })
229+
230+ return nil
231+ }
232+
180233func (self * TagsController ) delete (tag * models.Tag ) error {
181234 menuTitle := utils .ResolvePlaceholderString (
182235 self .c .Tr .DeleteTagTitle ,
@@ -201,6 +254,14 @@ func (self *TagsController) delete(tag *models.Tag) error {
201254 return self .remoteDelete (tag )
202255 },
203256 },
257+ {
258+ Label : self .c .Tr .DeleteLocalAndRemoteTag ,
259+ Key : 'b' ,
260+ OpensMenu : true ,
261+ OnPress : func () error {
262+ return self .localAndRemoteDelete (tag )
263+ },
264+ },
204265 }
205266
206267 return self .c .Menu (types.CreateMenuOptions {
0 commit comments