Fix loadOneBranch panic (#29938) (#29939)

Backport #29938

Try to fix #29936

Far from ideal, but still better than panic.

(cherry picked from commit b4a6c6fd7a4ed8e018d27fcdb5203fa04becdddb)
This commit is contained in:
wxiaoguang 2024-03-20 22:31:32 +08:00 committed by Earl Warren
parent 59bc466ad5
commit c1ec79aeaf
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
2 changed files with 7 additions and 5 deletions

View file

@ -248,7 +248,7 @@ type DivergeObject struct {
// GetDivergingCommits returns the number of commits a targetBranch is ahead or behind a baseBranch // GetDivergingCommits returns the number of commits a targetBranch is ahead or behind a baseBranch
func GetDivergingCommits(ctx context.Context, repoPath, baseBranch, targetBranch string) (do DivergeObject, err error) { func GetDivergingCommits(ctx context.Context, repoPath, baseBranch, targetBranch string) (do DivergeObject, err error) {
cmd := NewCommand(ctx, "rev-list", "--count", "--left-right"). cmd := NewCommand(ctx, "rev-list", "--count", "--left-right").
AddDynamicArguments(baseBranch + "..." + targetBranch) AddDynamicArguments(baseBranch + "..." + targetBranch).AddArguments("--")
stdout, _, err := cmd.RunStdString(&RunOpts{Dir: repoPath}) stdout, _, err := cmd.RunStdString(&RunOpts{Dir: repoPath})
if err != nil { if err != nil {
return do, err return do, err

View file

@ -132,10 +132,7 @@ func loadOneBranch(ctx context.Context, repo *repo_model.Repository, dbBranch *g
p := protectedBranches.GetFirstMatched(branchName) p := protectedBranches.GetFirstMatched(branchName)
isProtected := p != nil isProtected := p != nil
divergence := &git.DivergeObject{ var divergence *git.DivergeObject
Ahead: -1,
Behind: -1,
}
// it's not default branch // it's not default branch
if repo.DefaultBranch != dbBranch.Name && !dbBranch.IsDeleted { if repo.DefaultBranch != dbBranch.Name && !dbBranch.IsDeleted {
@ -146,6 +143,11 @@ func loadOneBranch(ctx context.Context, repo *repo_model.Repository, dbBranch *g
} }
} }
if divergence == nil {
// tolerate error that we can't get divergence
divergence = &git.DivergeObject{Ahead: -1, Behind: -1}
}
pr, err := issues_model.GetLatestPullRequestByHeadInfo(repo.ID, branchName) pr, err := issues_model.GetLatestPullRequestByHeadInfo(repo.ID, branchName)
if err != nil { if err != nil {
return nil, fmt.Errorf("GetLatestPullRequestByHeadInfo: %v", err) return nil, fmt.Errorf("GetLatestPullRequestByHeadInfo: %v", err)