diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2021-11-17 23:17:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-17 23:17:31 +0800 |
commit | 5233051e64e90238bb7b6ddf9ecd1513e57bf8e9 (patch) | |
tree | 6e21565fd47954877bc14fd66f57d798c86e3300 /modules | |
parent | 750a8465f547e9f08a87612c75898d56b8ec1f88 (diff) | |
download | gitea-5233051e64e90238bb7b6ddf9ecd1513e57bf8e9.tar.gz gitea-5233051e64e90238bb7b6ddf9ecd1513e57bf8e9.zip |
Move some functions into services/repository (#17677)
Diffstat (limited to 'modules')
-rw-r--r-- | modules/repository/branch.go | 89 | ||||
-rw-r--r-- | modules/repository/cache.go | 48 | ||||
-rw-r--r-- | modules/repository/hooks.go | 41 | ||||
-rw-r--r-- | modules/repository/update.go | 136 |
4 files changed, 0 insertions, 314 deletions
diff --git a/modules/repository/branch.go b/modules/repository/branch.go index 275bae91e3..dcd82554d5 100644 --- a/modules/repository/branch.go +++ b/modules/repository/branch.go @@ -24,92 +24,3 @@ func GetBranch(repo *models.Repository, branch string) (*git.Branch, error) { return gitRepo.GetBranch(branch) } - -// GetBranches returns branches from the repository, skipping skip initial branches and -// returning at most limit branches, or all branches if limit is 0. -func GetBranches(repo *models.Repository, skip, limit int) ([]*git.Branch, int, error) { - return git.GetBranchesByPath(repo.RepoPath(), skip, limit) -} - -// checkBranchName validates branch name with existing repository branches -func checkBranchName(repo *models.Repository, name string) error { - gitRepo, err := git.OpenRepository(repo.RepoPath()) - if err != nil { - return err - } - defer gitRepo.Close() - - branches, _, err := GetBranches(repo, 0, 0) - if err != nil { - return err - } - - for _, branch := range branches { - if branch.Name == name { - return models.ErrBranchAlreadyExists{ - BranchName: branch.Name, - } - } else if (len(branch.Name) < len(name) && branch.Name+"/" == name[0:len(branch.Name)+1]) || - (len(branch.Name) > len(name) && name+"/" == branch.Name[0:len(name)+1]) { - return models.ErrBranchNameConflict{ - BranchName: branch.Name, - } - } - } - - if _, err := gitRepo.GetTag(name); err == nil { - return models.ErrTagAlreadyExists{ - TagName: name, - } - } - - return nil -} - -// CreateNewBranch creates a new repository branch -func CreateNewBranch(doer *models.User, repo *models.Repository, oldBranchName, branchName string) (err error) { - // Check if branch name can be used - if err := checkBranchName(repo, branchName); err != nil { - return err - } - - if !git.IsBranchExist(repo.RepoPath(), oldBranchName) { - return models.ErrBranchDoesNotExist{ - BranchName: oldBranchName, - } - } - - if err := git.Push(repo.RepoPath(), git.PushOptions{ - Remote: repo.RepoPath(), - Branch: fmt.Sprintf("%s:%s%s", oldBranchName, git.BranchPrefix, branchName), - Env: models.PushingEnvironment(doer, repo), - }); err != nil { - if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) { - return err - } - return fmt.Errorf("Push: %v", err) - } - - return nil -} - -// CreateNewBranchFromCommit creates a new repository branch -func CreateNewBranchFromCommit(doer *models.User, repo *models.Repository, commit, branchName string) (err error) { - // Check if branch name can be used - if err := checkBranchName(repo, branchName); err != nil { - return err - } - - if err := git.Push(repo.RepoPath(), git.PushOptions{ - Remote: repo.RepoPath(), - Branch: fmt.Sprintf("%s:%s%s", commit, git.BranchPrefix, branchName), - Env: models.PushingEnvironment(doer, repo), - }); err != nil { - if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) { - return err - } - return fmt.Errorf("Push: %v", err) - } - - return nil -} diff --git a/modules/repository/cache.go b/modules/repository/cache.go deleted file mode 100644 index e574f1adb7..0000000000 --- a/modules/repository/cache.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2020 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 repository - -import ( - "context" - "strings" - - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/modules/cache" - "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/setting" -) - -func getRefName(fullRefName string) string { - if strings.HasPrefix(fullRefName, git.TagPrefix) { - return fullRefName[len(git.TagPrefix):] - } else if strings.HasPrefix(fullRefName, git.BranchPrefix) { - return fullRefName[len(git.BranchPrefix):] - } - return "" -} - -// CacheRef cachhe last commit information of the branch or the tag -func CacheRef(ctx context.Context, repo *models.Repository, gitRepo *git.Repository, fullRefName string) error { - if !setting.CacheService.LastCommit.Enabled { - return nil - } - - commit, err := gitRepo.GetCommit(fullRefName) - if err != nil { - return err - } - - commitsCount, err := cache.GetInt64(repo.GetCommitsCountCacheKey(getRefName(fullRefName), true), commit.CommitsCount) - if err != nil { - return err - } - if commitsCount < setting.CacheService.LastCommit.CommitsCount { - return nil - } - - commitCache := git.NewLastCommitCache(repo.FullName(), gitRepo, setting.LastCommitCacheTTLSeconds, cache.GetCache()) - - return commitCache.CacheCommit(ctx, commit) -} diff --git a/modules/repository/hooks.go b/modules/repository/hooks.go index 23eee8897d..bd77423afc 100644 --- a/modules/repository/hooks.go +++ b/modules/repository/hooks.go @@ -5,19 +5,13 @@ package repository import ( - "context" "fmt" "os" "path/filepath" - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - - "xorm.io/builder" ) func getHookTemplates() (hookNames, hookTpls, giteaHookTpls []string) { @@ -240,38 +234,3 @@ func CheckDelegateHooks(repoPath string) ([]string, error) { } return results, nil } - -// SyncRepositoryHooks rewrites all repositories' pre-receive, update and post-receive hooks -// to make sure the binary and custom conf path are up-to-date. -func SyncRepositoryHooks(ctx context.Context) error { - log.Trace("Doing: SyncRepositoryHooks") - - if err := db.Iterate( - db.DefaultContext, - new(models.Repository), - builder.Gt{"id": 0}, - func(idx int, bean interface{}) error { - repo := bean.(*models.Repository) - select { - case <-ctx.Done(): - return db.ErrCancelledf("before sync repository hooks for %s", repo.FullName()) - default: - } - - if err := createDelegateHooks(repo.RepoPath()); err != nil { - return fmt.Errorf("SyncRepositoryHook: %v", err) - } - if repo.HasWiki() { - if err := createDelegateHooks(repo.WikiPath()); err != nil { - return fmt.Errorf("SyncRepositoryHook: %v", err) - } - } - return nil - }, - ); err != nil { - return err - } - - log.Trace("Finished: SyncRepositoryHooks") - return nil -} diff --git a/modules/repository/update.go b/modules/repository/update.go deleted file mode 100644 index b9a5db2a6a..0000000000 --- a/modules/repository/update.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2020 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 repository - -import ( - "context" - "fmt" - "strings" - "time" - - "code.gitea.io/gitea/models" - "code.gitea.io/gitea/models/db" - "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/timeutil" -) - -// PushUpdateAddDeleteTags updates a number of added and delete tags -func PushUpdateAddDeleteTags(repo *models.Repository, gitRepo *git.Repository, addTags, delTags []string) error { - return db.WithTx(func(ctx context.Context) error { - if err := models.PushUpdateDeleteTagsContext(ctx, repo, delTags); err != nil { - return err - } - return pushUpdateAddTags(ctx, repo, gitRepo, addTags) - }) -} - -// pushUpdateAddTags updates a number of add tags -func pushUpdateAddTags(ctx context.Context, repo *models.Repository, gitRepo *git.Repository, tags []string) error { - if len(tags) == 0 { - return nil - } - - lowerTags := make([]string, 0, len(tags)) - for _, tag := range tags { - lowerTags = append(lowerTags, strings.ToLower(tag)) - } - - releases, err := models.GetReleasesByRepoIDAndNames(ctx, repo.ID, lowerTags) - if err != nil { - return fmt.Errorf("GetReleasesByRepoIDAndNames: %v", err) - } - relMap := make(map[string]*models.Release) - for _, rel := range releases { - relMap[rel.LowerTagName] = rel - } - - newReleases := make([]*models.Release, 0, len(lowerTags)-len(relMap)) - - emailToUser := make(map[string]*models.User) - - for i, lowerTag := range lowerTags { - tag, err := gitRepo.GetTag(tags[i]) - if err != nil { - return fmt.Errorf("GetTag: %v", err) - } - commit, err := tag.Commit() - if err != nil { - return fmt.Errorf("Commit: %v", err) - } - - sig := tag.Tagger - if sig == nil { - sig = commit.Author - } - if sig == nil { - sig = commit.Committer - } - var author *models.User - var createdAt = time.Unix(1, 0) - - if sig != nil { - var ok bool - author, ok = emailToUser[sig.Email] - if !ok { - author, err = models.GetUserByEmailContext(ctx, sig.Email) - if err != nil && !models.IsErrUserNotExist(err) { - return fmt.Errorf("GetUserByEmail: %v", err) - } - if author != nil { - emailToUser[sig.Email] = author - } - } - createdAt = sig.When - } - - commitsCount, err := commit.CommitsCount() - if err != nil { - return fmt.Errorf("CommitsCount: %v", err) - } - - rel, has := relMap[lowerTag] - - if !has { - rel = &models.Release{ - RepoID: repo.ID, - Title: "", - TagName: tags[i], - LowerTagName: lowerTag, - Target: "", - Sha1: commit.ID.String(), - NumCommits: commitsCount, - Note: "", - IsDraft: false, - IsPrerelease: false, - IsTag: true, - CreatedUnix: timeutil.TimeStamp(createdAt.Unix()), - } - if author != nil { - rel.PublisherID = author.ID - } - - newReleases = append(newReleases, rel) - } else { - rel.Sha1 = commit.ID.String() - rel.CreatedUnix = timeutil.TimeStamp(createdAt.Unix()) - rel.NumCommits = commitsCount - rel.IsDraft = false - if rel.IsTag && author != nil { - rel.PublisherID = author.ID - } - if err = models.UpdateRelease(ctx, rel); err != nil { - return fmt.Errorf("Update: %v", err) - } - } - } - - if len(newReleases) > 0 { - if err = models.InsertReleasesContext(ctx, newReleases); err != nil { - return fmt.Errorf("Insert: %v", err) - } - } - - return nil -} |