diff --git a/cmd/hook.go b/cmd/hook.go index 2b62b61ca6..8078763b18 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -15,9 +15,9 @@ import ( "strings" "time" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/private" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" @@ -162,7 +162,7 @@ func (n *nilWriter) WriteString(s string) (int, error) { } func runHookPreReceive(c *cli.Context) error { - if os.Getenv(models.EnvIsInternal) == "true" { + if isInternal, _ := strconv.ParseBool(os.Getenv(repo_module.EnvIsInternal)); isInternal { return nil } ctx, cancel := installSignals() @@ -180,12 +180,12 @@ Gitea or set your environment appropriately.`, "") } // the environment is set by serv command - isWiki := os.Getenv(models.EnvRepoIsWiki) == "true" - username := os.Getenv(models.EnvRepoUsername) - reponame := os.Getenv(models.EnvRepoName) - userID, _ := strconv.ParseInt(os.Getenv(models.EnvPusherID), 10, 64) - prID, _ := strconv.ParseInt(os.Getenv(models.EnvPRID), 10, 64) - deployKeyID, _ := strconv.ParseInt(os.Getenv(models.EnvDeployKeyID), 10, 64) + isWiki, _ := strconv.ParseBool(os.Getenv(repo_module.EnvRepoIsWiki)) + username := os.Getenv(repo_module.EnvRepoUsername) + reponame := os.Getenv(repo_module.EnvRepoName) + userID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPusherID), 10, 64) + prID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPRID), 10, 64) + deployKeyID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvDeployKeyID), 10, 64) hookOptions := private.HookOptions{ UserID: userID, @@ -314,7 +314,7 @@ func runHookPostReceive(c *cli.Context) error { } // Now if we're an internal don't do anything else - if os.Getenv(models.EnvIsInternal) == "true" { + if isInternal, _ := strconv.ParseBool(os.Getenv(repo_module.EnvIsInternal)); isInternal { return nil } @@ -343,11 +343,11 @@ Gitea or set your environment appropriately.`, "") } // the environment is set by serv command - repoUser := os.Getenv(models.EnvRepoUsername) - isWiki := os.Getenv(models.EnvRepoIsWiki) == "true" - repoName := os.Getenv(models.EnvRepoName) - pusherID, _ := strconv.ParseInt(os.Getenv(models.EnvPusherID), 10, 64) - pusherName := os.Getenv(models.EnvPusherName) + repoUser := os.Getenv(repo_module.EnvRepoUsername) + isWiki, _ := strconv.ParseBool(os.Getenv(repo_module.EnvRepoIsWiki)) + repoName := os.Getenv(repo_module.EnvRepoName) + pusherID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPusherID), 10, 64) + pusherName := os.Getenv(repo_module.EnvPusherName) hookOptions := private.HookOptions{ UserName: pusherName, @@ -503,10 +503,10 @@ Gitea or set your environment appropriately.`, "") } reader := bufio.NewReader(os.Stdin) - repoUser := os.Getenv(models.EnvRepoUsername) - repoName := os.Getenv(models.EnvRepoName) - pusherID, _ := strconv.ParseInt(os.Getenv(models.EnvPusherID), 10, 64) - pusherName := os.Getenv(models.EnvPusherName) + repoUser := os.Getenv(repo_module.EnvRepoUsername) + repoName := os.Getenv(repo_module.EnvRepoName) + pusherID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPusherID), 10, 64) + pusherName := os.Getenv(repo_module.EnvPusherName) // 1. Version and features negotiation. // S: PKT-LINE(version=1\0push-options atomic...) / PKT-LINE(version=1\n) diff --git a/cmd/serv.go b/cmd/serv.go index b106d40d28..340f591dce 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -24,6 +24,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/pprof" "code.gitea.io/gitea/modules/private" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/services/lfs" @@ -235,17 +236,17 @@ func runServ(c *cli.Context) error { } return fail("Internal Server Error", "%s", err.Error()) } - os.Setenv(models.EnvRepoIsWiki, strconv.FormatBool(results.IsWiki)) - os.Setenv(models.EnvRepoName, results.RepoName) - os.Setenv(models.EnvRepoUsername, results.OwnerName) - os.Setenv(models.EnvPusherName, results.UserName) - os.Setenv(models.EnvPusherEmail, results.UserEmail) - os.Setenv(models.EnvPusherID, strconv.FormatInt(results.UserID, 10)) - os.Setenv(models.EnvRepoID, strconv.FormatInt(results.RepoID, 10)) - os.Setenv(models.EnvPRID, fmt.Sprintf("%d", 0)) - os.Setenv(models.EnvDeployKeyID, fmt.Sprintf("%d", results.DeployKeyID)) - os.Setenv(models.EnvKeyID, fmt.Sprintf("%d", results.KeyID)) - os.Setenv(models.EnvAppURL, setting.AppURL) + os.Setenv(repo_module.EnvRepoIsWiki, strconv.FormatBool(results.IsWiki)) + os.Setenv(repo_module.EnvRepoName, results.RepoName) + os.Setenv(repo_module.EnvRepoUsername, results.OwnerName) + os.Setenv(repo_module.EnvPusherName, results.UserName) + os.Setenv(repo_module.EnvPusherEmail, results.UserEmail) + os.Setenv(repo_module.EnvPusherID, strconv.FormatInt(results.UserID, 10)) + os.Setenv(repo_module.EnvRepoID, strconv.FormatInt(results.RepoID, 10)) + os.Setenv(repo_module.EnvPRID, fmt.Sprintf("%d", 0)) + os.Setenv(repo_module.EnvDeployKeyID, fmt.Sprintf("%d", results.DeployKeyID)) + os.Setenv(repo_module.EnvKeyID, fmt.Sprintf("%d", results.KeyID)) + os.Setenv(repo_module.EnvAppURL, setting.AppURL) // LFS token authentication if verb == lfsAuthenticateVerb { diff --git a/contrib/pr/checkout.go b/contrib/pr/checkout.go index 42ccf88af8..f6d29f3c5b 100644 --- a/contrib/pr/checkout.go +++ b/contrib/pr/checkout.go @@ -24,12 +24,12 @@ import ( "strconv" "time" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/unittest" gitea_git "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/external" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers" @@ -111,7 +111,7 @@ func runPR() { } unittest.LoadFixtures() util.RemoveAll(setting.RepoRootPath) - util.RemoveAll(models.LocalCopyPath()) + util.RemoveAll(repo_module.LocalCopyPath()) unittest.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath) log.Printf("[PR] Setting up router\n") diff --git a/integrations/integration_test.go b/integrations/integration_test.go index 228b412372..4df485a6e8 100644 --- a/integrations/integration_test.go +++ b/integrations/integration_test.go @@ -24,7 +24,6 @@ import ( "testing" "time" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" @@ -32,6 +31,7 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/queue" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" @@ -173,7 +173,7 @@ func initIntegrationTest() { setting.SetCustomPathAndConf("", "", "") setting.LoadForTest() setting.Repository.DefaultBranch = "master" // many test code still assume that default branch is called "master" - _ = util.RemoveAll(models.LocalCopyPath()) + _ = util.RemoveAll(repo_module.LocalCopyPath()) git.CheckLFSVersion() setting.InitDBConfig() if err := storage.Init(); err != nil { diff --git a/models/helper.go b/models/helper.go deleted file mode 100644 index c5f2d7a5b8..0000000000 --- a/models/helper.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2017 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 models - -import ( - repo_model "code.gitea.io/gitea/models/repo" -) - -func valuesRepository(m map[int64]*repo_model.Repository) []*repo_model.Repository { - values := make([]*repo_model.Repository, 0, len(m)) - for _, v := range m { - values = append(values, v) - } - return values -} diff --git a/models/repo.go b/models/repo.go index e20bf90d97..fb7bbba1e1 100644 --- a/models/repo.go +++ b/models/repo.go @@ -43,9 +43,6 @@ var ItemsPerPage = 40 // NewRepoContext creates a new repository context func NewRepoContext() { unit.LoadUnitConfig() - - admin_model.RemoveAllWithNotice(db.DefaultContext, "Clean up temporary repository uploads", setting.Repository.Upload.TempPath) - admin_model.RemoveAllWithNotice(db.DefaultContext, "Clean up temporary repositories", LocalCopyPath()) } // CheckRepoUnitUser check whether user could visit the unit of this repository @@ -527,7 +524,8 @@ func DecrementRepoForkNum(ctx context.Context, repoID int64) error { return err } -func updateRepository(ctx context.Context, repo *repo_model.Repository, visibilityChanged bool) (err error) { +// UpdateRepositoryCtx updates a repository with db context +func UpdateRepositoryCtx(ctx context.Context, repo *repo_model.Repository, visibilityChanged bool) (err error) { repo.LowerName = strings.ToLower(repo.Name) if utf8.RuneCountInString(repo.Description) > 255 { @@ -579,7 +577,7 @@ func updateRepository(ctx context.Context, repo *repo_model.Repository, visibili } for i := range forkRepos { forkRepos[i].IsPrivate = repo.IsPrivate || repo.Owner.Visibility == api.VisibleTypePrivate - if err = updateRepository(ctx, forkRepos[i], true); err != nil { + if err = UpdateRepositoryCtx(ctx, forkRepos[i], true); err != nil { return fmt.Errorf("updateRepository[%d]: %v", forkRepos[i].ID, err) } } @@ -588,11 +586,6 @@ func updateRepository(ctx context.Context, repo *repo_model.Repository, visibili return nil } -// UpdateRepositoryCtx updates a repository with db context -func UpdateRepositoryCtx(ctx context.Context, repo *repo_model.Repository, visibilityChanged bool) error { - return updateRepository(ctx, repo, visibilityChanged) -} - // UpdateRepository updates a repository func UpdateRepository(repo *repo_model.Repository, visibilityChanged bool) (err error) { ctx, committer, err := db.TxContext() @@ -601,7 +594,7 @@ func UpdateRepository(repo *repo_model.Repository, visibilityChanged bool) (err } defer committer.Close() - if err = updateRepository(ctx, repo, visibilityChanged); err != nil { + if err = UpdateRepositoryCtx(ctx, repo, visibilityChanged); err != nil { return fmt.Errorf("updateRepository: %v", err) } diff --git a/models/repo_list.go b/models/repo_list.go index 2c6be0a576..35b2ab5bf8 100644 --- a/models/repo_list.go +++ b/models/repo_list.go @@ -42,6 +42,15 @@ func (repos RepositoryList) Swap(i, j int) { repos[i], repos[j] = repos[j], repos[i] } +// FIXME: Remove in favor of maps.values when MIN_GO_VERSION >= 1.18 +func valuesRepository(m map[int64]*repo_model.Repository) []*repo_model.Repository { + values := make([]*repo_model.Repository, 0, len(m)) + for _, v := range m { + values = append(values, v) + } + return values +} + // RepositoryListOfMap make list from values of map func RepositoryListOfMap(repoMap map[int64]*repo_model.Repository) RepositoryList { return RepositoryList(valuesRepository(repoMap)) diff --git a/models/helper_environment.go b/modules/repository/env.go similarity index 99% rename from models/helper_environment.go rename to modules/repository/env.go index 4cad1e5368..e86e0d4535 100644 --- a/models/helper_environment.go +++ b/modules/repository/env.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package models +package repository import ( "fmt" diff --git a/modules/repository/init.go b/modules/repository/init.go index 515992f97d..845a61ed0a 100644 --- a/modules/repository/init.go +++ b/modules/repository/init.go @@ -360,7 +360,7 @@ func initRepoCommit(ctx context.Context, tmpPath string, repo *repo_model.Reposi if stdout, _, err := git.NewCommand(ctx, "push", "origin", "HEAD:"+defaultBranch). SetDescription(fmt.Sprintf("initRepoCommit (git push): %s", tmpPath)). - RunStdString(&git.RunOpts{Dir: tmpPath, Env: models.InternalPushingEnvironment(u, repo)}); err != nil { + RunStdString(&git.RunOpts{Dir: tmpPath, Env: InternalPushingEnvironment(u, repo)}); err != nil { log.Error("Failed to push back to HEAD: Stdout: %s\nError: %v", stdout, err) return fmt.Errorf("git push: %v", err) } diff --git a/models/helper_directory.go b/modules/repository/temp.go similarity index 98% rename from models/helper_directory.go rename to modules/repository/temp.go index 10114959ef..5947d29965 100644 --- a/models/helper_directory.go +++ b/modules/repository/temp.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package models +package repository import ( "fmt" diff --git a/routers/init.go b/routers/init.go index 2e7fec86db..759945ce25 100644 --- a/routers/init.go +++ b/routers/init.go @@ -73,7 +73,7 @@ func mustInitCtx(ctx context.Context, fn func(ctx context.Context) error) { func InitGitServices() { setting.NewServices() mustInit(storage.Init) - mustInit(repo_service.NewContext) + mustInit(repo_service.Init) } func syncAppPathForGit(ctx context.Context) error { @@ -116,7 +116,9 @@ func GlobalInitInstalled(ctx context.Context) { // Setup i18n translation.InitLocales() - InitGitServices() + setting.NewServices() + mustInit(storage.Init) + mailer.NewContext() mustInit(cache.NewContext) notification.NewContext() @@ -138,6 +140,7 @@ func GlobalInitInstalled(ctx context.Context) { mustInit(oauth2.Init) models.NewRepoContext() + mustInit(repo_service.Init) // Booting long running goroutines. cron.NewContext(ctx) diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index 732b9c9d54..08f388bf3c 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -129,7 +129,7 @@ func RestoreBranchPost(ctx *context.Context) { if err := git.Push(ctx, ctx.Repo.Repository.RepoPath(), git.PushOptions{ Remote: ctx.Repo.Repository.RepoPath(), Branch: fmt.Sprintf("%s:%s%s", deletedBranch.Commit, git.BranchPrefix, deletedBranch.Name), - Env: models.PushingEnvironment(ctx.Doer, ctx.Repo.Repository), + Env: repo_module.PushingEnvironment(ctx.Doer, ctx.Repo.Repository), }); err != nil { if strings.Contains(err.Error(), "already exists") { log.Debug("RestoreBranch: Can't restore branch '%s', since one with same name already exist", deletedBranch.Name) diff --git a/routers/web/repo/http.go b/routers/web/repo/http.go index cc44c8e7e4..a52d9b76c2 100644 --- a/routers/web/repo/http.go +++ b/routers/web/repo/http.go @@ -27,6 +27,7 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" @@ -204,21 +205,21 @@ func httpBase(ctx *context.Context) (h *serviceHandler) { } environ = []string{ - models.EnvRepoUsername + "=" + username, - models.EnvRepoName + "=" + reponame, - models.EnvPusherName + "=" + ctx.Doer.Name, - models.EnvPusherID + fmt.Sprintf("=%d", ctx.Doer.ID), - models.EnvAppURL + "=" + setting.AppURL, + repo_module.EnvRepoUsername + "=" + username, + repo_module.EnvRepoName + "=" + reponame, + repo_module.EnvPusherName + "=" + ctx.Doer.Name, + repo_module.EnvPusherID + fmt.Sprintf("=%d", ctx.Doer.ID), + repo_module.EnvAppURL + "=" + setting.AppURL, } if !ctx.Doer.KeepEmailPrivate { - environ = append(environ, models.EnvPusherEmail+"="+ctx.Doer.Email) + environ = append(environ, repo_module.EnvPusherEmail+"="+ctx.Doer.Email) } if isWiki { - environ = append(environ, models.EnvRepoIsWiki+"=true") + environ = append(environ, repo_module.EnvRepoIsWiki+"=true") } else { - environ = append(environ, models.EnvRepoIsWiki+"=false") + environ = append(environ, repo_module.EnvRepoIsWiki+"=false") } } @@ -269,7 +270,7 @@ func httpBase(ctx *context.Context) (h *serviceHandler) { } } - environ = append(environ, models.EnvRepoID+fmt.Sprintf("=%d", repo.ID)) + environ = append(environ, repo_module.EnvRepoID+fmt.Sprintf("=%d", repo.ID)) w := ctx.Resp r := ctx.Req diff --git a/routers/web/repo/lfs.go b/routers/web/repo/lfs.go index e0ef864edf..7c2ff1cfae 100644 --- a/routers/web/repo/lfs.go +++ b/routers/web/repo/lfs.go @@ -23,6 +23,7 @@ import ( "code.gitea.io/gitea/modules/git/pipeline" "code.gitea.io/gitea/modules/lfs" "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/typesniffer" @@ -103,14 +104,14 @@ func LFSLocks(ctx *context.Context) { } // Clone base repo. - tmpBasePath, err := models.CreateTemporaryPath("locks") + tmpBasePath, err := repo_module.CreateTemporaryPath("locks") if err != nil { log.Error("Failed to create temporary path: %v", err) ctx.ServerError("LFSLocks", err) return } defer func() { - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("LFSLocks: RemoveTemporaryPath: %v", err) } }() diff --git a/services/pull/merge.go b/services/pull/merge.go index e054df716b..0af3cc1613 100644 --- a/services/pull/merge.go +++ b/services/pull/merge.go @@ -28,6 +28,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/references" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" asymkey_service "code.gitea.io/gitea/services/asymkey" @@ -234,7 +235,7 @@ func rawMerge(ctx context.Context, pr *models.PullRequest, doer *user_model.User return "", err } defer func() { - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("Merge: RemoveTemporaryPath: %s", err) } }() @@ -590,7 +591,7 @@ func rawMerge(ctx context.Context, pr *models.PullRequest, doer *user_model.User headUser = pr.HeadRepo.Owner } - env = models.FullPushingEnvironment( + env = repo_module.FullPushingEnvironment( headUser, doer, pr.BaseRepo, diff --git a/services/pull/patch.go b/services/pull/patch.go index eeedcf2d38..6e2889b060 100644 --- a/services/pull/patch.go +++ b/services/pull/patch.go @@ -20,6 +20,7 @@ import ( "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/process" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/util" "github.com/gobwas/glob" @@ -64,7 +65,7 @@ func TestPatch(pr *models.PullRequest) error { return err } defer func() { - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("Merge: RemoveTemporaryPath: %s", err) } }() diff --git a/services/pull/pull.go b/services/pull/pull.go index d226c60ec2..b94b6769a4 100644 --- a/services/pull/pull.go +++ b/services/pull/pull.go @@ -24,6 +24,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/process" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/sync" issue_service "code.gitea.io/gitea/services/issue" @@ -452,7 +453,7 @@ func pushToBaseRepoHelper(ctx context.Context, pr *models.PullRequest, prefixHea Branch: prefixHeadBranch + pr.HeadBranch + ":" + gitRefName, Force: true, // Use InternalPushingEnvironment here because we know that pre-receive and post-receive do not run on a refs/pulls/... - Env: models.InternalPushingEnvironment(pr.Issue.Poster, pr.BaseRepo), + Env: repo_module.InternalPushingEnvironment(pr.Issue.Poster, pr.BaseRepo), }); err != nil { if git.IsErrPushOutOfDate(err) { // This should not happen as we're using force! diff --git a/services/pull/temp_repo.go b/services/pull/temp_repo.go index f8f44ac018..6b01809d49 100644 --- a/services/pull/temp_repo.go +++ b/services/pull/temp_repo.go @@ -16,6 +16,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" ) // createTemporaryRepo creates a temporary repo with "base" for pr.BaseBranch and "tracking" for pr.HeadBranch @@ -46,7 +47,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e } // Clone base repo. - tmpBasePath, err := models.CreateTemporaryPath("pull") + tmpBasePath, err := repo_module.CreateTemporaryPath("pull") if err != nil { log.Error("CreateTemporaryPath: %v", err) return "", err @@ -57,7 +58,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e if err := git.InitRepository(ctx, tmpBasePath, false); err != nil { log.Error("git init tmpBasePath: %v", err) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", err @@ -85,7 +86,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e if err := addCacheRepo(tmpBasePath, baseRepoPath); err != nil { log.Error("Unable to add base repository to temporary repo [%s -> %s]: %v", pr.BaseRepo.FullName(), tmpBasePath, err) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", fmt.Errorf("Unable to add base repository to temporary repo [%s -> tmpBasePath]: %v", pr.BaseRepo.FullName(), err) @@ -99,7 +100,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e Stderr: &errbuf, }); err != nil { log.Error("Unable to add base repository as origin [%s -> %s]: %v\n%s\n%s", pr.BaseRepo.FullName(), tmpBasePath, err, outbuf.String(), errbuf.String()) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", fmt.Errorf("Unable to add base repository as origin [%s -> tmpBasePath]: %v\n%s\n%s", pr.BaseRepo.FullName(), err, outbuf.String(), errbuf.String()) @@ -114,7 +115,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e Stderr: &errbuf, }); err != nil { log.Error("Unable to fetch origin base branch [%s:%s -> base, original_base in %s]: %v:\n%s\n%s", pr.BaseRepo.FullName(), pr.BaseBranch, tmpBasePath, err, outbuf.String(), errbuf.String()) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", fmt.Errorf("Unable to fetch origin base branch [%s:%s -> base, original_base in tmpBasePath]: %v\n%s\n%s", pr.BaseRepo.FullName(), pr.BaseBranch, err, outbuf.String(), errbuf.String()) @@ -129,7 +130,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e Stderr: &errbuf, }); err != nil { log.Error("Unable to set HEAD as base branch [%s]: %v\n%s\n%s", tmpBasePath, err, outbuf.String(), errbuf.String()) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", fmt.Errorf("Unable to set HEAD as base branch [tmpBasePath]: %v\n%s\n%s", err, outbuf.String(), errbuf.String()) @@ -139,7 +140,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e if err := addCacheRepo(tmpBasePath, headRepoPath); err != nil { log.Error("Unable to add head repository to temporary repo [%s -> %s]: %v", pr.HeadRepo.FullName(), tmpBasePath, err) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", fmt.Errorf("Unable to head base repository to temporary repo [%s -> tmpBasePath]: %v", pr.HeadRepo.FullName(), err) @@ -152,7 +153,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e Stderr: &errbuf, }); err != nil { log.Error("Unable to add head repository as head_repo [%s -> %s]: %v\n%s\n%s", pr.HeadRepo.FullName(), tmpBasePath, err, outbuf.String(), errbuf.String()) - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } return "", fmt.Errorf("Unable to add head repository as head_repo [%s -> tmpBasePath]: %v\n%s\n%s", pr.HeadRepo.FullName(), err, outbuf.String(), errbuf.String()) @@ -176,7 +177,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e Stdout: &outbuf, Stderr: &errbuf, }); err != nil { - if err := models.RemoveTemporaryPath(tmpBasePath); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil { log.Error("CreateTempRepo: RemoveTemporaryPath: %s", err) } if !git.IsBranchExist(ctx, pr.HeadRepo.RepoPath(), pr.HeadBranch) { diff --git a/services/pull/update.go b/services/pull/update.go index 08967b59b3..3c5c1c048c 100644 --- a/services/pull/update.go +++ b/services/pull/update.go @@ -14,6 +14,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" ) // Update updates pull request with base branch. @@ -154,7 +155,7 @@ func GetDiverging(ctx context.Context, pr *models.PullRequest) (*git.DivergeObje return nil, err } defer func() { - if err := models.RemoveTemporaryPath(tmpRepo); err != nil { + if err := repo_module.RemoveTemporaryPath(tmpRepo); err != nil { log.Error("Merge: RemoveTemporaryPath: %s", err) } }() diff --git a/services/repository/branch.go b/services/repository/branch.go index d9fc47c63a..88fc67fa8c 100644 --- a/services/repository/branch.go +++ b/services/repository/branch.go @@ -36,7 +36,7 @@ func CreateNewBranch(ctx context.Context, doer *user_model.User, repo *repo_mode if err := git.Push(ctx, repo.RepoPath(), git.PushOptions{ Remote: repo.RepoPath(), Branch: fmt.Sprintf("%s%s:%s%s", git.BranchPrefix, oldBranchName, git.BranchPrefix, branchName), - Env: models.PushingEnvironment(doer, repo), + Env: repo_module.PushingEnvironment(doer, repo), }); err != nil { if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) { return err @@ -93,7 +93,7 @@ func CreateNewBranchFromCommit(ctx context.Context, doer *user_model.User, repo if err := git.Push(ctx, repo.RepoPath(), git.PushOptions{ Remote: repo.RepoPath(), Branch: fmt.Sprintf("%s:%s%s", commit, git.BranchPrefix, branchName), - Env: models.PushingEnvironment(doer, repo), + Env: repo_module.PushingEnvironment(doer, repo), }); err != nil { if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) { return err diff --git a/services/repository/files/temp_repo.go b/services/repository/files/temp_repo.go index 8ebf991382..9c7d9aafec 100644 --- a/services/repository/files/temp_repo.go +++ b/services/repository/files/temp_repo.go @@ -19,6 +19,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" asymkey_service "code.gitea.io/gitea/services/asymkey" "code.gitea.io/gitea/services/gitdiff" @@ -34,7 +35,7 @@ type TemporaryUploadRepository struct { // NewTemporaryUploadRepository creates a new temporary upload repository func NewTemporaryUploadRepository(ctx context.Context, repo *repo_model.Repository) (*TemporaryUploadRepository, error) { - basePath, err := models.CreateTemporaryPath("upload") + basePath, err := repo_module.CreateTemporaryPath("upload") if err != nil { return nil, err } @@ -45,7 +46,7 @@ func NewTemporaryUploadRepository(ctx context.Context, repo *repo_model.Reposito // Close the repository cleaning up all files func (t *TemporaryUploadRepository) Close() { defer t.gitRepo.Close() - if err := models.RemoveTemporaryPath(t.basePath); err != nil { + if err := repo_module.RemoveTemporaryPath(t.basePath); err != nil { log.Error("Failed to remove temporary path %s: %v", t.basePath, err) } } @@ -315,7 +316,7 @@ func (t *TemporaryUploadRepository) CommitTreeWithDate(parent string, author, co // Push the provided commitHash to the repository branch by the provided user func (t *TemporaryUploadRepository) Push(doer *user_model.User, commitHash, branch string) error { // Because calls hooks we need to pass in the environment - env := models.PushingEnvironment(doer, t.repo) + env := repo_module.PushingEnvironment(doer, t.repo) if err := git.Push(t.ctx, t.basePath, git.PushOptions{ Remote: t.repo.RepoPath(), Branch: strings.TrimSpace(commitHash) + ":" + git.BranchPrefix + strings.TrimSpace(branch), diff --git a/services/repository/repository.go b/services/repository/repository.go index 685a3c7601..6799ca586e 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -9,6 +9,8 @@ import ( "fmt" "code.gitea.io/gitea/models" + admin_model "code.gitea.io/gitea/models/admin" + "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/organization" packages_model "code.gitea.io/gitea/models/packages" repo_model "code.gitea.io/gitea/models/repo" @@ -16,7 +18,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" repo_module "code.gitea.io/gitea/modules/repository" - cfg "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/setting" pull_service "code.gitea.io/gitea/services/pull" ) @@ -67,7 +69,7 @@ func PushCreateRepo(authUser, owner *user_model.User, repoName string) (*repo_mo repo, err := CreateRepository(authUser, owner, models.CreateRepoOptions{ Name: repoName, - IsPrivate: cfg.Repository.DefaultPushCreatePrivate, + IsPrivate: setting.Repository.DefaultPushCreatePrivate, }) if err != nil { return nil, err @@ -76,8 +78,10 @@ func PushCreateRepo(authUser, owner *user_model.User, repoName string) (*repo_mo return repo, nil } -// NewContext start repository service -func NewContext() error { +// Init start repository service +func Init() error { repo_module.LoadRepoConfig() + admin_model.RemoveAllWithNotice(db.DefaultContext, "Clean up temporary repository uploads", setting.Repository.Upload.TempPath) + admin_model.RemoveAllWithNotice(db.DefaultContext, "Clean up temporary repositories", repo_module.LocalCopyPath()) return initPushQueue() } diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go index 796291fd38..43e35eed69 100644 --- a/services/wiki/wiki.go +++ b/services/wiki/wiki.go @@ -133,12 +133,12 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model hasMasterBranch := git.IsBranchExist(ctx, repo.WikiPath(), "master") - basePath, err := models.CreateTemporaryPath("update-wiki") + basePath, err := repo_module.CreateTemporaryPath("update-wiki") if err != nil { return err } defer func() { - if err := models.RemoveTemporaryPath(basePath); err != nil { + if err := repo_module.RemoveTemporaryPath(basePath); err != nil { log.Error("Merge: RemoveTemporaryPath: %s", err) } }() @@ -249,7 +249,7 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model if err := git.Push(gitRepo.Ctx, basePath, git.PushOptions{ Remote: "origin", Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, "master"), - Env: models.FullPushingEnvironment( + Env: repo_module.FullPushingEnvironment( doer, doer, repo, @@ -287,12 +287,12 @@ func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model return fmt.Errorf("InitWiki: %v", err) } - basePath, err := models.CreateTemporaryPath("update-wiki") + basePath, err := repo_module.CreateTemporaryPath("update-wiki") if err != nil { return err } defer func() { - if err := models.RemoveTemporaryPath(basePath); err != nil { + if err := repo_module.RemoveTemporaryPath(basePath); err != nil { log.Error("Merge: RemoveTemporaryPath: %s", err) } }() @@ -363,7 +363,7 @@ func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model if err := git.Push(gitRepo.Ctx, basePath, git.PushOptions{ Remote: "origin", Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, "master"), - Env: models.PushingEnvironment(doer, repo), + Env: repo_module.PushingEnvironment(doer, repo), }); err != nil { if git.IsErrPushOutOfDate(err) || git.IsErrPushRejected(err) { return err