Skip to content

Commit 24b81ac

Browse files
authored
Use gitrepo's clone and push when possible (#36093)
1 Move `IsRepositoryModelOrDirExist` and `CheckCreateRepository` to service layer 2 Use `gitrepo.Pushxxx` instead of `git.Push` when possible 3 use `gitrepo.Clonexxx` instead of `gitrepo.Clone` when possible
1 parent 1c69fdc commit 24b81ac

File tree

19 files changed

+78
-76
lines changed

19 files changed

+78
-76
lines changed

models/repo/repo.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -869,16 +869,6 @@ func GetRepositoriesMapByIDs(ctx context.Context, ids []int64) (map[int64]*Repos
869869
return repos, db.GetEngine(ctx).In("id", ids).Find(&repos)
870870
}
871871

872-
// IsRepositoryModelOrDirExist returns true if the repository with given name under user has already existed.
873-
func IsRepositoryModelOrDirExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
874-
has, err := IsRepositoryModelExist(ctx, u, repoName)
875-
if err != nil {
876-
return false, err
877-
}
878-
isDir, err := util.IsDir(RepoPath(u.Name, repoName))
879-
return has || isDir, err
880-
}
881-
882872
func IsRepositoryModelExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
883873
return db.GetEngine(ctx).Get(&Repository{
884874
OwnerID: u.ID,

models/repo/update.go

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import (
99
"time"
1010

1111
"code.gitea.io/gitea/models/db"
12-
user_model "code.gitea.io/gitea/models/user"
13-
"code.gitea.io/gitea/modules/log"
1412
"code.gitea.io/gitea/modules/util"
1513
)
1614

@@ -106,35 +104,6 @@ func (err ErrRepoFilesAlreadyExist) Unwrap() error {
106104
return util.ErrAlreadyExist
107105
}
108106

109-
// CheckCreateRepository check if doer could create a repository in new owner
110-
func CheckCreateRepository(ctx context.Context, doer, owner *user_model.User, name string, overwriteOrAdopt bool) error {
111-
if !doer.CanCreateRepoIn(owner) {
112-
return ErrReachLimitOfRepo{owner.MaxRepoCreation}
113-
}
114-
115-
if err := IsUsableRepoName(name); err != nil {
116-
return err
117-
}
118-
119-
has, err := IsRepositoryModelOrDirExist(ctx, owner, name)
120-
if err != nil {
121-
return fmt.Errorf("IsRepositoryExist: %w", err)
122-
} else if has {
123-
return ErrRepoAlreadyExist{owner.Name, name}
124-
}
125-
126-
repoPath := RepoPath(owner.Name, name)
127-
isExist, err := util.IsExist(repoPath)
128-
if err != nil {
129-
log.Error("Unable to check if %s exists. Error: %v", repoPath, err)
130-
return err
131-
}
132-
if !overwriteOrAdopt && isExist {
133-
return ErrRepoFilesAlreadyExist{owner.Name, name}
134-
}
135-
return nil
136-
}
137-
138107
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize
139108
func UpdateRepoSize(ctx context.Context, repoID, gitSize, lfsSize int64) error {
140109
_, err := db.GetEngine(ctx).ID(repoID).Cols("size", "git_size", "lfs_size").NoAutoTime().Update(&Repository{

modules/gitrepo/push.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,19 @@ import (
99
"code.gitea.io/gitea/modules/git"
1010
)
1111

12-
func Push(ctx context.Context, repo Repository, opts git.PushOptions) error {
12+
// PushToExternal pushes a managed repository to an external remote.
13+
func PushToExternal(ctx context.Context, repo Repository, opts git.PushOptions) error {
1314
return git.Push(ctx, repoPath(repo), opts)
1415
}
16+
17+
// Push pushes from one managed repository to another managed repository.
18+
func Push(ctx context.Context, fromRepo, toRepo Repository, opts git.PushOptions) error {
19+
opts.Remote = repoPath(toRepo)
20+
return git.Push(ctx, repoPath(fromRepo), opts)
21+
}
22+
23+
// PushFromLocal pushes from a local path to a managed repository.
24+
func PushFromLocal(ctx context.Context, fromLocalPath string, toRepo Repository, opts git.PushOptions) error {
25+
opts.Remote = repoPath(toRepo)
26+
return git.Push(ctx, fromLocalPath, opts)
27+
}

routers/web/repo/branch.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
repo_model "code.gitea.io/gitea/models/repo"
1616
"code.gitea.io/gitea/models/unit"
1717
"code.gitea.io/gitea/modules/git"
18+
"code.gitea.io/gitea/modules/gitrepo"
1819
"code.gitea.io/gitea/modules/log"
1920
"code.gitea.io/gitea/modules/optional"
2021
repo_module "code.gitea.io/gitea/modules/repository"
@@ -133,8 +134,7 @@ func RestoreBranchPost(ctx *context.Context) {
133134
return
134135
}
135136

136-
if err := git.Push(ctx, ctx.Repo.Repository.RepoPath(), git.PushOptions{
137-
Remote: ctx.Repo.Repository.RepoPath(),
137+
if err := gitrepo.Push(ctx, ctx.Repo.Repository, ctx.Repo.Repository, git.PushOptions{
138138
Branch: fmt.Sprintf("%s:%s%s", deletedBranch.CommitID, git.BranchPrefix, deletedBranch.Name),
139139
Env: repo_module.PushingEnvironment(ctx.Doer, ctx.Repo.Repository),
140140
}); err != nil {

routers/web/repo/editor_util.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
repo_model "code.gitea.io/gitea/models/repo"
1414
user_model "code.gitea.io/gitea/models/user"
1515
"code.gitea.io/gitea/modules/git"
16+
"code.gitea.io/gitea/modules/gitrepo"
1617
"code.gitea.io/gitea/modules/json"
1718
"code.gitea.io/gitea/modules/log"
1819
repo_module "code.gitea.io/gitea/modules/repository"
@@ -102,8 +103,7 @@ func getUniqueRepositoryName(ctx context.Context, ownerID int64, name string) st
102103
}
103104

104105
func editorPushBranchToForkedRepository(ctx context.Context, doer *user_model.User, baseRepo *repo_model.Repository, baseBranchName string, targetRepo *repo_model.Repository, targetBranchName string) error {
105-
return git.Push(ctx, baseRepo.RepoPath(), git.PushOptions{
106-
Remote: targetRepo.RepoPath(),
106+
return gitrepo.Push(ctx, baseRepo, targetRepo, git.PushOptions{
107107
Branch: baseBranchName + ":" + targetBranchName,
108108
Env: repo_module.PushingEnvironment(doer, targetRepo),
109109
})

routers/web/repo/issue_comment.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"code.gitea.io/gitea/models/renderhelper"
1717
user_model "code.gitea.io/gitea/models/user"
1818
"code.gitea.io/gitea/modules/git"
19+
"code.gitea.io/gitea/modules/gitrepo"
1920
"code.gitea.io/gitea/modules/htmlutil"
2021
"code.gitea.io/gitea/modules/log"
2122
"code.gitea.io/gitea/modules/markup/markdown"
@@ -141,8 +142,7 @@ func NewComment(ctx *context.Context) {
141142

142143
if prHeadCommitID != headBranchCommitID {
143144
// force push to base repo
144-
err := git.Push(ctx, pull.HeadRepo.RepoPath(), git.PushOptions{
145-
Remote: pull.BaseRepo.RepoPath(),
145+
err := gitrepo.Push(ctx, pull.HeadRepo, pull.BaseRepo, git.PushOptions{
146146
Branch: pull.HeadBranch + ":" + prHeadRef,
147147
Force: true,
148148
Env: repo_module.InternalPushingEnvironment(pull.Issue.Poster, pull.BaseRepo),

routers/web/repo/migrate.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"code.gitea.io/gitea/services/context"
2626
"code.gitea.io/gitea/services/forms"
2727
"code.gitea.io/gitea/services/migrations"
28+
repo_service "code.gitea.io/gitea/services/repository"
2829
"code.gitea.io/gitea/services/task"
2930
)
3031

@@ -237,7 +238,7 @@ func MigratePost(ctx *context.Context) {
237238
opts.AWSSecretAccessKey = form.AWSSecretAccessKey
238239
}
239240

240-
err = repo_model.CheckCreateRepository(ctx, ctx.Doer, ctxUser, opts.RepoName, false)
241+
err = repo_service.CheckCreateRepository(ctx, ctx.Doer, ctxUser, opts.RepoName, false)
241242
if err != nil {
242243
handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, form)
243244
return

routers/web/repo/setting/lfs.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"code.gitea.io/gitea/modules/git"
2121
"code.gitea.io/gitea/modules/git/attribute"
2222
"code.gitea.io/gitea/modules/git/pipeline"
23+
"code.gitea.io/gitea/modules/gitrepo"
2324
"code.gitea.io/gitea/modules/lfs"
2425
"code.gitea.io/gitea/modules/log"
2526
repo_module "code.gitea.io/gitea/modules/repository"
@@ -112,7 +113,7 @@ func LFSLocks(ctx *context.Context) {
112113
}
113114
defer cleanup()
114115

115-
if err := git.Clone(ctx, ctx.Repo.Repository.RepoPath(), tmpBasePath, git.CloneRepoOptions{
116+
if err := gitrepo.CloneRepoToLocal(ctx, ctx.Repo.Repository, tmpBasePath, git.CloneRepoOptions{
116117
Bare: true,
117118
Shared: true,
118119
}); err != nil {

services/doctor/misc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) erro
215215
if !isExist {
216216
numNeedUpdate++
217217
if autofix {
218-
if err := git.WriteCommitGraph(ctx, repo.RepoPath()); err != nil {
218+
if err := gitrepo.WriteCommitGraph(ctx, repo); err != nil {
219219
logger.Error("Unable to write commit-graph in %s. Error: %v", repo.FullName(), err)
220220
return err
221221
}

services/mirror/mirror_push.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func runPushSync(ctx context.Context, m *repo_model.PushMirror) error {
153153
log.Trace("Pushing %s mirror[%d] remote %s", storageRepo.RelativePath(), m.ID, m.RemoteName)
154154

155155
envs := proxy.EnvWithProxy(remoteURL.URL)
156-
if err := gitrepo.Push(ctx, storageRepo, git.PushOptions{
156+
if err := gitrepo.PushToExternal(ctx, storageRepo, git.PushOptions{
157157
Remote: m.RemoteName,
158158
Force: true,
159159
Mirror: true,

0 commit comments

Comments
 (0)