Move repository model into models/repo (#17933)
* Some refactors related repository model * Move more methods out of repository * Move repository into models/repo * Fix test * Fix test * some improvements * Remove unnecessary function
This commit is contained in:
parent
fb8166c6c6
commit
719bddcd76
301 changed files with 3193 additions and 2919 deletions
|
@ -16,6 +16,8 @@ import (
|
|||
"time"
|
||||
|
||||
"code.gitea.io/gitea/models"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
"code.gitea.io/gitea/models/unit"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/cache"
|
||||
|
@ -31,7 +33,7 @@ import (
|
|||
// Merge merges pull request to base repository.
|
||||
// Caller should check PR is ready to be merged (review and status checks)
|
||||
// FIXME: add repoWorkingPull make sure two merges does not happen at same time.
|
||||
func Merge(pr *models.PullRequest, doer *user_model.User, baseGitRepo *git.Repository, mergeStyle models.MergeStyle, message string) (err error) {
|
||||
func Merge(pr *models.PullRequest, doer *user_model.User, baseGitRepo *git.Repository, mergeStyle repo_model.MergeStyle, message string) (err error) {
|
||||
if err = pr.LoadHeadRepo(); err != nil {
|
||||
log.Error("LoadHeadRepo: %v", err)
|
||||
return fmt.Errorf("LoadHeadRepo: %v", err)
|
||||
|
@ -76,7 +78,7 @@ func Merge(pr *models.PullRequest, doer *user_model.User, baseGitRepo *git.Repos
|
|||
if err := pr.Issue.LoadRepo(); err != nil {
|
||||
log.Error("loadRepo for issue [%d]: %v", pr.ID, err)
|
||||
}
|
||||
if err := pr.Issue.Repo.GetOwner(); err != nil {
|
||||
if err := pr.Issue.Repo.GetOwner(db.DefaultContext); err != nil {
|
||||
log.Error("GetOwner for issue repo [%d]: %v", pr.ID, err)
|
||||
}
|
||||
|
||||
|
@ -111,7 +113,7 @@ func Merge(pr *models.PullRequest, doer *user_model.User, baseGitRepo *git.Repos
|
|||
}
|
||||
|
||||
// rawMerge perform the merge operation without changing any pull information in database
|
||||
func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.MergeStyle, message string) (string, error) {
|
||||
func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle repo_model.MergeStyle, message string) (string, error) {
|
||||
err := git.LoadGitVersion()
|
||||
if err != nil {
|
||||
log.Error("git.LoadGitVersion: %v", err)
|
||||
|
@ -219,7 +221,7 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
sign, keyID, signer, _ := pr.SignMerge(doer, tmpBasePath, "HEAD", trackingBranch)
|
||||
if sign {
|
||||
signArg = "-S" + keyID
|
||||
if pr.BaseRepo.GetTrustModel() == models.CommitterTrustModel || pr.BaseRepo.GetTrustModel() == models.CollaboratorCommitterTrustModel {
|
||||
if pr.BaseRepo.GetTrustModel() == repo_model.CommitterTrustModel || pr.BaseRepo.GetTrustModel() == repo_model.CollaboratorCommitterTrustModel {
|
||||
committer = signer
|
||||
}
|
||||
} else if git.CheckGitVersionAtLeast("2.0.0") == nil {
|
||||
|
@ -241,7 +243,7 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
|
||||
// Merge commits.
|
||||
switch mergeStyle {
|
||||
case models.MergeStyleMerge:
|
||||
case repo_model.MergeStyleMerge:
|
||||
cmd := git.NewCommand("merge", "--no-ff", "--no-commit", trackingBranch)
|
||||
if err := runMergeCommand(pr, mergeStyle, cmd, tmpBasePath); err != nil {
|
||||
log.Error("Unable to merge tracking into base: %v", err)
|
||||
|
@ -252,11 +254,11 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
log.Error("Unable to make final commit: %v", err)
|
||||
return "", err
|
||||
}
|
||||
case models.MergeStyleRebase:
|
||||
case repo_model.MergeStyleRebase:
|
||||
fallthrough
|
||||
case models.MergeStyleRebaseUpdate:
|
||||
case repo_model.MergeStyleRebaseUpdate:
|
||||
fallthrough
|
||||
case models.MergeStyleRebaseMerge:
|
||||
case repo_model.MergeStyleRebaseMerge:
|
||||
// Checkout head branch
|
||||
if err := git.NewCommand("checkout", "-b", stagingBranch, trackingBranch).RunInDirPipeline(tmpBasePath, &outbuf, &errbuf); err != nil {
|
||||
log.Error("git checkout base prior to merge post staging rebase [%s:%s -> %s:%s]: %v\n%s\n%s", pr.HeadRepo.FullName(), pr.HeadBranch, pr.BaseRepo.FullName(), pr.BaseBranch, err, outbuf.String(), errbuf.String())
|
||||
|
@ -309,7 +311,7 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
errbuf.Reset()
|
||||
|
||||
// not need merge, just update by rebase. so skip
|
||||
if mergeStyle == models.MergeStyleRebaseUpdate {
|
||||
if mergeStyle == repo_model.MergeStyleRebaseUpdate {
|
||||
break
|
||||
}
|
||||
|
||||
|
@ -322,7 +324,7 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
errbuf.Reset()
|
||||
|
||||
cmd := git.NewCommand("merge")
|
||||
if mergeStyle == models.MergeStyleRebase {
|
||||
if mergeStyle == repo_model.MergeStyleRebase {
|
||||
cmd.AddArguments("--ff-only")
|
||||
} else {
|
||||
cmd.AddArguments("--no-ff", "--no-commit")
|
||||
|
@ -334,13 +336,13 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
log.Error("Unable to merge staging into base: %v", err)
|
||||
return "", err
|
||||
}
|
||||
if mergeStyle == models.MergeStyleRebaseMerge {
|
||||
if mergeStyle == repo_model.MergeStyleRebaseMerge {
|
||||
if err := commitAndSignNoAuthor(pr, message, signArg, tmpBasePath, env); err != nil {
|
||||
log.Error("Unable to make final commit: %v", err)
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
case models.MergeStyleSquash:
|
||||
case repo_model.MergeStyleSquash:
|
||||
// Merge with squash
|
||||
cmd := git.NewCommand("merge", "--squash", trackingBranch)
|
||||
if err := runMergeCommand(pr, mergeStyle, cmd, tmpBasePath); err != nil {
|
||||
|
@ -398,7 +400,7 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
}
|
||||
|
||||
var headUser *user_model.User
|
||||
err = pr.HeadRepo.GetOwner()
|
||||
err = pr.HeadRepo.GetOwner(db.DefaultContext)
|
||||
if err != nil {
|
||||
if !user_model.IsErrUserNotExist(err) {
|
||||
log.Error("Can't find user: %d for head repository - %v", pr.HeadRepo.OwnerID, err)
|
||||
|
@ -419,7 +421,7 @@ func rawMerge(pr *models.PullRequest, doer *user_model.User, mergeStyle models.M
|
|||
)
|
||||
|
||||
var pushCmd *git.Command
|
||||
if mergeStyle == models.MergeStyleRebaseUpdate {
|
||||
if mergeStyle == repo_model.MergeStyleRebaseUpdate {
|
||||
// force push the rebase result to head brach
|
||||
pushCmd = git.NewCommand("push", "-f", "head_repo", stagingBranch+":"+git.BranchPrefix+pr.HeadBranch)
|
||||
} else {
|
||||
|
@ -467,7 +469,7 @@ func commitAndSignNoAuthor(pr *models.PullRequest, message, signArg, tmpBasePath
|
|||
return nil
|
||||
}
|
||||
|
||||
func runMergeCommand(pr *models.PullRequest, mergeStyle models.MergeStyle, cmd *git.Command, tmpBasePath string) error {
|
||||
func runMergeCommand(pr *models.PullRequest, mergeStyle repo_model.MergeStyle, cmd *git.Command, tmpBasePath string) error {
|
||||
var outbuf, errbuf strings.Builder
|
||||
if err := cmd.RunInDirPipeline(tmpBasePath, &outbuf, &errbuf); err != nil {
|
||||
// Merge will leave a MERGE_HEAD file in the .git folder if there is a conflict
|
||||
|
@ -567,7 +569,7 @@ func IsUserAllowedToMerge(pr *models.PullRequest, p models.Permission, user *use
|
|||
return false, err
|
||||
}
|
||||
|
||||
if (p.CanWrite(unit.TypeCode) && pr.ProtectedBranch == nil) || (pr.ProtectedBranch != nil && pr.ProtectedBranch.IsUserMergeWhitelisted(user.ID, p)) {
|
||||
if (p.CanWrite(unit.TypeCode) && pr.ProtectedBranch == nil) || (pr.ProtectedBranch != nil && models.IsUserMergeWhitelisted(pr.ProtectedBranch, user.ID, p)) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
|
@ -641,8 +643,8 @@ func MergedManually(pr *models.PullRequest, doer *user_model.User, baseGitRepo *
|
|||
prConfig := prUnit.PullRequestsConfig()
|
||||
|
||||
// Check if merge style is correct and allowed
|
||||
if !prConfig.IsMergeStyleAllowed(models.MergeStyleManuallyMerged) {
|
||||
return models.ErrInvalidMergeStyle{ID: pr.BaseRepo.ID, Style: models.MergeStyleManuallyMerged}
|
||||
if !prConfig.IsMergeStyleAllowed(repo_model.MergeStyleManuallyMerged) {
|
||||
return models.ErrInvalidMergeStyle{ID: pr.BaseRepo.ID, Style: repo_model.MergeStyleManuallyMerged}
|
||||
}
|
||||
|
||||
if len(commitID) < 40 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue