mirror of
https://github.com/go-gitea/gitea
synced 2025-12-07 13:28:25 +00:00
Improvements for creating branch model
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
||||
// NewBranchForm form for creating a new branch
|
||||
type NewBranchForm struct {
|
||||
NewBranchName string `binding:"Required;MaxSize(100);GitRefName"`
|
||||
RepoID int64
|
||||
SourceBranchName string
|
||||
CurrentPath string
|
||||
CreateTag bool
|
||||
|
||||
@@ -5,11 +5,14 @@ package issue
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strconv"
|
||||
|
||||
git_model "code.gitea.io/gitea/models/git"
|
||||
issues_model "code.gitea.io/gitea/models/issues"
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
"code.gitea.io/gitea/modules/container"
|
||||
)
|
||||
|
||||
func FindIssueDevLinksByIssue(ctx context.Context, issue *issues_model.Issue) (issues_model.IssueDevLinks, error) {
|
||||
@@ -22,6 +25,17 @@ func FindIssueDevLinksByIssue(ctx context.Context, issue *issues_model.Issue) (i
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sort.Slice(devLinks, func(i, j int) bool {
|
||||
switch {
|
||||
case devLinks[j].LinkType == issues_model.IssueDevLinkTypePullRequest:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
})
|
||||
|
||||
branchPRExists := make(container.Set[string])
|
||||
|
||||
for _, link := range devLinks {
|
||||
if link.LinkedRepoID == 0 {
|
||||
link.LinkedRepoID = issue.RepoID
|
||||
@@ -47,9 +61,14 @@ func FindIssueDevLinksByIssue(ctx context.Context, issue *issues_model.Issue) (i
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pull.BaseRepo = issue.Repo
|
||||
pull.HeadRepo = link.LinkedRepo
|
||||
if err := pull.LoadIssue(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pull.Issue.Repo = issue.Repo
|
||||
link.PullRequest = pull
|
||||
link.PullRequest.Issue = issue
|
||||
link.PullRequest.BaseRepo = issue.Repo
|
||||
branchPRExists.Add(fmt.Sprintf("%d-%s", link.LinkedRepoID, pull.HeadBranch))
|
||||
case issues_model.IssueDevLinkTypeBranch:
|
||||
branch, err := git_model.GetBranch(ctx, link.LinkedRepoID, link.LinkIndex)
|
||||
if err != nil {
|
||||
@@ -57,6 +76,7 @@ func FindIssueDevLinksByIssue(ctx context.Context, issue *issues_model.Issue) (i
|
||||
}
|
||||
link.Branch = branch
|
||||
link.Branch.Repo = link.LinkedRepo
|
||||
link.DisplayBranch = !branchPRExists.Contains(fmt.Sprintf("%d-%s", link.LinkedRepoID, link.LinkIndex))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+25
-24
@@ -128,6 +128,31 @@ func NewPullRequest(ctx context.Context, repo *repo_model.Repository, issue *iss
|
||||
return err
|
||||
}
|
||||
|
||||
if !pr.IsWorkInProgress(ctx) {
|
||||
reviewNotifiers, err = issue_service.PullRequestCodeOwnersReview(ctx, issue, pr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if pr.Flow == issues_model.PullRequestFlowGithub {
|
||||
devLinks, err := issues_model.FindDevLinksByBranch(ctx, issue.RepoID, pr.HeadRepoID, pr.HeadBranch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, link := range devLinks {
|
||||
if err := issues_model.CreateIssueDevLink(ctx, &issues_model.IssueDevLink{
|
||||
IssueID: link.IssueID,
|
||||
LinkType: issues_model.IssueDevLinkTypePullRequest,
|
||||
LinkedRepoID: pr.HeadRepoID,
|
||||
LinkIndex: strconv.FormatInt(pr.ID, 10),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// leave creating comment last
|
||||
compareInfo, err := baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(),
|
||||
git.BranchPrefix+pr.BaseBranch, pr.GetGitRefName(), false, false)
|
||||
if err != nil {
|
||||
@@ -161,30 +186,6 @@ func NewPullRequest(ctx context.Context, repo *repo_model.Repository, issue *iss
|
||||
return err
|
||||
}
|
||||
|
||||
if !pr.IsWorkInProgress(ctx) {
|
||||
reviewNotifiers, err = issue_service.PullRequestCodeOwnersReview(ctx, issue, pr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if pr.Flow == issues_model.PullRequestFlowGithub {
|
||||
devLinks, err := issues_model.FindDevLinksByBranch(ctx, issue.RepoID, pr.HeadRepoID, pr.HeadBranch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, link := range devLinks {
|
||||
if err := issues_model.CreateIssueDevLink(ctx, &issues_model.IssueDevLink{
|
||||
IssueID: link.IssueID,
|
||||
LinkType: issues_model.IssueDevLinkTypePullRequest,
|
||||
LinkedRepoID: pr.HeadRepoID,
|
||||
LinkIndex: strconv.FormatInt(pr.ID, 10),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}); err != nil {
|
||||
// cleanup: this will only remove the reference, the real commit will be clean up when next GC
|
||||
|
||||
Reference in New Issue
Block a user