Move PushUpdate dependency from models to repofiles (#6763)

* remove push_update

* move models.PushUpdate to repofiles.PushUpdate
This commit is contained in:
Lunny Xiao 2019-06-10 19:35:13 +08:00 committed by GitHub
parent b1be6fd31f
commit d93e6232e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 98 additions and 21 deletions

View File

@ -263,10 +263,6 @@ func pushUpdate(opts PushUpdateOptions) (repo *Repository, err error) {
commits = ListToPushCommits(l) commits = ListToPushCommits(l)
} }
if opts.RefFullName == git.BranchPrefix+repo.DefaultBranch {
UpdateRepoIndexer(repo)
}
if err := CommitRepoAction(CommitRepoActionOptions{ if err := CommitRepoAction(CommitRepoActionOptions{
PusherName: opts.PusherName, PusherName: opts.PusherName,
RepoOwnerID: owner.ID, RepoOwnerID: owner.ID,

View File

@ -183,7 +183,8 @@ func DeleteRepoFile(repo *models.Repository, doer *models.User, opts *DeleteRepo
if err = repo.GetOwner(); err != nil { if err = repo.GetOwner(); err != nil {
return nil, fmt.Errorf("GetOwner: %v", err) return nil, fmt.Errorf("GetOwner: %v", err)
} }
err = models.PushUpdate( err = PushUpdate(
repo,
opts.NewBranch, opts.NewBranch,
models.PushUpdateOptions{ models.PushUpdateOptions{
PusherID: doer.ID, PusherID: doer.ID,
@ -199,8 +200,6 @@ func DeleteRepoFile(repo *models.Repository, doer *models.User, opts *DeleteRepo
return nil, fmt.Errorf("PushUpdate: %v", err) return nil, fmt.Errorf("PushUpdate: %v", err)
} }
// FIXME: Should we UpdateRepoIndexer(repo) here?
file, err := GetFileResponseFromCommit(repo, commit, opts.NewBranch, treePath) file, err := GetFileResponseFromCommit(repo, commit, opts.NewBranch, treePath)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -394,7 +394,8 @@ func CreateOrUpdateRepoFile(repo *models.Repository, doer *models.User, opts *Up
if err = repo.GetOwner(); err != nil { if err = repo.GetOwner(); err != nil {
return nil, fmt.Errorf("GetOwner: %v", err) return nil, fmt.Errorf("GetOwner: %v", err)
} }
err = models.PushUpdate( err = PushUpdate(
repo,
opts.NewBranch, opts.NewBranch,
models.PushUpdateOptions{ models.PushUpdateOptions{
PusherID: doer.ID, PusherID: doer.ID,
@ -409,7 +410,6 @@ func CreateOrUpdateRepoFile(repo *models.Repository, doer *models.User, opts *Up
if err != nil { if err != nil {
return nil, fmt.Errorf("PushUpdate: %v", err) return nil, fmt.Errorf("PushUpdate: %v", err)
} }
models.UpdateRepoIndexer(repo)
commit, err = t.GetCommit(commitHash) commit, err = t.GetCommit(commitHash)
if err != nil { if err != nil {
@ -422,3 +422,17 @@ func CreateOrUpdateRepoFile(repo *models.Repository, doer *models.User, opts *Up
} }
return file, nil return file, nil
} }
// PushUpdate must be called for any push actions in order to
// generates necessary push action history feeds and other operations
func PushUpdate(repo *models.Repository, branch string, opts models.PushUpdateOptions) error {
err := models.PushUpdate(branch, opts)
if err != nil {
return fmt.Errorf("PushUpdate: %v", err)
}
if opts.RefFullName == git.BranchPrefix+repo.DefaultBranch {
models.UpdateRepoIndexer(repo)
}
return nil
}

View File

@ -188,7 +188,8 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
if err = repo.GetOwner(); err != nil { if err = repo.GetOwner(); err != nil {
return fmt.Errorf("GetOwner: %v", err) return fmt.Errorf("GetOwner: %v", err)
} }
err = models.PushUpdate( err = PushUpdate(
repo,
opts.NewBranch, opts.NewBranch,
models.PushUpdateOptions{ models.PushUpdateOptions{
PusherID: doer.ID, PusherID: doer.ID,
@ -203,7 +204,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
if err != nil { if err != nil {
return fmt.Errorf("PushUpdate: %v", err) return fmt.Errorf("PushUpdate: %v", err)
} }
// FIXME: Should we models.UpdateRepoIndexer(repo) here?
return models.DeleteUploads(uploads...) return models.DeleteUploads(uploads...)
} }

View File

@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/private" "code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/repofiles"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
macaron "gopkg.in/macaron.v1" macaron "gopkg.in/macaron.v1"
@ -117,7 +118,15 @@ func HookPostReceive(ctx *macaron.Context) {
// or other less-standard refs spaces are ignored since there // or other less-standard refs spaces are ignored since there
// may be a very large number of them). // may be a very large number of them).
if strings.HasPrefix(refFullName, git.BranchPrefix) || strings.HasPrefix(refFullName, git.TagPrefix) { if strings.HasPrefix(refFullName, git.BranchPrefix) || strings.HasPrefix(refFullName, git.TagPrefix) {
if err := models.PushUpdate(branch, models.PushUpdateOptions{ repo, err := models.GetRepositoryByOwnerAndName(ownerName, repoName)
if err != nil {
log.Error("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"err": fmt.Sprintf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err),
})
return
}
if err := repofiles.PushUpdate(repo, branch, models.PushUpdateOptions{
RefFullName: refFullName, RefFullName: refFullName,
OldCommitID: oldCommitID, OldCommitID: oldCommitID,
NewCommitID: newCommitID, NewCommitID: newCommitID,

View File

@ -0,0 +1,56 @@
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package private
import (
"encoding/json"
"strings"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/repofiles"
macaron "gopkg.in/macaron.v1"
)
// PushUpdate update public key updates
func PushUpdate(ctx *macaron.Context) {
var opt models.PushUpdateOptions
if err := json.NewDecoder(ctx.Req.Request.Body).Decode(&opt); err != nil {
ctx.JSON(500, map[string]interface{}{
"err": err.Error(),
})
return
}
branch := strings.TrimPrefix(opt.RefFullName, git.BranchPrefix)
if len(branch) == 0 || opt.PusherID <= 0 {
ctx.Error(404)
log.Trace("PushUpdate: branch or secret is empty, or pusher ID is not valid")
return
}
repo, err := models.GetRepositoryByOwnerAndName(opt.RepoUserName, opt.RepoName)
if err != nil {
ctx.JSON(500, map[string]interface{}{
"err": err.Error(),
})
return
}
err = repofiles.PushUpdate(repo, branch, opt)
if err != nil {
if models.IsErrUserNotExist(err) {
ctx.Error(404)
} else {
ctx.JSON(500, map[string]interface{}{
"err": err.Error(),
})
}
return
}
ctx.Status(202)
}

View File

@ -131,15 +131,18 @@ func deleteBranch(ctx *context.Context, branchName string) error {
} }
// Don't return error below this // Don't return error below this
if err := models.PushUpdate(branchName, models.PushUpdateOptions{ if err := repofiles.PushUpdate(
RefFullName: git.BranchPrefix + branchName, ctx.Repo.Repository,
OldCommitID: commit.ID.String(), branchName,
NewCommitID: git.EmptySHA, models.PushUpdateOptions{
PusherID: ctx.User.ID, RefFullName: git.BranchPrefix + branchName,
PusherName: ctx.User.Name, OldCommitID: commit.ID.String(),
RepoUserName: ctx.Repo.Owner.Name, NewCommitID: git.EmptySHA,
RepoName: ctx.Repo.Repository.Name, PusherID: ctx.User.ID,
}); err != nil { PusherName: ctx.User.Name,
RepoUserName: ctx.Repo.Owner.Name,
RepoName: ctx.Repo.Repository.Name,
}); err != nil {
log.Error("Update: %v", err) log.Error("Update: %v", err)
} }