* move models.PushUpdate to repofiles.PushUpdate * remove duplicated code to load repotags/v1.11.0-dev
| @@ -495,8 +495,8 @@ func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error { | |||
| return fmt.Errorf("GetTagCommitID: %v", err) | |||
| } | |||
| if git.IsErrNotExist(err) || commitID != rel.Sha1 { | |||
| if err := pushUpdateDeleteTag(repo, rel.TagName); err != nil { | |||
| return fmt.Errorf("pushUpdateDeleteTag: %v", err) | |||
| if err := PushUpdateDeleteTag(repo, rel.TagName); err != nil { | |||
| return fmt.Errorf("PushUpdateDeleteTag: %v", err) | |||
| } | |||
| } else { | |||
| existingRelTags[strings.ToLower(rel.TagName)] = struct{}{} | |||
| @@ -509,7 +509,7 @@ func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error { | |||
| } | |||
| for _, tagName := range tags { | |||
| if _, ok := existingRelTags[strings.ToLower(tagName)]; !ok { | |||
| if err := pushUpdateAddTag(repo, gitRepo, tagName); err != nil { | |||
| if err := PushUpdateAddTag(repo, gitRepo, tagName); err != nil { | |||
| return fmt.Errorf("pushUpdateAddTag: %v", err) | |||
| } | |||
| } | |||
| @@ -10,9 +10,7 @@ import ( | |||
| "strings" | |||
| "time" | |||
| "code.gitea.io/gitea/modules/cache" | |||
| "code.gitea.io/gitea/modules/git" | |||
| "code.gitea.io/gitea/modules/log" | |||
| "code.gitea.io/gitea/modules/util" | |||
| ) | |||
| @@ -64,26 +62,8 @@ type PushUpdateOptions struct { | |||
| NewCommitID string | |||
| } | |||
| // PushUpdate must be called for any push actions in order to | |||
| // generates necessary push action history feeds. | |||
| func PushUpdate(branch string, opt PushUpdateOptions) error { | |||
| repo, err := pushUpdate(opt) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| pusher, err := GetUserByID(opt.PusherID) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| log.Trace("TriggerTask '%s/%s' by %s", repo.Name, branch, pusher.Name) | |||
| go AddTestPullRequestTask(pusher, repo.ID, branch, true) | |||
| return nil | |||
| } | |||
| func pushUpdateDeleteTag(repo *Repository, tagName string) error { | |||
| // PushUpdateDeleteTag must be called for any push actions to delete tag | |||
| func PushUpdateDeleteTag(repo *Repository, tagName string) error { | |||
| rel, err := GetRelease(repo.ID, tagName) | |||
| if err != nil { | |||
| if IsErrReleaseNotExist(err) { | |||
| @@ -107,7 +87,8 @@ func pushUpdateDeleteTag(repo *Repository, tagName string) error { | |||
| return nil | |||
| } | |||
| func pushUpdateAddTag(repo *Repository, gitRepo *git.Repository, tagName string) error { | |||
| // PushUpdateAddTag must be called for any push actions to add tag | |||
| func PushUpdateAddTag(repo *Repository, gitRepo *git.Repository, tagName string) error { | |||
| rel, err := GetRelease(repo.ID, tagName) | |||
| if err != nil && !IsErrReleaseNotExist(err) { | |||
| return fmt.Errorf("GetRelease: %v", err) | |||
| @@ -182,95 +163,3 @@ func pushUpdateAddTag(repo *Repository, gitRepo *git.Repository, tagName string) | |||
| } | |||
| return nil | |||
| } | |||
| func pushUpdate(opts PushUpdateOptions) (repo *Repository, err error) { | |||
| isNewRef := opts.OldCommitID == git.EmptySHA | |||
| isDelRef := opts.NewCommitID == git.EmptySHA | |||
| if isNewRef && isDelRef { | |||
| return nil, fmt.Errorf("Old and new revisions are both %s", git.EmptySHA) | |||
| } | |||
| repoPath := RepoPath(opts.RepoUserName, opts.RepoName) | |||
| _, err = git.NewCommand("update-server-info").RunInDir(repoPath) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("Failed to call 'git update-server-info': %v", err) | |||
| } | |||
| owner, err := GetUserByName(opts.RepoUserName) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("GetUserByName: %v", err) | |||
| } | |||
| repo, err = GetRepositoryByName(owner.ID, opts.RepoName) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("GetRepositoryByName: %v", err) | |||
| } | |||
| gitRepo, err := git.OpenRepository(repoPath) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("OpenRepository: %v", err) | |||
| } | |||
| if err = repo.UpdateSize(); err != nil { | |||
| log.Error("Failed to update size for repository: %v", err) | |||
| } | |||
| var commits = &PushCommits{} | |||
| if strings.HasPrefix(opts.RefFullName, git.TagPrefix) { | |||
| // If is tag reference | |||
| tagName := opts.RefFullName[len(git.TagPrefix):] | |||
| if isDelRef { | |||
| err = pushUpdateDeleteTag(repo, tagName) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("pushUpdateDeleteTag: %v", err) | |||
| } | |||
| } else { | |||
| // Clear cache for tag commit count | |||
| cache.Remove(repo.GetCommitsCountCacheKey(tagName, true)) | |||
| err = pushUpdateAddTag(repo, gitRepo, tagName) | |||
| if err != nil { | |||
| return nil, 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 nil, fmt.Errorf("gitRepo.GetCommit: %v", err) | |||
| } | |||
| // Push new branch. | |||
| var l *list.List | |||
| if isNewRef { | |||
| l, err = newCommit.CommitsBeforeLimit(10) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("newCommit.CommitsBeforeLimit: %v", err) | |||
| } | |||
| } else { | |||
| l, err = newCommit.CommitsBeforeUntil(opts.OldCommitID) | |||
| if err != nil { | |||
| return nil, fmt.Errorf("newCommit.CommitsBeforeUntil: %v", err) | |||
| } | |||
| } | |||
| commits = ListToPushCommits(l) | |||
| } | |||
| if err := CommitRepoAction(CommitRepoActionOptions{ | |||
| PusherName: opts.PusherName, | |||
| RepoOwnerID: owner.ID, | |||
| RepoName: repo.Name, | |||
| RefFullName: opts.RefFullName, | |||
| OldCommitID: opts.OldCommitID, | |||
| NewCommitID: opts.NewCommitID, | |||
| Commits: commits, | |||
| }); err != nil { | |||
| return nil, fmt.Errorf("CommitRepoAction: %v", err) | |||
| } | |||
| return repo, nil | |||
| } | |||
| @@ -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) | |||
| } | |||