diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-07-24 15:13:26 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-24 15:13:26 +0800 |
commit | 2c5c458dd70a0651b137d1af62fb50de5af4e9af (patch) | |
tree | 0bf59421813c65a3f03ec661f1532c74e84fbe61 /modules/repofiles | |
parent | c236ba35ca11d8f40fdd1ded504f7fe31731176e (diff) | |
download | gitea-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.go | 89 |
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) } |