aboutsummaryrefslogtreecommitdiffstats
path: root/modules/repofiles
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-07-24 15:13:26 +0800
committerGitHub <noreply@github.com>2019-07-24 15:13:26 +0800
commit2c5c458dd70a0651b137d1af62fb50de5af4e9af (patch)
tree0bf59421813c65a3f03ec661f1532c74e84fbe61 /modules/repofiles
parentc236ba35ca11d8f40fdd1ded504f7fe31731176e (diff)
downloadgitea-2c5c458dd70a0651b137d1af62fb50de5af4e9af.tar.gz
gitea-2c5c458dd70a0651b137d1af62fb50de5af4e9af.zip
Move models.PushUpdate to repofiles.PushUpdate (#7485)
* move models.PushUpdate to repofiles.PushUpdate * remove duplicated code to load repo
Diffstat (limited to 'modules/repofiles')
-rw-r--r--modules/repofiles/update.go89
1 files changed, 87 insertions, 2 deletions
diff --git a/modules/repofiles/update.go b/modules/repofiles/update.go
index 38f2f22c95..1189704871 100644
--- a/modules/repofiles/update.go
+++ b/modules/repofiles/update.go
@@ -6,6 +6,7 @@ package repofiles
import (
"bytes"
+ "container/list"
"fmt"
"path"
"strings"
@@ -15,6 +16,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
+ "code.gitea.io/gitea/modules/cache"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/lfs"
"code.gitea.io/gitea/modules/log"
@@ -428,11 +430,94 @@ func CreateOrUpdateRepoFile(repo *models.Repository, doer *models.User, opts *Up
// 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)
+ isNewRef := opts.OldCommitID == git.EmptySHA
+ isDelRef := opts.NewCommitID == git.EmptySHA
+ if isNewRef && isDelRef {
+ return fmt.Errorf("Old and new revisions are both %s", git.EmptySHA)
+ }
+
+ repoPath := models.RepoPath(opts.RepoUserName, opts.RepoName)
+
+ _, err := git.NewCommand("update-server-info").RunInDir(repoPath)
if err != nil {
- return fmt.Errorf("PushUpdate: %v", err)
+ return fmt.Errorf("Failed to call 'git update-server-info': %v", err)
}
+ gitRepo, err := git.OpenRepository(repoPath)
+ if err != nil {
+ return fmt.Errorf("OpenRepository: %v", err)
+ }
+
+ if err = repo.UpdateSize(); err != nil {
+ log.Error("Failed to update size for repository: %v", err)
+ }
+
+ var commits = &models.PushCommits{}
+ if strings.HasPrefix(opts.RefFullName, git.TagPrefix) {
+ // If is tag reference
+ tagName := opts.RefFullName[len(git.TagPrefix):]
+ if isDelRef {
+ err = models.PushUpdateDeleteTag(repo, tagName)
+ if err != nil {
+ return fmt.Errorf("PushUpdateDeleteTag: %v", err)
+ }
+ } else {
+ // Clear cache for tag commit count
+ cache.Remove(repo.GetCommitsCountCacheKey(tagName, true))
+ err = models.PushUpdateAddTag(repo, gitRepo, tagName)
+ if err != nil {
+ return fmt.Errorf("PushUpdateAddTag: %v", err)
+ }
+ }
+ } else if !isDelRef {
+ // If is branch reference
+
+ // Clear cache for branch commit count
+ cache.Remove(repo.GetCommitsCountCacheKey(opts.RefFullName[len(git.BranchPrefix):], true))
+
+ newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
+ if err != nil {
+ return fmt.Errorf("gitRepo.GetCommit: %v", err)
+ }
+
+ // Push new branch.
+ var l *list.List
+ if isNewRef {
+ l, err = newCommit.CommitsBeforeLimit(10)
+ if err != nil {
+ return fmt.Errorf("newCommit.CommitsBeforeLimit: %v", err)
+ }
+ } else {
+ l, err = newCommit.CommitsBeforeUntil(opts.OldCommitID)
+ if err != nil {
+ return fmt.Errorf("newCommit.CommitsBeforeUntil: %v", err)
+ }
+ }
+
+ commits = models.ListToPushCommits(l)
+ }
+
+ if err := models.CommitRepoAction(models.CommitRepoActionOptions{
+ PusherName: opts.PusherName,
+ RepoOwnerID: repo.OwnerID,
+ RepoName: repo.Name,
+ RefFullName: opts.RefFullName,
+ OldCommitID: opts.OldCommitID,
+ NewCommitID: opts.NewCommitID,
+ Commits: commits,
+ }); err != nil {
+ return fmt.Errorf("CommitRepoAction: %v", err)
+ }
+
+ pusher, err := models.GetUserByID(opts.PusherID)
+ if err != nil {
+ return err
+ }
+
+ log.Trace("TriggerTask '%s/%s' by %s", repo.Name, branch, pusher.Name)
+
+ go models.AddTestPullRequestTask(pusher, repo.ID, branch, true)
+
if opts.RefFullName == git.BranchPrefix+repo.DefaultBranch {
models.UpdateRepoIndexer(repo)
}