mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Prevent NPE if trying to restore an already restored deleted branch (#21940)
If a deleted-branch has already been restored, a request to restore it again will cause a NPE. This PR adds detection for this case, but also disables buttons when they're clicked in order to help prevent accidental repeat requests. Fix #21930 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		@@ -126,6 +126,10 @@ func RestoreBranchPost(ctx *context.Context) {
 | 
				
			|||||||
		log.Error("GetDeletedBranchByID: %v", err)
 | 
							log.Error("GetDeletedBranchByID: %v", err)
 | 
				
			||||||
		ctx.Flash.Error(ctx.Tr("repo.branch.restore_failed", branchName))
 | 
							ctx.Flash.Error(ctx.Tr("repo.branch.restore_failed", branchName))
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 | 
						} else if deletedBranch == nil {
 | 
				
			||||||
 | 
							log.Debug("RestoreBranch: Can't restore branch[%d] '%s', as it does not exist", branchID, branchName)
 | 
				
			||||||
 | 
							ctx.Flash.Error(ctx.Tr("repo.branch.restore_failed", branchName))
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := git.Push(ctx, ctx.Repo.Repository.RepoPath(), git.PushOptions{
 | 
						if err := git.Push(ctx, ctx.Repo.Repository.RepoPath(), git.PushOptions{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -260,6 +260,7 @@ export function initGlobalLinkActions() {
 | 
				
			|||||||
    e.preventDefault();
 | 
					    e.preventDefault();
 | 
				
			||||||
    const $this = $(this);
 | 
					    const $this = $(this);
 | 
				
			||||||
    const redirect = $this.data('redirect');
 | 
					    const redirect = $this.data('redirect');
 | 
				
			||||||
 | 
					    $this.prop('disabled', true);
 | 
				
			||||||
    $.post($this.data('url'), {
 | 
					    $.post($this.data('url'), {
 | 
				
			||||||
      _csrf: csrfToken
 | 
					      _csrf: csrfToken
 | 
				
			||||||
    }).done((data) => {
 | 
					    }).done((data) => {
 | 
				
			||||||
@@ -270,6 +271,8 @@ export function initGlobalLinkActions() {
 | 
				
			|||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        window.location.reload();
 | 
					        window.location.reload();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    }).always(() => {
 | 
				
			||||||
 | 
					      $this.prop('disabled', false);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -283,11 +286,14 @@ export function initGlobalLinkActions() {
 | 
				
			|||||||
  // FIXME: this is only used once, and should be replace with `link-action` instead
 | 
					  // FIXME: this is only used once, and should be replace with `link-action` instead
 | 
				
			||||||
  $('.undo-button').on('click', function () {
 | 
					  $('.undo-button').on('click', function () {
 | 
				
			||||||
    const $this = $(this);
 | 
					    const $this = $(this);
 | 
				
			||||||
 | 
					    $this.prop('disabled', true);
 | 
				
			||||||
    $.post($this.data('url'), {
 | 
					    $.post($this.data('url'), {
 | 
				
			||||||
      _csrf: csrfToken,
 | 
					      _csrf: csrfToken,
 | 
				
			||||||
      id: $this.data('id')
 | 
					      id: $this.data('id')
 | 
				
			||||||
    }).done((data) => {
 | 
					    }).done((data) => {
 | 
				
			||||||
      window.location.href = data.redirect;
 | 
					      window.location.href = data.redirect;
 | 
				
			||||||
 | 
					    }).always(() => {
 | 
				
			||||||
 | 
					      $this.prop('disabled', false);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user