History

Simplify how git repositories are opened (#28937)

## Purpose This is a refactor toward building an abstraction over managing git repositories. Afterwards, it does not matter anymore if they are stored on the local disk or somewhere remote. ## What this PR changes We used `git.OpenRepository` everywhere previously. Now, we should split them into two distinct functions: Firstly, there are temporary repositories which do not change: ```go git.OpenRepository(ctx, diskPath) ``` Gitea managed repositories having a record in the database in the `repository` table are moved into the new package `gitrepo`: ```go gitrepo.OpenRepository(ctx, repo_model.Repo) ``` Why is `repo_model.Repository` the second parameter instead of file path? Because then we can easily adapt our repository storage strategy. The repositories can be stored locally, however, they could just as well be stored on a remote server. ## Further changes in other PRs - A Git Command wrapper on package `gitrepo` could be created. i.e. `NewCommand(ctx, repo_model.Repository, commands...)`. `git.RunOpts{Dir: repo.RepoPath()}`, the directory should be empty before invoking this method and it can be filled in the function only. #28940 - Remove the `RepoPath()`/`WikiPath()` functions to reduce the possibility of mistakes. ---------

Lunny Xiao committed 2 years ago

Commit 5f82ead1 parent 60e4a9884 files · +426 −273Browse files

Unified · Split

84 files
  1. cmd/admin.go +2 −1
  2. models/activities/repo_activity.go +3 −2
  3. models/issues/comment.go +2 −3
  4. models/issues/pull.go +2 −1
  5. models/repo/repo.go +8 −0
  6. modules/context/api.go +4 −5
  7. modules/context/context.go +2 −2
  8. modules/context/repo.go +5 −5
  9. modules/contexttest/context_tests.go +3 −3
  10. modules/git/repo_base.go +0 −44
  11. modules/git/repo_branch.go +0 −23
  12. modules/git/repo_branch_gogit.go +0 −29
  13. modules/git/repo_branch_nogogit.go +4 −9
  14. modules/gitrepo/branch.go +32 −0
  15. modules/gitrepo/gitrepo.go +103 −0
  16. modules/gitrepo/walk_gogit.go +40 −0
  17. modules/gitrepo/walk_nogogit.go +17 −0
  18. modules/indexer/stats/db.go +2 −1
  19. modules/repository/branch.go +3 −2
  20. modules/repository/generate.go +2 −1
  21. modules/repository/repo.go +2 −1
  22. routers/api/v1/repo/branch.go +3 −2
  23. routers/api/v1/repo/file.go +2 −2
  24. routers/api/v1/repo/pull.go +5 −4
  25. routers/api/v1/repo/pull_review.go +2 −3
  26. routers/api/v1/repo/repo.go +2 −1
  27. routers/api/v1/repo/wiki.go +2 −1
  28. routers/api/v1/utils/git.go +2 −1
  29. routers/private/internal_repo.go +2 −2
  30. routers/web/repo/commit.go +3 −2
  31. routers/web/repo/compare.go +4 −3
  32. routers/web/repo/editor_test.go +2 −1
  33. routers/web/repo/pull.go +9 −8
  34. routers/web/repo/wiki.go +2 −1
  35. routers/web/repo/wiki_test.go +2 −1
  36. routers/web/shared/user/header.go +2 −1
  37. services/actions/notifier_helper.go +2 −1
  38. services/asymkey/sign.go +5 −2
  39. services/automerge/automerge.go +4 −3
  40. services/convert/pull.go +5 −4
  41. services/doctor/misc.go +2 −1
  42. services/migrations/gitea_uploader.go +2 −1
  43. services/migrations/gitea_uploader_test.go +3 −2
  44. services/mirror/mirror_pull.go +4 −3
  45. services/mirror/mirror_push.go +15 −6
  46. services/pull/check.go +2 −1
  47. services/pull/comment.go +2 −3
  48. services/pull/commit_status.go +2 −1
  49. services/pull/merge_rebase.go +2 −1
  50. services/pull/merge_squash.go +2 −1
  51. services/pull/patch.go +2 −1
  52. services/pull/pull.go +9 −8
  53. services/pull/pull_test.go +3 −2
  54. services/pull/review.go +2 −1
  55. services/release/release.go +2 −1
  56. services/release/release_test.go +4 −6
  57. services/repository/adopt.go +2 −1
  58. services/repository/archiver/archiver.go +2 −1
  59. services/repository/branch.go +3 −6
  60. services/repository/create.go +2 −1
  61. services/repository/files/commit.go +2 −1
  62. services/repository/files/content.go +3 −2
  63. services/repository/files/content_test.go +2 −3
  64. services/repository/files/file_test.go +2 −2
  65. services/repository/files/patch.go +2 −1
  66. services/repository/files/update.go +2 −1
  67. services/repository/fork.go +3 −2
  68. services/repository/hooks.go +3 −3
  69. services/repository/lfs.go +2 −1
  70. services/repository/push.go +4 −5
  71. services/wiki/wiki.go +2 −2
  72. services/wiki/wiki_test.go +5 −4
  73. tests/integration/api_packages_cargo_test.go +2 −2
  74. tests/integration/api_releases_test.go +3 −2
  75. tests/integration/api_repo_file_create_test.go +3 −3
  76. tests/integration/api_repo_file_update_test.go +2 −2
  77. tests/integration/api_repo_files_change_test.go +2 −2
  78. tests/integration/api_repo_get_contents_list_test.go +2 −1
  79. tests/integration/api_repo_get_contents_test.go +2 −1
  80. tests/integration/api_repo_git_tags_test.go +2 −1
  81. tests/integration/mirror_pull_test.go +2 −1
  82. tests/integration/mirror_push_test.go +3 −2
  83. tests/integration/pull_merge_test.go +3 −2
  84. tests/integration/repofiles_change_test.go +5 −4
cmd/admin.go+2−1
@@ -11,6 +11,7 @@ import ( · 10 unmodified lines
11 "code.gitea.io/gitea/models/db"11 "code.gitea.io/gitea/models/db"
12 repo_model "code.gitea.io/gitea/models/repo"12 repo_model "code.gitea.io/gitea/models/repo"
13 "code.gitea.io/gitea/modules/git"13 "code.gitea.io/gitea/modules/git"
14 "code.gitea.io/gitea/modules/gitrepo"
14 "code.gitea.io/gitea/modules/log"15 "code.gitea.io/gitea/modules/log"
15 repo_module "code.gitea.io/gitea/modules/repository"16 repo_module "code.gitea.io/gitea/modules/repository"
16 17
@@ -122,7 +123,7 @@ func runRepoSyncReleases(_ *cli.Context) error { · 105 unmodified lines
122 log.Trace("Processing next %d repos of %d", len(repos), count)123 log.Trace("Processing next %d repos of %d", len(repos), count)
123 for _, repo := range repos {124 for _, repo := range repos {
124 log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RepoPath())125 log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RepoPath())
125 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())126 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
126 if err != nil {127 if err != nil {
127 log.Warn("OpenRepository: %v", err)128 log.Warn("OpenRepository: %v", err)
128 continue129 continue
models/activities/repo_activity.go+3−2
@@ -14,6 +14,7 @@ import ( · 13 unmodified lines
14 repo_model "code.gitea.io/gitea/models/repo"14 repo_model "code.gitea.io/gitea/models/repo"
15 user_model "code.gitea.io/gitea/models/user"15 user_model "code.gitea.io/gitea/models/user"
16 "code.gitea.io/gitea/modules/git"16 "code.gitea.io/gitea/modules/git"
17 "code.gitea.io/gitea/modules/gitrepo"
17 18
18 "xorm.io/xorm"19 "xorm.io/xorm"
19)20)
@@ -65,7 +66,7 @@ func GetActivityStats(ctx context.Context, repo *repo_model.Repository, timeFrom · 45 unmodified lines
65 return nil, fmt.Errorf("FillUnresolvedIssues: %w", err)66 return nil, fmt.Errorf("FillUnresolvedIssues: %w", err)
66 }67 }
67 if code {68 if code {
68 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())69 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
69 if err != nil {70 if err != nil {
70 return nil, fmt.Errorf("OpenRepository: %w", err)71 return nil, fmt.Errorf("OpenRepository: %w", err)
71 }72 }
@@ -82,7 +83,7 @@ func GetActivityStats(ctx context.Context, repo *repo_model.Repository, timeFrom · 10 unmodified lines
82 83
83// GetActivityStatsTopAuthors returns top author stats for git commits for all branches84// GetActivityStatsTopAuthors returns top author stats for git commits for all branches
84func GetActivityStatsTopAuthors(ctx context.Context, repo *repo_model.Repository, timeFrom time.Time, count int) ([]*ActivityAuthorData, error) {85func GetActivityStatsTopAuthors(ctx context.Context, repo *repo_model.Repository, timeFrom time.Time, count int) ([]*ActivityAuthorData, error) {
85 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())86 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
86 if err != nil {87 if err != nil {
87 return nil, fmt.Errorf("OpenRepository: %w", err)88 return nil, fmt.Errorf("OpenRepository: %w", err)
88 }89 }
models/issues/comment.go+2−3
@@ -18,7 +18,7 @@ import ( · 17 unmodified lines
18 repo_model "code.gitea.io/gitea/models/repo"18 repo_model "code.gitea.io/gitea/models/repo"
19 user_model "code.gitea.io/gitea/models/user"19 user_model "code.gitea.io/gitea/models/user"
20 "code.gitea.io/gitea/modules/container"20 "code.gitea.io/gitea/modules/container"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/json"22 "code.gitea.io/gitea/modules/json"
23 "code.gitea.io/gitea/modules/log"23 "code.gitea.io/gitea/modules/log"
24 "code.gitea.io/gitea/modules/references"24 "code.gitea.io/gitea/modules/references"
@@ -762,8 +762,7 @@ func (c *Comment) LoadPushCommits(ctx context.Context) (err error) { · 737 unmodified lines
762 c.OldCommit = data.CommitIDs[0]762 c.OldCommit = data.CommitIDs[0]
763 c.NewCommit = data.CommitIDs[1]763 c.NewCommit = data.CommitIDs[1]
764 } else {764 } else {
765 repoPath := c.Issue.Repo.RepoPath()765 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, c.Issue.Repo)
766 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repoPath)
767 if err != nil {766 if err != nil {
768 return err767 return err
769 }768 }
models/issues/pull.go+2−1
@@ -19,6 +19,7 @@ import ( · 18 unmodified lines
19 repo_model "code.gitea.io/gitea/models/repo"19 repo_model "code.gitea.io/gitea/models/repo"
20 user_model "code.gitea.io/gitea/models/user"20 user_model "code.gitea.io/gitea/models/user"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/git"
22 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/log"23 "code.gitea.io/gitea/modules/log"
23 "code.gitea.io/gitea/modules/setting"24 "code.gitea.io/gitea/modules/setting"
24 "code.gitea.io/gitea/modules/timeutil"25 "code.gitea.io/gitea/modules/timeutil"
@@ -865,7 +866,7 @@ func PullRequestCodeOwnersReview(ctx context.Context, pull *Issue, pr *PullReque · 840 unmodified lines
865 return err866 return err
866 }867 }
867 868
868 repo, err := git.OpenRepository(ctx, pr.BaseRepo.RepoPath())869 repo, err := gitrepo.OpenRepository(ctx, pr.BaseRepo)
869 if err != nil {870 if err != nil {
870 return err871 return err
871 }872 }
models/repo/repo.go+8−0
@@ -196,6 +196,14 @@ func init() { · 195 unmodified lines
196 db.RegisterModel(new(Repository))196 db.RegisterModel(new(Repository))
197}197}
198 198
199func (repo *Repository) GetName() string {
200 return repo.Name
201}
202
203func (repo *Repository) GetOwnerName() string {
204 return repo.OwnerName
205}
206
199// SanitizedOriginalURL returns a sanitized OriginalURL207// SanitizedOriginalURL returns a sanitized OriginalURL
200func (repo *Repository) SanitizedOriginalURL() string {208func (repo *Repository) SanitizedOriginalURL() string {
201 if repo.OriginalURL == "" {209 if repo.OriginalURL == "" {
modules/context/api.go+4−5
@@ -11,11 +11,11 @@ import ( · 10 unmodified lines
11 "net/url"11 "net/url"
12 "strings"12 "strings"
13 13
14 repo_model "code.gitea.io/gitea/models/repo"
15 "code.gitea.io/gitea/models/unit"14 "code.gitea.io/gitea/models/unit"
16 user_model "code.gitea.io/gitea/models/user"15 user_model "code.gitea.io/gitea/models/user"
17 mc "code.gitea.io/gitea/modules/cache"16 mc "code.gitea.io/gitea/modules/cache"
18 "code.gitea.io/gitea/modules/git"17 "code.gitea.io/gitea/modules/git"
18 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/httpcache"19 "code.gitea.io/gitea/modules/httpcache"
20 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
21 "code.gitea.io/gitea/modules/setting"21 "code.gitea.io/gitea/modules/setting"
@@ -224,7 +224,7 @@ func APIContexter() func(http.Handler) http.Handler { · 202 unmodified lines
224 defer baseCleanUp()224 defer baseCleanUp()
225 225
226 ctx.Base.AppendContextValue(apiContextKey, ctx)226 ctx.Base.AppendContextValue(apiContextKey, ctx)
227 ctx.Base.AppendContextValueFunc(git.RepositoryContextKey, func() any { return ctx.Repo.GitRepo })227 ctx.Base.AppendContextValueFunc(gitrepo.RepositoryContextKey, func() any { return ctx.Repo.GitRepo })
228 228
229 // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid.229 // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid.
230 if ctx.Req.Method == "POST" && strings.Contains(ctx.Req.Header.Get("Content-Type"), "multipart/form-data") {230 if ctx.Req.Method == "POST" && strings.Contains(ctx.Req.Header.Get("Content-Type"), "multipart/form-data") {
@@ -278,10 +278,9 @@ func ReferencesGitRepo(allowEmpty ...bool) func(ctx *APIContext) (cancel context · 47 unmodified lines
278 278
279 // For API calls.279 // For API calls.
280 if ctx.Repo.GitRepo == nil {280 if ctx.Repo.GitRepo == nil {
281 repoPath := repo_model.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)281 gitRepo, err := gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
282 gitRepo, err := git.OpenRepository(ctx, repoPath)
283 if err != nil {282 if err != nil {
284 ctx.Error(http.StatusInternalServerError, "RepoRef Invalid repo "+repoPath, err)283 ctx.Error(http.StatusInternalServerError, fmt.Sprintf("Open Repository %v failed", ctx.Repo.Repository.FullName()), err)
285 return cancel284 return cancel
286 }285 }
287 ctx.Repo.GitRepo = gitRepo286 ctx.Repo.GitRepo = gitRepo
modules/context/context.go+2−2
@@ -17,7 +17,7 @@ import ( · 16 unmodified lines
17 "code.gitea.io/gitea/models/unit"17 "code.gitea.io/gitea/models/unit"
18 user_model "code.gitea.io/gitea/models/user"18 user_model "code.gitea.io/gitea/models/user"
19 mc "code.gitea.io/gitea/modules/cache"19 mc "code.gitea.io/gitea/modules/cache"
20 "code.gitea.io/gitea/modules/git"20 "code.gitea.io/gitea/modules/gitrepo"
21 "code.gitea.io/gitea/modules/httpcache"21 "code.gitea.io/gitea/modules/httpcache"
22 "code.gitea.io/gitea/modules/setting"22 "code.gitea.io/gitea/modules/setting"
23 "code.gitea.io/gitea/modules/templates"23 "code.gitea.io/gitea/modules/templates"
@@ -163,7 +163,7 @@ func Contexter() func(next http.Handler) http.Handler { · 139 unmodified lines
163 ctx.Data["PageData"] = ctx.PageData163 ctx.Data["PageData"] = ctx.PageData
164 164
165 ctx.Base.AppendContextValue(WebContextKey, ctx)165 ctx.Base.AppendContextValue(WebContextKey, ctx)
166 ctx.Base.AppendContextValueFunc(git.RepositoryContextKey, func() any { return ctx.Repo.GitRepo })166 ctx.Base.AppendContextValueFunc(gitrepo.RepositoryContextKey, func() any { return ctx.Repo.GitRepo })
167 167
168 ctx.Csrf = PrepareCSRFProtector(csrfOpts, ctx)168 ctx.Csrf = PrepareCSRFProtector(csrfOpts, ctx)
169 169
modules/context/repo.go+5−5
@@ -23,6 +23,7 @@ import ( · 22 unmodified lines
23 user_model "code.gitea.io/gitea/models/user"23 user_model "code.gitea.io/gitea/models/user"
24 "code.gitea.io/gitea/modules/cache"24 "code.gitea.io/gitea/modules/cache"
25 "code.gitea.io/gitea/modules/git"25 "code.gitea.io/gitea/modules/git"
26 "code.gitea.io/gitea/modules/gitrepo"
26 code_indexer "code.gitea.io/gitea/modules/indexer/code"27 code_indexer "code.gitea.io/gitea/modules/indexer/code"
27 "code.gitea.io/gitea/modules/log"28 "code.gitea.io/gitea/modules/log"
28 repo_module "code.gitea.io/gitea/modules/repository"29 repo_module "code.gitea.io/gitea/modules/repository"
@@ -633,7 +634,7 @@ func RepoAssignment(ctx *Context) context.CancelFunc { · 604 unmodified lines
633 return nil634 return nil
634 }635 }
635 636
636 gitRepo, err := git.OpenRepository(ctx, repo_model.RepoPath(userName, repoName))637 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
637 if err != nil {638 if err != nil {
638 if strings.Contains(err.Error(), "repository does not exist") || strings.Contains(err.Error(), "no such file or directory") {639 if strings.Contains(err.Error(), "repository does not exist") || strings.Contains(err.Error(), "no such file or directory") {
639 log.Error("Repository %-v has a broken repository on the file system: %s Error: %v", ctx.Repo.Repository, ctx.Repo.Repository.RepoPath(), err)640 log.Error("Repository %-v has a broken repository on the file system: %s Error: %v", ctx.Repo.Repository, ctx.Repo.Repository.RepoPath(), err)
@@ -645,7 +646,7 @@ func RepoAssignment(ctx *Context) context.CancelFunc { · 5 unmodified lines
645 }646 }
646 return nil647 return nil
647 }648 }
648 ctx.ServerError("RepoAssignment Invalid repo "+repo_model.RepoPath(userName, repoName), err)649 ctx.ServerError("RepoAssignment Invalid repo "+repo.FullName(), err)
649 return nil650 return nil
650 }651 }
651 if ctx.Repo.GitRepo != nil {652 if ctx.Repo.GitRepo != nil {
@@ -920,10 +921,9 @@ func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context · 268 unmodified lines
920 )921 )
921 922
922 if ctx.Repo.GitRepo == nil {923 if ctx.Repo.GitRepo == nil {
923 repoPath := repo_model.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)924 ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
924 ctx.Repo.GitRepo, err = git.OpenRepository(ctx, repoPath)
925 if err != nil {925 if err != nil {
926 ctx.ServerError("RepoRef Invalid repo "+repoPath, err)926 ctx.ServerError(fmt.Sprintf("Open Repository %v failed", ctx.Repo.Repository.FullName()), err)
927 return nil927 return nil
928 }928 }
929 // We opened it, we should close it929 // We opened it, we should close it
modules/contexttest/context_tests.go+3−3
@@ -18,7 +18,7 @@ import ( · 17 unmodified lines
18 "code.gitea.io/gitea/models/unittest"18 "code.gitea.io/gitea/models/unittest"
19 user_model "code.gitea.io/gitea/models/user"19 user_model "code.gitea.io/gitea/models/user"
20 "code.gitea.io/gitea/modules/context"20 "code.gitea.io/gitea/modules/context"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/templates"22 "code.gitea.io/gitea/modules/templates"
23 "code.gitea.io/gitea/modules/translation"23 "code.gitea.io/gitea/modules/translation"
24 "code.gitea.io/gitea/modules/web/middleware"24 "code.gitea.io/gitea/modules/web/middleware"
@@ -107,7 +107,7 @@ func LoadRepoCommit(t *testing.T, ctx gocontext.Context) { · 82 unmodified lines
107 assert.FailNow(t, "context is not *context.Context or *context.APIContext")107 assert.FailNow(t, "context is not *context.Context or *context.APIContext")
108 }108 }
109 109
110 gitRepo, err := git.OpenRepository(ctx, repo.Repository.RepoPath())110 gitRepo, err := gitrepo.OpenRepository(ctx, repo.Repository)
111 assert.NoError(t, err)111 assert.NoError(t, err)
112 defer gitRepo.Close()112 defer gitRepo.Close()
113 branch, err := gitRepo.GetHEADBranch()113 branch, err := gitRepo.GetHEADBranch()
@@ -137,7 +137,7 @@ func LoadUser(t *testing.T, ctx gocontext.Context, userID int64) { · 23 unmodified lines
137func LoadGitRepo(t *testing.T, ctx *context.Context) {137func LoadGitRepo(t *testing.T, ctx *context.Context) {
138 assert.NoError(t, ctx.Repo.Repository.LoadOwner(ctx))138 assert.NoError(t, ctx.Repo.Repository.LoadOwner(ctx))
139 var err error139 var err error
140 ctx.Repo.GitRepo, err = git.OpenRepository(ctx, ctx.Repo.Repository.RepoPath())140 ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
141 assert.NoError(t, err)141 assert.NoError(t, err)
142}142}
143 143
modules/git/repo_base.go+0−44
@@ -3,48 +3,4 @@ · 2 unmodified lines
3 3
4package git4package git
5 5
6import (
7 "context"
8 "io"
9)
10
11var isGogit bool6var isGogit bool
12
13// contextKey is a value for use with context.WithValue.
14type contextKey struct {
15 name string
16}
17
18// RepositoryContextKey is a context key. It is used with context.Value() to get the current Repository for the context
19var RepositoryContextKey = &contextKey{"repository"}
20
21// RepositoryFromContext attempts to get the repository from the context
22func RepositoryFromContext(ctx context.Context, path string) *Repository {
23 value := ctx.Value(RepositoryContextKey)
24 if value == nil {
25 return nil
26 }
27
28 if repo, ok := value.(*Repository); ok && repo != nil {
29 if repo.Path == path {
30 return repo
31 }
32 }
33
34 return nil
35}
36
37type nopCloser func()
38
39func (nopCloser) Close() error { return nil }
40
41// RepositoryFromContextOrOpen attempts to get the repository from the context or just opens it
42func RepositoryFromContextOrOpen(ctx context.Context, path string) (*Repository, io.Closer, error) {
43 gitRepo := RepositoryFromContext(ctx, path)
44 if gitRepo != nil {
45 return gitRepo, nopCloser(nil), nil
46 }
47
48 gitRepo, err := OpenRepository(ctx, path)
49 return gitRepo, gitRepo, err
50}
modules/git/repo_branch.go+0−23
@@ -86,29 +86,6 @@ func (repo *Repository) GetBranch(branch string) (*Branch, error) { · 85 unmodified lines
86 }, nil86 }, nil
87}87}
88 88
89// GetBranchesByPath returns a branch by it's path
90// if limit = 0 it will not limit
91func GetBranchesByPath(ctx context.Context, path string, skip, limit int) ([]*Branch, int, error) {
92 gitRepo, err := OpenRepository(ctx, path)
93 if err != nil {
94 return nil, 0, err
95 }
96 defer gitRepo.Close()
97
98 return gitRepo.GetBranches(skip, limit)
99}
100
101// GetBranchCommitID returns a branch commit ID by its name
102func GetBranchCommitID(ctx context.Context, path, branch string) (string, error) {
103 gitRepo, err := OpenRepository(ctx, path)
104 if err != nil {
105 return "", err
106 }
107 defer gitRepo.Close()
108
109 return gitRepo.GetBranchCommitID(branch)
110}
111
112// GetBranches returns a slice of *git.Branch89// GetBranches returns a slice of *git.Branch
113func (repo *Repository) GetBranches(skip, limit int) ([]*Branch, int, error) {90func (repo *Repository) GetBranches(skip, limit int) ([]*Branch, int, error) {
114 brs, countAll, err := repo.GetBranchNames(skip, limit)91 brs, countAll, err := repo.GetBranchNames(skip, limit)
modules/git/repo_branch_gogit.go+0−29
@@ -7,7 +7,6 @@ · 6 unmodified lines
7package git7package git
8 8
9import (9import (
10 "context"
11 "sort"10 "sort"
12 "strings"11 "strings"
13 12
@@ -95,34 +94,6 @@ func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error) { · 81 unmodified lines
95 return branchNames, len(branchData), nil94 return branchNames, len(branchData), nil
96}95}
97 96
98// WalkReferences walks all the references from the repository
99// refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.
100func WalkReferences(ctx context.Context, repoPath string, walkfn func(sha1, refname string) error) (int, error) {
101 repo := RepositoryFromContext(ctx, repoPath)
102 if repo == nil {
103 var err error
104 repo, err = OpenRepository(ctx, repoPath)
105 if err != nil {
106 return 0, err
107 }
108 defer repo.Close()
109 }
110
111 i := 0
112 iter, err := repo.gogitRepo.References()
113 if err != nil {
114 return i, err
115 }
116 defer iter.Close()
117
118 err = iter.ForEach(func(ref *plumbing.Reference) error {
119 err := walkfn(ref.Hash().String(), string(ref.Name()))
120 i++
121 return err
122 })
123 return i, err
124}
125
126// WalkReferences walks all the references from the repository97// WalkReferences walks all the references from the repository
127func (repo *Repository) WalkReferences(arg ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {98func (repo *Repository) WalkReferences(arg ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {
128 i := 099 i := 0
modules/git/repo_branch_nogogit.go+4−9
@@ -65,11 +65,6 @@ func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error) { · 64 unmodified lines
65 return callShowRef(repo.Ctx, repo.Path, BranchPrefix, TrustedCmdArgs{BranchPrefix, "--sort=-committerdate"}, skip, limit)65 return callShowRef(repo.Ctx, repo.Path, BranchPrefix, TrustedCmdArgs{BranchPrefix, "--sort=-committerdate"}, skip, limit)
66}66}
67 67
68// WalkReferences walks all the references from the repository
69func WalkReferences(ctx context.Context, repoPath string, walkfn func(sha1, refname string) error) (int, error) {
70 return walkShowRef(ctx, repoPath, nil, 0, 0, walkfn)
71}
72
73// WalkReferences walks all the references from the repository68// WalkReferences walks all the references from the repository
74// refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.69// refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.
75func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {70func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {
@@ -81,12 +76,12 @@ func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walk · 5 unmodified lines
81 args = TrustedCmdArgs{BranchPrefix, "--sort=-committerdate"}76 args = TrustedCmdArgs{BranchPrefix, "--sort=-committerdate"}
82 }77 }
83 78
84 return walkShowRef(repo.Ctx, repo.Path, args, skip, limit, walkfn)79 return WalkShowRef(repo.Ctx, repo.Path, args, skip, limit, walkfn)
85}80}
86 81
87// callShowRef return refs, if limit = 0 it will not limit82// callShowRef return refs, if limit = 0 it will not limit
88func callShowRef(ctx context.Context, repoPath, trimPrefix string, extraArgs TrustedCmdArgs, skip, limit int) (branchNames []string, countAll int, err error) {83func callShowRef(ctx context.Context, repoPath, trimPrefix string, extraArgs TrustedCmdArgs, skip, limit int) (branchNames []string, countAll int, err error) {
89 countAll, err = walkShowRef(ctx, repoPath, extraArgs, skip, limit, func(_, branchName string) error {84 countAll, err = WalkShowRef(ctx, repoPath, extraArgs, skip, limit, func(_, branchName string) error {
90 branchName = strings.TrimPrefix(branchName, trimPrefix)85 branchName = strings.TrimPrefix(branchName, trimPrefix)
91 branchNames = append(branchNames, branchName)86 branchNames = append(branchNames, branchName)
92 87
@@ -95,7 +90,7 @@ func callShowRef(ctx context.Context, repoPath, trimPrefix string, extraArgs Tru · 2 unmodified lines
95 return branchNames, countAll, err90 return branchNames, countAll, err
96}91}
97 92
98func walkShowRef(ctx context.Context, repoPath string, extraArgs TrustedCmdArgs, skip, limit int, walkfn func(sha1, refname string) error) (countAll int, err error) {93func WalkShowRef(ctx context.Context, repoPath string, extraArgs TrustedCmdArgs, skip, limit int, walkfn func(sha1, refname string) error) (countAll int, err error) {
99 stdoutReader, stdoutWriter := io.Pipe()94 stdoutReader, stdoutWriter := io.Pipe()
100 defer func() {95 defer func() {
101 _ = stdoutReader.Close()96 _ = stdoutReader.Close()
@@ -189,7 +184,7 @@ func walkShowRef(ctx context.Context, repoPath string, extraArgs TrustedCmdArgs, · 87 unmodified lines
189// GetRefsBySha returns all references filtered with prefix that belong to a sha commit hash184// GetRefsBySha returns all references filtered with prefix that belong to a sha commit hash
190func (repo *Repository) GetRefsBySha(sha, prefix string) ([]string, error) {185func (repo *Repository) GetRefsBySha(sha, prefix string) ([]string, error) {
191 var revList []string186 var revList []string
192 _, err := walkShowRef(repo.Ctx, repo.Path, nil, 0, 0, func(walkSha, refname string) error {187 _, err := WalkShowRef(repo.Ctx, repo.Path, nil, 0, 0, func(walkSha, refname string) error {
193 if walkSha == sha && strings.HasPrefix(refname, prefix) {188 if walkSha == sha && strings.HasPrefix(refname, prefix) {
194 revList = append(revList, refname)189 revList = append(revList, refname)
195 }190 }
modules/gitrepo/branch.go+32−0
@@ -0,0 +1,32 @@
1// Copyright 2024 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package gitrepo
5
6import (
7 "context"
8
9 "code.gitea.io/gitea/modules/git"
10)
11
12// GetBranchesByPath returns a branch by its path
13// if limit = 0 it will not limit
14func GetBranchesByPath(ctx context.Context, repo Repository, skip, limit int) ([]*git.Branch, int, error) {
15 gitRepo, err := OpenRepository(ctx, repo)
16 if err != nil {
17 return nil, 0, err
18 }
19 defer gitRepo.Close()
20
21 return gitRepo.GetBranches(skip, limit)
22}
23
24func GetBranchCommitID(ctx context.Context, repo Repository, branch string) (string, error) {
25 gitRepo, err := OpenRepository(ctx, repo)
26 if err != nil {
27 return "", err
28 }
29 defer gitRepo.Close()
30
31 return gitRepo.GetBranchCommitID(branch)
32}
modules/gitrepo/gitrepo.go+103−0
@@ -0,0 +1,103 @@
1// Copyright 2024 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package gitrepo
5
6import (
7 "context"
8 "io"
9 "path/filepath"
10 "strings"
11
12 "code.gitea.io/gitea/modules/git"
13 "code.gitea.io/gitea/modules/setting"
14)
15
16type Repository interface {
17 GetName() string
18 GetOwnerName() string
19}
20
21func repoPath(repo Repository) string {
22 return filepath.Join(setting.RepoRootPath, strings.ToLower(repo.GetOwnerName()), strings.ToLower(repo.GetName())+".git")
23}
24
25func wikiPath(repo Repository) string {
26 return filepath.Join(setting.RepoRootPath, strings.ToLower(repo.GetOwnerName()), strings.ToLower(repo.GetName())+".wiki.git")
27}
28
29// OpenRepository opens the repository at the given relative path with the provided context.
30func OpenRepository(ctx context.Context, repo Repository) (*git.Repository, error) {
31 return git.OpenRepository(ctx, repoPath(repo))
32}
33
34func OpenWikiRepository(ctx context.Context, repo Repository) (*git.Repository, error) {
35 return git.OpenRepository(ctx, wikiPath(repo))
36}
37
38// contextKey is a value for use with context.WithValue.
39type contextKey struct {
40 name string
41}
42
43// RepositoryContextKey is a context key. It is used with context.Value() to get the current Repository for the context
44var RepositoryContextKey = &contextKey{"repository"}
45
46// RepositoryFromContext attempts to get the repository from the context
47func repositoryFromContext(ctx context.Context, repo Repository) *git.Repository {
48 value := ctx.Value(RepositoryContextKey)
49 if value == nil {
50 return nil
51 }
52
53 if gitRepo, ok := value.(*git.Repository); ok && gitRepo != nil {
54 if gitRepo.Path == repoPath(repo) {
55 return gitRepo
56 }
57 }
58
59 return nil
60}
61
62type nopCloser func()
63
64func (nopCloser) Close() error { return nil }
65
66// RepositoryFromContextOrOpen attempts to get the repository from the context or just opens it
67func RepositoryFromContextOrOpen(ctx context.Context, repo Repository) (*git.Repository, io.Closer, error) {
68 gitRepo := repositoryFromContext(ctx, repo)
69 if gitRepo != nil {
70 return gitRepo, nopCloser(nil), nil
71 }
72
73 gitRepo, err := OpenRepository(ctx, repo)
74 return gitRepo, gitRepo, err
75}
76
77// repositoryFromContextPath attempts to get the repository from the context
78func repositoryFromContextPath(ctx context.Context, path string) *git.Repository {
79 value := ctx.Value(RepositoryContextKey)
80 if value == nil {
81 return nil
82 }
83
84 if repo, ok := value.(*git.Repository); ok && repo != nil {
85 if repo.Path == path {
86 return repo
87 }
88 }
89
90 return nil
91}
92
93// RepositoryFromContextOrOpenPath attempts to get the repository from the context or just opens it
94// Deprecated: Use RepositoryFromContextOrOpen instead
95func RepositoryFromContextOrOpenPath(ctx context.Context, path string) (*git.Repository, io.Closer, error) {
96 gitRepo := repositoryFromContextPath(ctx, path)
97 if gitRepo != nil {
98 return gitRepo, nopCloser(nil), nil
99 }
100
101 gitRepo, err := git.OpenRepository(ctx, path)
102 return gitRepo, gitRepo, err
103}
modules/gitrepo/walk_gogit.go+40−0
@@ -0,0 +1,40 @@
1// Copyright 2024 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4//go:build gogit
5
6package gitrepo
7
8import (
9 "context"
10
11 "github.com/go-git/go-git/v5/plumbing"
12)
13
14// WalkReferences walks all the references from the repository
15// refname is empty, ObjectTag or ObjectBranch. All other values should be treated as equivalent to empty.
16func WalkReferences(ctx context.Context, repo Repository, walkfn func(sha1, refname string) error) (int, error) {
17 gitRepo := repositoryFromContext(ctx, repo)
18 if gitRepo == nil {
19 var err error
20 gitRepo, err = OpenRepository(ctx, repo)
21 if err != nil {
22 return 0, err
23 }
24 defer gitRepo.Close()
25 }
26
27 i := 0
28 iter, err := gitRepo.GoGitRepo().References()
29 if err != nil {
30 return i, err
31 }
32 defer iter.Close()
33
34 err = iter.ForEach(func(ref *plumbing.Reference) error {
35 err := walkfn(ref.Hash().String(), string(ref.Name()))
36 i++
37 return err
38 })
39 return i, err
40}
modules/gitrepo/walk_nogogit.go+17−0
@@ -0,0 +1,17 @@
1// Copyright 2024 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4//go:build !gogit
5
6package gitrepo
7
8import (
9 "context"
10
11 "code.gitea.io/gitea/modules/git"
12)
13
14// WalkReferences walks all the references from the repository
15func WalkReferences(ctx context.Context, repo Repository, walkfn func(sha1, refname string) error) (int, error) {
16 return git.WalkShowRef(ctx, repoPath(repo), nil, 0, 0, walkfn)
17}
modules/indexer/stats/db.go+2−1
@@ -8,6 +8,7 @@ import ( · 7 unmodified lines
8 8
9 repo_model "code.gitea.io/gitea/models/repo"9 repo_model "code.gitea.io/gitea/models/repo"
10 "code.gitea.io/gitea/modules/git"10 "code.gitea.io/gitea/modules/git"
11 "code.gitea.io/gitea/modules/gitrepo"
11 "code.gitea.io/gitea/modules/graceful"12 "code.gitea.io/gitea/modules/graceful"
12 "code.gitea.io/gitea/modules/log"13 "code.gitea.io/gitea/modules/log"
13 "code.gitea.io/gitea/modules/process"14 "code.gitea.io/gitea/modules/process"
@@ -35,7 +36,7 @@ func (db *DBIndexer) Index(id int64) error { · 21 unmodified lines
35 return err36 return err
36 }37 }
37 38
38 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())39 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
39 if err != nil {40 if err != nil {
40 if err.Error() == "no such file or directory" {41 if err.Error() == "no such file or directory" {
41 return nil42 return nil
modules/repository/branch.go+3−2
@@ -11,6 +11,7 @@ import ( · 10 unmodified lines
11 repo_model "code.gitea.io/gitea/models/repo"11 repo_model "code.gitea.io/gitea/models/repo"
12 "code.gitea.io/gitea/modules/container"12 "code.gitea.io/gitea/modules/container"
13 "code.gitea.io/gitea/modules/git"13 "code.gitea.io/gitea/modules/git"
14 "code.gitea.io/gitea/modules/gitrepo"
14 "code.gitea.io/gitea/modules/log"15 "code.gitea.io/gitea/modules/log"
15 "code.gitea.io/gitea/modules/timeutil"16 "code.gitea.io/gitea/modules/timeutil"
16)17)
@@ -24,9 +25,9 @@ func SyncRepoBranches(ctx context.Context, repoID, doerID int64) (int64, error) · 7 unmodified lines
24 25
25 log.Debug("SyncRepoBranches: in Repo[%d:%s]", repo.ID, repo.FullName())26 log.Debug("SyncRepoBranches: in Repo[%d:%s]", repo.ID, repo.FullName())
26 27
27 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())28 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
28 if err != nil {29 if err != nil {
29 log.Error("OpenRepository[%s]: %w", repo.RepoPath(), err)30 log.Error("OpenRepository[%s]: %w", repo.FullName(), err)
30 return 0, err31 return 0, err
31 }32 }
32 defer gitRepo.Close()33 defer gitRepo.Close()
modules/repository/generate.go+2−1
@@ -19,6 +19,7 @@ import ( · 18 unmodified lines
19 repo_model "code.gitea.io/gitea/models/repo"19 repo_model "code.gitea.io/gitea/models/repo"
20 user_model "code.gitea.io/gitea/models/user"20 user_model "code.gitea.io/gitea/models/user"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/git"
22 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/log"23 "code.gitea.io/gitea/modules/log"
23 "code.gitea.io/gitea/modules/util"24 "code.gitea.io/gitea/modules/util"
24 25
@@ -271,7 +272,7 @@ func generateGitContent(ctx context.Context, repo, templateRepo, generateRepo *r · 246 unmodified lines
271 repo.DefaultBranch = templateRepo.DefaultBranch272 repo.DefaultBranch = templateRepo.DefaultBranch
272 }273 }
273 274
274 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())275 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
275 if err != nil {276 if err != nil {
276 return fmt.Errorf("openRepository: %w", err)277 return fmt.Errorf("openRepository: %w", err)
277 }278 }
modules/repository/repo.go+2−1
@@ -19,6 +19,7 @@ import ( · 18 unmodified lines
19 user_model "code.gitea.io/gitea/models/user"19 user_model "code.gitea.io/gitea/models/user"
20 "code.gitea.io/gitea/modules/container"20 "code.gitea.io/gitea/modules/container"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/git"
22 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/lfs"23 "code.gitea.io/gitea/modules/lfs"
23 "code.gitea.io/gitea/modules/log"24 "code.gitea.io/gitea/modules/log"
24 "code.gitea.io/gitea/modules/migration"25 "code.gitea.io/gitea/modules/migration"
@@ -291,7 +292,7 @@ func SyncRepoTags(ctx context.Context, repoID int64) error { · 266 unmodified lines
291 return err292 return err
292 }293 }
293 294
294 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())295 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
295 if err != nil {296 if err != nil {
296 return err297 return err
297 }298 }
routers/api/v1/repo/branch.go+3−2
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 user_model "code.gitea.io/gitea/models/user"16 user_model "code.gitea.io/gitea/models/user"
17 "code.gitea.io/gitea/modules/context"17 "code.gitea.io/gitea/modules/context"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 repo_module "code.gitea.io/gitea/modules/repository"20 repo_module "code.gitea.io/gitea/modules/repository"
20 api "code.gitea.io/gitea/modules/structs"21 api "code.gitea.io/gitea/modules/structs"
21 "code.gitea.io/gitea/modules/util"22 "code.gitea.io/gitea/modules/util"
@@ -643,7 +644,7 @@ func CreateBranchProtection(ctx *context.APIContext) { · 621 unmodified lines
643 } else {644 } else {
644 if !isPlainRule {645 if !isPlainRule {
645 if ctx.Repo.GitRepo == nil {646 if ctx.Repo.GitRepo == nil {
646 ctx.Repo.GitRepo, err = git.OpenRepository(ctx, ctx.Repo.Repository.RepoPath())647 ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
647 if err != nil {648 if err != nil {
648 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)649 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
649 return650 return
@@ -920,7 +921,7 @@ func EditBranchProtection(ctx *context.APIContext) { · 270 unmodified lines
920 } else {921 } else {
921 if !isPlainRule {922 if !isPlainRule {
922 if ctx.Repo.GitRepo == nil {923 if ctx.Repo.GitRepo == nil {
923 ctx.Repo.GitRepo, err = git.OpenRepository(ctx, ctx.Repo.Repository.RepoPath())924 ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
924 if err != nil {925 if err != nil {
925 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)926 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
926 return927 return
routers/api/v1/repo/file.go+2−2
@@ -21,6 +21,7 @@ import ( · 20 unmodified lines
21 "code.gitea.io/gitea/models/unit"21 "code.gitea.io/gitea/models/unit"
22 "code.gitea.io/gitea/modules/context"22 "code.gitea.io/gitea/modules/context"
23 "code.gitea.io/gitea/modules/git"23 "code.gitea.io/gitea/modules/git"
24 "code.gitea.io/gitea/modules/gitrepo"
24 "code.gitea.io/gitea/modules/httpcache"25 "code.gitea.io/gitea/modules/httpcache"
25 "code.gitea.io/gitea/modules/lfs"26 "code.gitea.io/gitea/modules/lfs"
26 "code.gitea.io/gitea/modules/log"27 "code.gitea.io/gitea/modules/log"
@@ -279,9 +280,8 @@ func GetArchive(ctx *context.APIContext) { · 252 unmodified lines
279 // "404":280 // "404":
280 // "$ref": "#/responses/notFound"281 // "$ref": "#/responses/notFound"
281 282
282 repoPath := repo_model.RepoPath(ctx.Params(":username"), ctx.Params(":reponame"))
283 if ctx.Repo.GitRepo == nil {283 if ctx.Repo.GitRepo == nil {
284 gitRepo, err := git.OpenRepository(ctx, repoPath)284 gitRepo, err := gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
285 if err != nil {285 if err != nil {
286 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)286 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
287 return287 return
routers/api/v1/repo/pull.go+5−4
@@ -23,6 +23,7 @@ import ( · 22 unmodified lines
23 user_model "code.gitea.io/gitea/models/user"23 user_model "code.gitea.io/gitea/models/user"
24 "code.gitea.io/gitea/modules/context"24 "code.gitea.io/gitea/modules/context"
25 "code.gitea.io/gitea/modules/git"25 "code.gitea.io/gitea/modules/git"
26 "code.gitea.io/gitea/modules/gitrepo"
26 "code.gitea.io/gitea/modules/log"27 "code.gitea.io/gitea/modules/log"
27 "code.gitea.io/gitea/modules/setting"28 "code.gitea.io/gitea/modules/setting"
28 api "code.gitea.io/gitea/modules/structs"29 api "code.gitea.io/gitea/modules/structs"
@@ -906,9 +907,9 @@ func MergePullRequest(ctx *context.APIContext) { · 877 unmodified lines
906 if ctx.Repo != nil && ctx.Repo.Repository != nil && ctx.Repo.Repository.ID == pr.HeadRepoID && ctx.Repo.GitRepo != nil {907 if ctx.Repo != nil && ctx.Repo.Repository != nil && ctx.Repo.Repository.ID == pr.HeadRepoID && ctx.Repo.GitRepo != nil {
907 headRepo = ctx.Repo.GitRepo908 headRepo = ctx.Repo.GitRepo
908 } else {909 } else {
909 headRepo, err = git.OpenRepository(ctx, pr.HeadRepo.RepoPath())910 headRepo, err = gitrepo.OpenRepository(ctx, pr.HeadRepo)
910 if err != nil {911 if err != nil {
911 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.HeadRepo.RepoPath()), err)912 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.HeadRepo.FullName()), err)
912 return913 return
913 }914 }
914 defer headRepo.Close()915 defer headRepo.Close()
@@ -1004,7 +1005,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption) · 89 unmodified lines
1004 headRepo = ctx.Repo.Repository1005 headRepo = ctx.Repo.Repository
1005 headGitRepo = ctx.Repo.GitRepo1006 headGitRepo = ctx.Repo.GitRepo
1006 } else {1007 } else {
1007 headGitRepo, err = git.OpenRepository(ctx, repo_model.RepoPath(headUser.Name, headRepo.Name))1008 headGitRepo, err = gitrepo.OpenRepository(ctx, headRepo)
1008 if err != nil {1009 if err != nil {
1009 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)1010 ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
1010 return nil, nil, nil, nil, "", ""1011 return nil, nil, nil, nil, "", ""
@@ -1308,7 +1309,7 @@ func GetPullRequestCommits(ctx *context.APIContext) { · 297 unmodified lines
1308 }1309 }
1309 1310
1310 var prInfo *git.CompareInfo1311 var prInfo *git.CompareInfo
1311 baseGitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.BaseRepo.RepoPath())1312 baseGitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.BaseRepo)
1312 if err != nil {1313 if err != nil {
1313 ctx.ServerError("OpenRepository", err)1314 ctx.ServerError("OpenRepository", err)
1314 return1315 return
routers/api/v1/repo/pull_review.go+2−3
@@ -13,7 +13,7 @@ import ( · 12 unmodified lines
13 access_model "code.gitea.io/gitea/models/perm/access"13 access_model "code.gitea.io/gitea/models/perm/access"
14 user_model "code.gitea.io/gitea/models/user"14 user_model "code.gitea.io/gitea/models/user"
15 "code.gitea.io/gitea/modules/context"15 "code.gitea.io/gitea/modules/context"
16 "code.gitea.io/gitea/modules/git"16 "code.gitea.io/gitea/modules/gitrepo"
17 api "code.gitea.io/gitea/modules/structs"17 api "code.gitea.io/gitea/modules/structs"
18 "code.gitea.io/gitea/modules/web"18 "code.gitea.io/gitea/modules/web"
19 "code.gitea.io/gitea/routers/api/v1/utils"19 "code.gitea.io/gitea/routers/api/v1/utils"
@@ -329,8 +329,7 @@ func CreatePullReview(ctx *context.APIContext) { · 309 unmodified lines
329 329
330 // if CommitID is empty, set it as lastCommitID330 // if CommitID is empty, set it as lastCommitID
331 if opts.CommitID == "" {331 if opts.CommitID == "" {
332 332 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.Issue.Repo)
333 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.Issue.Repo.RepoPath())
334 if err != nil {333 if err != nil {
335 ctx.Error(http.StatusInternalServerError, "git.OpenRepository", err)334 ctx.Error(http.StatusInternalServerError, "git.OpenRepository", err)
336 return335 return
routers/api/v1/repo/repo.go+2−1
@@ -21,6 +21,7 @@ import ( · 20 unmodified lines
21 user_model "code.gitea.io/gitea/models/user"21 user_model "code.gitea.io/gitea/models/user"
22 "code.gitea.io/gitea/modules/context"22 "code.gitea.io/gitea/modules/context"
23 "code.gitea.io/gitea/modules/git"23 "code.gitea.io/gitea/modules/git"
24 "code.gitea.io/gitea/modules/gitrepo"
24 "code.gitea.io/gitea/modules/label"25 "code.gitea.io/gitea/modules/label"
25 "code.gitea.io/gitea/modules/log"26 "code.gitea.io/gitea/modules/log"
26 repo_module "code.gitea.io/gitea/modules/repository"27 repo_module "code.gitea.io/gitea/modules/repository"
@@ -718,7 +719,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err · 691 unmodified lines
718 719
719 if ctx.Repo.GitRepo == nil && !repo.IsEmpty {720 if ctx.Repo.GitRepo == nil && !repo.IsEmpty {
720 var err error721 var err error
721 ctx.Repo.GitRepo, err = git.OpenRepository(ctx, ctx.Repo.Repository.RepoPath())722 ctx.Repo.GitRepo, err = gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
722 if err != nil {723 if err != nil {
723 ctx.Error(http.StatusInternalServerError, "Unable to OpenRepository", err)724 ctx.Error(http.StatusInternalServerError, "Unable to OpenRepository", err)
724 return err725 return err
routers/api/v1/repo/wiki.go+2−1
@@ -12,6 +12,7 @@ import ( · 11 unmodified lines
12 repo_model "code.gitea.io/gitea/models/repo"12 repo_model "code.gitea.io/gitea/models/repo"
13 "code.gitea.io/gitea/modules/context"13 "code.gitea.io/gitea/modules/context"
14 "code.gitea.io/gitea/modules/git"14 "code.gitea.io/gitea/modules/git"
15 "code.gitea.io/gitea/modules/gitrepo"
15 "code.gitea.io/gitea/modules/setting"16 "code.gitea.io/gitea/modules/setting"
16 api "code.gitea.io/gitea/modules/structs"17 api "code.gitea.io/gitea/modules/structs"
17 "code.gitea.io/gitea/modules/util"18 "code.gitea.io/gitea/modules/util"
@@ -475,7 +476,7 @@ func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) · 457 unmodified lines
475// findWikiRepoCommit opens the wiki repo and returns the latest commit, writing to context on error.476// findWikiRepoCommit opens the wiki repo and returns the latest commit, writing to context on error.
476// The caller is responsible for closing the returned repo again477// The caller is responsible for closing the returned repo again
477func findWikiRepoCommit(ctx *context.APIContext) (*git.Repository, *git.Commit) {478func findWikiRepoCommit(ctx *context.APIContext) (*git.Repository, *git.Commit) {
478 wikiRepo, err := git.OpenRepository(ctx, ctx.Repo.Repository.WikiPath())479 wikiRepo, err := gitrepo.OpenWikiRepository(ctx, ctx.Repo.Repository)
479 if err != nil {480 if err != nil {
480 481
481 if git.IsErrNotExist(err) || err.Error() == "no such file or directory" {482 if git.IsErrNotExist(err) || err.Error() == "no such file or directory" {
routers/api/v1/utils/git.go+2−1
@@ -10,6 +10,7 @@ import ( · 9 unmodified lines
10 10
11 "code.gitea.io/gitea/modules/context"11 "code.gitea.io/gitea/modules/context"
12 "code.gitea.io/gitea/modules/git"12 "code.gitea.io/gitea/modules/git"
13 "code.gitea.io/gitea/modules/gitrepo"
13 "code.gitea.io/gitea/modules/log"14 "code.gitea.io/gitea/modules/log"
14)15)
15 16
@@ -79,7 +80,7 @@ func ConvertToObjectID(ctx gocontext.Context, repo *context.Repository, commitID · 63 unmodified lines
79 }80 }
80 }81 }
81 82
82 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.Repository.RepoPath())83 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo.Repository)
83 if err != nil {84 if err != nil {
84 return objectFormat.EmptyObjectID(), fmt.Errorf("RepositoryFromContextOrOpen: %w", err)85 return objectFormat.EmptyObjectID(), fmt.Errorf("RepositoryFromContextOrOpen: %w", err)
85 }86 }
routers/private/internal_repo.go+2−2
@@ -10,7 +10,7 @@ import ( · 9 unmodified lines
10 10
11 repo_model "code.gitea.io/gitea/models/repo"11 repo_model "code.gitea.io/gitea/models/repo"
12 gitea_context "code.gitea.io/gitea/modules/context"12 gitea_context "code.gitea.io/gitea/modules/context"
13 "code.gitea.io/gitea/modules/git"13 "code.gitea.io/gitea/modules/gitrepo"
14 "code.gitea.io/gitea/modules/log"14 "code.gitea.io/gitea/modules/log"
15 "code.gitea.io/gitea/modules/private"15 "code.gitea.io/gitea/modules/private"
16)16)
@@ -28,7 +28,7 @@ func RepoAssignment(ctx *gitea_context.PrivateContext) context.CancelFunc { · 11 unmodified lines
28 return nil28 return nil
29 }29 }
30 30
31 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())31 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
32 if err != nil {32 if err != nil {
33 log.Error("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err)33 log.Error("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err)
34 ctx.JSON(http.StatusInternalServerError, private.Response{34 ctx.JSON(http.StatusInternalServerError, private.Response{
routers/web/repo/commit.go+3−2
@@ -22,6 +22,7 @@ import ( · 21 unmodified lines
22 "code.gitea.io/gitea/modules/context"22 "code.gitea.io/gitea/modules/context"
23 "code.gitea.io/gitea/modules/git"23 "code.gitea.io/gitea/modules/git"
24 "code.gitea.io/gitea/modules/gitgraph"24 "code.gitea.io/gitea/modules/gitgraph"
25 "code.gitea.io/gitea/modules/gitrepo"
25 "code.gitea.io/gitea/modules/log"26 "code.gitea.io/gitea/modules/log"
26 "code.gitea.io/gitea/modules/markup"27 "code.gitea.io/gitea/modules/markup"
27 "code.gitea.io/gitea/modules/setting"28 "code.gitea.io/gitea/modules/setting"
@@ -279,7 +280,7 @@ func Diff(ctx *context.Context) { · 251 unmodified lines
279 )280 )
280 281
281 if ctx.Data["PageIsWiki"] != nil {282 if ctx.Data["PageIsWiki"] != nil {
282 gitRepo, err = git.OpenRepository(ctx, ctx.Repo.Repository.WikiPath())283 gitRepo, err = gitrepo.OpenWikiRepository(ctx, ctx.Repo.Repository)
283 if err != nil {284 if err != nil {
284 ctx.ServerError("Repo.GitRepo.GetCommit", err)285 ctx.ServerError("Repo.GitRepo.GetCommit", err)
285 return286 return
@@ -404,7 +405,7 @@ func Diff(ctx *context.Context) { · 118 unmodified lines
404func RawDiff(ctx *context.Context) {405func RawDiff(ctx *context.Context) {
405 var gitRepo *git.Repository406 var gitRepo *git.Repository
406 if ctx.Data["PageIsWiki"] != nil {407 if ctx.Data["PageIsWiki"] != nil {
407 wikiRepo, err := git.OpenRepository(ctx, ctx.Repo.Repository.WikiPath())408 wikiRepo, err := gitrepo.OpenWikiRepository(ctx, ctx.Repo.Repository)
408 if err != nil {409 if err != nil {
409 ctx.ServerError("OpenRepository", err)410 ctx.ServerError("OpenRepository", err)
410 return411 return
routers/web/repo/compare.go+4−3
@@ -28,6 +28,7 @@ import ( · 27 unmodified lines
28 "code.gitea.io/gitea/modules/context"28 "code.gitea.io/gitea/modules/context"
29 csv_module "code.gitea.io/gitea/modules/csv"29 csv_module "code.gitea.io/gitea/modules/csv"
30 "code.gitea.io/gitea/modules/git"30 "code.gitea.io/gitea/modules/git"
31 "code.gitea.io/gitea/modules/gitrepo"
31 "code.gitea.io/gitea/modules/log"32 "code.gitea.io/gitea/modules/log"
32 "code.gitea.io/gitea/modules/markup"33 "code.gitea.io/gitea/modules/markup"
33 "code.gitea.io/gitea/modules/setting"34 "code.gitea.io/gitea/modules/setting"
@@ -408,7 +409,7 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo { · 374 unmodified lines
408 ci.HeadRepo = ctx.Repo.Repository409 ci.HeadRepo = ctx.Repo.Repository
409 ci.HeadGitRepo = ctx.Repo.GitRepo410 ci.HeadGitRepo = ctx.Repo.GitRepo
410 } else if has {411 } else if has {
411 ci.HeadGitRepo, err = git.OpenRepository(ctx, ci.HeadRepo.RepoPath())412 ci.HeadGitRepo, err = gitrepo.OpenRepository(ctx, ci.HeadRepo)
412 if err != nil {413 if err != nil {
413 ctx.ServerError("OpenRepository", err)414 ctx.ServerError("OpenRepository", err)
414 return nil415 return nil
@@ -688,7 +689,7 @@ func PrepareCompareDiff( · 273 unmodified lines
688}689}
689 690
690func getBranchesAndTagsForRepo(ctx gocontext.Context, repo *repo_model.Repository) (branches, tags []string, err error) {691func getBranchesAndTagsForRepo(ctx gocontext.Context, repo *repo_model.Repository) (branches, tags []string, err error) {
691 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())692 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
692 if err != nil {693 if err != nil {
693 return nil, nil, err694 return nil, nil, err
694 }695 }
@@ -876,7 +877,7 @@ func ExcerptBlob(ctx *context.Context) { · 181 unmodified lines
876 gitRepo := ctx.Repo.GitRepo877 gitRepo := ctx.Repo.GitRepo
877 if ctx.FormBool("wiki") {878 if ctx.FormBool("wiki") {
878 var err error879 var err error
879 gitRepo, err = git.OpenRepository(ctx, ctx.Repo.Repository.WikiPath())880 gitRepo, err = gitrepo.OpenWikiRepository(ctx, ctx.Repo.Repository)
880 if err != nil {881 if err != nil {
881 ctx.ServerError("OpenRepository", err)882 ctx.ServerError("OpenRepository", err)
882 return883 return
routers/web/repo/editor_test.go+2−1
@@ -9,6 +9,7 @@ import ( · 8 unmodified lines
9 "code.gitea.io/gitea/models/unittest"9 "code.gitea.io/gitea/models/unittest"
10 "code.gitea.io/gitea/modules/contexttest"10 "code.gitea.io/gitea/modules/contexttest"
11 "code.gitea.io/gitea/modules/git"11 "code.gitea.io/gitea/modules/git"
12 "code.gitea.io/gitea/modules/gitrepo"
12 13
13 "github.com/stretchr/testify/assert"14 "github.com/stretchr/testify/assert"
14)15)
@@ -66,7 +67,7 @@ func TestGetClosestParentWithFiles(t *testing.T) { · 51 unmodified lines
66 67
67 repo := ctx.Repo.Repository68 repo := ctx.Repo.Repository
68 branch := repo.DefaultBranch69 branch := repo.DefaultBranch
69 gitRepo, _ := git.OpenRepository(git.DefaultContext, repo.RepoPath())70 gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
70 defer gitRepo.Close()71 defer gitRepo.Close()
71 commit, _ := gitRepo.GetBranchCommit(branch)72 commit, _ := gitRepo.GetBranchCommit(branch)
72 var expectedTreePath string // Should return the root dir, empty string, since there are no subdirs in this repo73 var expectedTreePath string // Should return the root dir, empty string, since there are no subdirs in this repo
routers/web/repo/pull.go+9−8
@@ -29,6 +29,7 @@ import ( · 28 unmodified lines
29 "code.gitea.io/gitea/modules/base"29 "code.gitea.io/gitea/modules/base"
30 "code.gitea.io/gitea/modules/context"30 "code.gitea.io/gitea/modules/context"
31 "code.gitea.io/gitea/modules/git"31 "code.gitea.io/gitea/modules/git"
32 "code.gitea.io/gitea/modules/gitrepo"
32 issue_template "code.gitea.io/gitea/modules/issue/template"33 issue_template "code.gitea.io/gitea/modules/issue/template"
33 "code.gitea.io/gitea/modules/log"34 "code.gitea.io/gitea/modules/log"
34 "code.gitea.io/gitea/modules/setting"35 "code.gitea.io/gitea/modules/setting"
@@ -530,7 +531,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C · 495 unmodified lines
530 if pull.BaseRepoID == ctx.Repo.Repository.ID && ctx.Repo.GitRepo != nil {531 if pull.BaseRepoID == ctx.Repo.Repository.ID && ctx.Repo.GitRepo != nil {
531 baseGitRepo = ctx.Repo.GitRepo532 baseGitRepo = ctx.Repo.GitRepo
532 } else {533 } else {
533 baseGitRepo, err := git.OpenRepository(ctx, pull.BaseRepo.RepoPath())534 baseGitRepo, err := gitrepo.OpenRepository(ctx, pull.BaseRepo)
534 if err != nil {535 if err != nil {
535 ctx.ServerError("OpenRepository", err)536 ctx.ServerError("OpenRepository", err)
536 return nil537 return nil
@@ -582,7 +583,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C · 45 unmodified lines
582 var headBranchSha string583 var headBranchSha string
583 // HeadRepo may be missing584 // HeadRepo may be missing
584 if pull.HeadRepo != nil {585 if pull.HeadRepo != nil {
585 headGitRepo, err := git.OpenRepository(ctx, pull.HeadRepo.RepoPath())586 headGitRepo, err := gitrepo.OpenRepository(ctx, pull.HeadRepo)
586 if err != nil {587 if err != nil {
587 ctx.ServerError("OpenRepository", err)588 ctx.ServerError("OpenRepository", err)
588 return nil589 return nil
@@ -1314,9 +1315,9 @@ func MergePullRequest(ctx *context.Context) { · 725 unmodified lines
1314 if ctx.Repo != nil && ctx.Repo.Repository != nil && pr.HeadRepoID == ctx.Repo.Repository.ID && ctx.Repo.GitRepo != nil {1315 if ctx.Repo != nil && ctx.Repo.Repository != nil && pr.HeadRepoID == ctx.Repo.Repository.ID && ctx.Repo.GitRepo != nil {
1315 headRepo = ctx.Repo.GitRepo1316 headRepo = ctx.Repo.GitRepo
1316 } else {1317 } else {
1317 headRepo, err = git.OpenRepository(ctx, pr.HeadRepo.RepoPath())1318 headRepo, err = gitrepo.OpenRepository(ctx, pr.HeadRepo)
1318 if err != nil {1319 if err != nil {
1319 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.HeadRepo.RepoPath()), err)1320 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.HeadRepo.FullName()), err)
1320 return1321 return
1321 }1322 }
1322 defer headRepo.Close()1323 defer headRepo.Close()
@@ -1537,9 +1538,9 @@ func CleanUpPullRequest(ctx *context.Context) { · 214 unmodified lines
1537 gitBaseRepo = ctx.Repo.GitRepo1538 gitBaseRepo = ctx.Repo.GitRepo
1538 } else {1539 } else {
1539 // If not just open it1540 // If not just open it
1540 gitBaseRepo, err = git.OpenRepository(ctx, pr.BaseRepo.RepoPath())1541 gitBaseRepo, err = gitrepo.OpenRepository(ctx, pr.BaseRepo)
1541 if err != nil {1542 if err != nil {
1542 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.BaseRepo.RepoPath()), err)1543 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.BaseRepo.FullName()), err)
1543 return1544 return
1544 }1545 }
1545 defer gitBaseRepo.Close()1546 defer gitBaseRepo.Close()
@@ -1552,9 +1553,9 @@ func CleanUpPullRequest(ctx *context.Context) { · 6 unmodified lines
1552 gitRepo = ctx.Repo.GitRepo1553 gitRepo = ctx.Repo.GitRepo
1553 } else if pr.BaseRepoID != pr.HeadRepoID {1554 } else if pr.BaseRepoID != pr.HeadRepoID {
1554 // Otherwise just load it up1555 // Otherwise just load it up
1555 gitRepo, err = git.OpenRepository(ctx, pr.HeadRepo.RepoPath())1556 gitRepo, err = gitrepo.OpenRepository(ctx, pr.HeadRepo)
1556 if err != nil {1557 if err != nil {
1557 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.HeadRepo.RepoPath()), err)1558 ctx.ServerError(fmt.Sprintf("OpenRepository[%s]", pr.HeadRepo.FullName()), err)
1558 return1559 return
1559 }1560 }
1560 defer gitRepo.Close()1561 defer gitRepo.Close()
routers/web/repo/wiki.go+2−1
@@ -20,6 +20,7 @@ import ( · 19 unmodified lines
20 "code.gitea.io/gitea/modules/charset"20 "code.gitea.io/gitea/modules/charset"
21 "code.gitea.io/gitea/modules/context"21 "code.gitea.io/gitea/modules/context"
22 "code.gitea.io/gitea/modules/git"22 "code.gitea.io/gitea/modules/git"
23 "code.gitea.io/gitea/modules/gitrepo"
23 "code.gitea.io/gitea/modules/log"24 "code.gitea.io/gitea/modules/log"
24 "code.gitea.io/gitea/modules/markup"25 "code.gitea.io/gitea/modules/markup"
25 "code.gitea.io/gitea/modules/markup/markdown"26 "code.gitea.io/gitea/modules/markup/markdown"
@@ -92,7 +93,7 @@ func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) · 66 unmodified lines
92}93}
93 94
94func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) {95func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) {
95 wikiRepo, err := git.OpenRepository(ctx, ctx.Repo.Repository.WikiPath())96 wikiRepo, err := gitrepo.OpenWikiRepository(ctx, ctx.Repo.Repository)
96 if err != nil {97 if err != nil {
97 ctx.ServerError("OpenRepository", err)98 ctx.ServerError("OpenRepository", err)
98 return nil, nil, err99 return nil, nil, err
routers/web/repo/wiki_test.go+2−1
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 "code.gitea.io/gitea/models/unittest"13 "code.gitea.io/gitea/models/unittest"
14 "code.gitea.io/gitea/modules/contexttest"14 "code.gitea.io/gitea/modules/contexttest"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 "code.gitea.io/gitea/modules/web"17 "code.gitea.io/gitea/modules/web"
17 "code.gitea.io/gitea/services/forms"18 "code.gitea.io/gitea/services/forms"
18 wiki_service "code.gitea.io/gitea/services/wiki"19 wiki_service "code.gitea.io/gitea/services/wiki"
@@ -26,7 +27,7 @@ const ( · 7 unmodified lines
26)27)
27 28
28func wikiEntry(t *testing.T, repo *repo_model.Repository, wikiName wiki_service.WebPath) *git.TreeEntry {29func wikiEntry(t *testing.T, repo *repo_model.Repository, wikiName wiki_service.WebPath) *git.TreeEntry {
29 wikiRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())30 wikiRepo, err := gitrepo.OpenWikiRepository(git.DefaultContext, repo)
30 assert.NoError(t, err)31 assert.NoError(t, err)
31 defer wikiRepo.Close()32 defer wikiRepo.Close()
32 commit, err := wikiRepo.GetBranchCommit("master")33 commit, err := wikiRepo.GetBranchCommit("master")
routers/web/shared/user/header.go+2−1
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 user_model "code.gitea.io/gitea/models/user"13 user_model "code.gitea.io/gitea/models/user"
14 "code.gitea.io/gitea/modules/context"14 "code.gitea.io/gitea/modules/context"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 "code.gitea.io/gitea/modules/log"17 "code.gitea.io/gitea/modules/log"
17 "code.gitea.io/gitea/modules/markup"18 "code.gitea.io/gitea/modules/markup"
18 "code.gitea.io/gitea/modules/markup/markdown"19 "code.gitea.io/gitea/modules/markup/markdown"
@@ -90,7 +91,7 @@ func FindUserProfileReadme(ctx *context.Context, doer *user_model.User) (profile · 71 unmodified lines
90 if err == nil {91 if err == nil {
91 perm, err := access_model.GetUserRepoPermission(ctx, profileDbRepo, doer)92 perm, err := access_model.GetUserRepoPermission(ctx, profileDbRepo, doer)
92 if err == nil && !profileDbRepo.IsEmpty && perm.CanRead(unit.TypeCode) {93 if err == nil && !profileDbRepo.IsEmpty && perm.CanRead(unit.TypeCode) {
93 if profileGitRepo, err = git.OpenRepository(ctx, profileDbRepo.RepoPath()); err != nil {94 if profileGitRepo, err = gitrepo.OpenRepository(ctx, profileDbRepo); err != nil {
94 log.Error("FindUserProfileReadme failed to OpenRepository: %v", err)95 log.Error("FindUserProfileReadme failed to OpenRepository: %v", err)
95 } else {96 } else {
96 if commit, err := profileGitRepo.GetBranchCommit(profileDbRepo.DefaultBranch); err != nil {97 if commit, err := profileGitRepo.GetBranchCommit(profileDbRepo.DefaultBranch); err != nil {
services/actions/notifier_helper.go+2−1
@@ -20,6 +20,7 @@ import ( · 19 unmodified lines
20 user_model "code.gitea.io/gitea/models/user"20 user_model "code.gitea.io/gitea/models/user"
21 actions_module "code.gitea.io/gitea/modules/actions"21 actions_module "code.gitea.io/gitea/modules/actions"
22 "code.gitea.io/gitea/modules/git"22 "code.gitea.io/gitea/modules/git"
23 "code.gitea.io/gitea/modules/gitrepo"
23 "code.gitea.io/gitea/modules/json"24 "code.gitea.io/gitea/modules/json"
24 "code.gitea.io/gitea/modules/log"25 "code.gitea.io/gitea/modules/log"
25 "code.gitea.io/gitea/modules/setting"26 "code.gitea.io/gitea/modules/setting"
@@ -128,7 +129,7 @@ func notify(ctx context.Context, input *notifyInput) error { · 102 unmodified lines
128 return nil129 return nil
129 }130 }
130 131
131 gitRepo, err := git.OpenRepository(context.Background(), input.Repo.RepoPath())132 gitRepo, err := gitrepo.OpenRepository(context.Background(), input.Repo)
132 if err != nil {133 if err != nil {
133 return fmt.Errorf("git.OpenRepository: %w", err)134 return fmt.Errorf("git.OpenRepository: %w", err)
134 }135 }
services/asymkey/sign.go+5−2
@@ -13,8 +13,10 @@ import ( · 12 unmodified lines
13 "code.gitea.io/gitea/models/db"13 "code.gitea.io/gitea/models/db"
14 git_model "code.gitea.io/gitea/models/git"14 git_model "code.gitea.io/gitea/models/git"
15 issues_model "code.gitea.io/gitea/models/issues"15 issues_model "code.gitea.io/gitea/models/issues"
16 repo_model "code.gitea.io/gitea/models/repo"
16 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
17 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
18 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
19 "code.gitea.io/gitea/modules/process"21 "code.gitea.io/gitea/modules/process"
20 "code.gitea.io/gitea/modules/setting"22 "code.gitea.io/gitea/modules/setting"
@@ -167,7 +169,8 @@ Loop: · 146 unmodified lines
167}169}
168 170
169// SignWikiCommit determines if we should sign the commits to this repository wiki171// SignWikiCommit determines if we should sign the commits to this repository wiki
170func SignWikiCommit(ctx context.Context, repoWikiPath string, u *user_model.User) (bool, string, *git.Signature, error) {172func SignWikiCommit(ctx context.Context, repo *repo_model.Repository, u *user_model.User) (bool, string, *git.Signature, error) {
173 repoWikiPath := repo.WikiPath()
171 rules := signingModeFromStrings(setting.Repository.Signing.Wiki)174 rules := signingModeFromStrings(setting.Repository.Signing.Wiki)
172 signingKey, sig := SigningKey(ctx, repoWikiPath)175 signingKey, sig := SigningKey(ctx, repoWikiPath)
173 if signingKey == "" {176 if signingKey == "" {
@@ -201,7 +204,7 @@ Loop: · 27 unmodified lines
201 return false, "", nil, &ErrWontSign{twofa}204 return false, "", nil, &ErrWontSign{twofa}
202 }205 }
203 case parentSigned:206 case parentSigned:
204 gitRepo, err := git.OpenRepository(ctx, repoWikiPath)207 gitRepo, err := gitrepo.OpenWikiRepository(ctx, repo)
205 if err != nil {208 if err != nil {
206 return false, "", nil, err209 return false, "", nil, err
207 }210 }
services/automerge/automerge.go+4−3
@@ -17,6 +17,7 @@ import ( · 16 unmodified lines
17 repo_model "code.gitea.io/gitea/models/repo"17 repo_model "code.gitea.io/gitea/models/repo"
18 user_model "code.gitea.io/gitea/models/user"18 user_model "code.gitea.io/gitea/models/user"
19 "code.gitea.io/gitea/modules/git"19 "code.gitea.io/gitea/modules/git"
20 "code.gitea.io/gitea/modules/gitrepo"
20 "code.gitea.io/gitea/modules/graceful"21 "code.gitea.io/gitea/modules/graceful"
21 "code.gitea.io/gitea/modules/log"22 "code.gitea.io/gitea/modules/log"
22 "code.gitea.io/gitea/modules/process"23 "code.gitea.io/gitea/modules/process"
@@ -111,7 +112,7 @@ func MergeScheduledPullRequest(ctx context.Context, sha string, repo *repo_model · 88 unmodified lines
111}112}
112 113
113func getPullRequestsByHeadSHA(ctx context.Context, sha string, repo *repo_model.Repository, filter func(*issues_model.PullRequest) bool) (map[int64]*issues_model.PullRequest, error) {114func getPullRequestsByHeadSHA(ctx context.Context, sha string, repo *repo_model.Repository, filter func(*issues_model.PullRequest) bool) (map[int64]*issues_model.PullRequest, error) {
114 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())115 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
115 if err != nil {116 if err != nil {
116 return nil, err117 return nil, err
117 }118 }
@@ -190,7 +191,7 @@ func handlePull(pullID int64, sha string) { · 72 unmodified lines
190 return191 return
191 }192 }
192 193
193 headGitRepo, err := git.OpenRepository(ctx, pr.HeadRepo.RepoPath())194 headGitRepo, err := gitrepo.OpenRepository(ctx, pr.HeadRepo)
194 if err != nil {195 if err != nil {
195 log.Error("OpenRepository %-v: %v", pr.HeadRepo, err)196 log.Error("OpenRepository %-v: %v", pr.HeadRepo, err)
196 return197 return
@@ -246,7 +247,7 @@ func handlePull(pullID int64, sha string) { · 49 unmodified lines
246 return247 return
247 }248 }
248 249
249 baseGitRepo, err = git.OpenRepository(ctx, pr.BaseRepo.RepoPath())250 baseGitRepo, err = gitrepo.OpenRepository(ctx, pr.BaseRepo)
250 if err != nil {251 if err != nil {
251 log.Error("OpenRepository %-v: %v", pr.BaseRepo, err)252 log.Error("OpenRepository %-v: %v", pr.BaseRepo, err)
252 return253 return
services/convert/pull.go+5−4
@@ -12,6 +12,7 @@ import ( · 11 unmodified lines
12 access_model "code.gitea.io/gitea/models/perm/access"12 access_model "code.gitea.io/gitea/models/perm/access"
13 user_model "code.gitea.io/gitea/models/user"13 user_model "code.gitea.io/gitea/models/user"
14 "code.gitea.io/gitea/modules/git"14 "code.gitea.io/gitea/modules/git"
15 "code.gitea.io/gitea/modules/gitrepo"
15 "code.gitea.io/gitea/modules/log"16 "code.gitea.io/gitea/modules/log"
16 api "code.gitea.io/gitea/modules/structs"17 api "code.gitea.io/gitea/modules/structs"
17)18)
@@ -101,7 +102,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u · 83 unmodified lines
101 apiPullRequest.Closed = pr.Issue.ClosedUnix.AsTimePtr()102 apiPullRequest.Closed = pr.Issue.ClosedUnix.AsTimePtr()
102 }103 }
103 104
104 gitRepo, err := git.OpenRepository(ctx, pr.BaseRepo.RepoPath())105 gitRepo, err := gitrepo.OpenRepository(ctx, pr.BaseRepo)
105 if err != nil {106 if err != nil {
106 log.Error("OpenRepository[%s]: %v", pr.BaseRepo.RepoPath(), err)107 log.Error("OpenRepository[%s]: %v", pr.BaseRepo.RepoPath(), err)
107 return nil108 return nil
@@ -127,7 +128,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u · 19 unmodified lines
127 }128 }
128 129
129 if pr.Flow == issues_model.PullRequestFlowAGit {130 if pr.Flow == issues_model.PullRequestFlowAGit {
130 gitRepo, err := git.OpenRepository(ctx, pr.BaseRepo.RepoPath())131 gitRepo, err := gitrepo.OpenRepository(ctx, pr.BaseRepo)
131 if err != nil {132 if err != nil {
132 log.Error("OpenRepository[%s]: %v", pr.GetGitRefName(), err)133 log.Error("OpenRepository[%s]: %v", pr.GetGitRefName(), err)
133 return nil134 return nil
@@ -154,7 +155,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u · 20 unmodified lines
154 apiPullRequest.Head.RepoID = pr.HeadRepo.ID155 apiPullRequest.Head.RepoID = pr.HeadRepo.ID
155 apiPullRequest.Head.Repository = ToRepo(ctx, pr.HeadRepo, p)156 apiPullRequest.Head.Repository = ToRepo(ctx, pr.HeadRepo, p)
156 157
157 headGitRepo, err := git.OpenRepository(ctx, pr.HeadRepo.RepoPath())158 headGitRepo, err := gitrepo.OpenRepository(ctx, pr.HeadRepo)
158 if err != nil {159 if err != nil {
159 log.Error("OpenRepository[%s]: %v", pr.HeadRepo.RepoPath(), err)160 log.Error("OpenRepository[%s]: %v", pr.HeadRepo.RepoPath(), err)
160 return nil161 return nil
@@ -190,7 +191,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u · 29 unmodified lines
190 }191 }
191 192
192 if len(apiPullRequest.Head.Sha) == 0 && len(apiPullRequest.Head.Ref) != 0 {193 if len(apiPullRequest.Head.Sha) == 0 && len(apiPullRequest.Head.Ref) != 0 {
193 baseGitRepo, err := git.OpenRepository(ctx, pr.BaseRepo.RepoPath())194 baseGitRepo, err := gitrepo.OpenRepository(ctx, pr.BaseRepo)
194 if err != nil {195 if err != nil {
195 log.Error("OpenRepository[%s]: %v", pr.BaseRepo.RepoPath(), err)196 log.Error("OpenRepository[%s]: %v", pr.BaseRepo.RepoPath(), err)
196 return nil197 return nil
services/doctor/misc.go+2−1
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 repo_model "code.gitea.io/gitea/models/repo"16 repo_model "code.gitea.io/gitea/models/repo"
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
20 "code.gitea.io/gitea/modules/repository"21 "code.gitea.io/gitea/modules/repository"
21 "code.gitea.io/gitea/modules/setting"22 "code.gitea.io/gitea/modules/setting"
@@ -91,7 +92,7 @@ func checkEnablePushOptions(ctx context.Context, logger log.Logger, autofix bool · 69 unmodified lines
91 92
92 if err := iterateRepositories(ctx, func(repo *repo_model.Repository) error {93 if err := iterateRepositories(ctx, func(repo *repo_model.Repository) error {
93 numRepos++94 numRepos++
94 r, err := git.OpenRepository(ctx, repo.RepoPath())95 r, err := gitrepo.OpenRepository(ctx, repo)
95 if err != nil {96 if err != nil {
96 return err97 return err
97 }98 }
services/migrations/gitea_uploader.go+2−1
@@ -21,6 +21,7 @@ import ( · 20 unmodified lines
21 user_model "code.gitea.io/gitea/models/user"21 user_model "code.gitea.io/gitea/models/user"
22 base_module "code.gitea.io/gitea/modules/base"22 base_module "code.gitea.io/gitea/modules/base"
23 "code.gitea.io/gitea/modules/git"23 "code.gitea.io/gitea/modules/git"
24 "code.gitea.io/gitea/modules/gitrepo"
24 "code.gitea.io/gitea/modules/label"25 "code.gitea.io/gitea/modules/label"
25 "code.gitea.io/gitea/modules/log"26 "code.gitea.io/gitea/modules/log"
26 base "code.gitea.io/gitea/modules/migration"27 base "code.gitea.io/gitea/modules/migration"
@@ -139,7 +140,7 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate · 112 unmodified lines
139 if err != nil {140 if err != nil {
140 return err141 return err
141 }142 }
142 g.gitRepo, err = git.OpenRepository(g.ctx, r.RepoPath())143 g.gitRepo, err = gitrepo.OpenRepository(g.ctx, r)
143 return err144 return err
144}145}
145 146
services/migrations/gitea_uploader_test.go+3−2
@@ -19,6 +19,7 @@ import ( · 18 unmodified lines
19 "code.gitea.io/gitea/models/unittest"19 "code.gitea.io/gitea/models/unittest"
20 user_model "code.gitea.io/gitea/models/user"20 user_model "code.gitea.io/gitea/models/user"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/git"
22 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/graceful"23 "code.gitea.io/gitea/modules/graceful"
23 "code.gitea.io/gitea/modules/log"24 "code.gitea.io/gitea/modules/log"
24 base "code.gitea.io/gitea/modules/migration"25 base "code.gitea.io/gitea/modules/migration"
@@ -249,7 +250,7 @@ func TestGiteaUploadUpdateGitForPullRequest(t *testing.T) { · 224 unmodified lines
249 Author: &signature,250 Author: &signature,
250 Message: "Initial Commit",251 Message: "Initial Commit",
251 }))252 }))
252 fromGitRepo, err := git.OpenRepository(git.DefaultContext, fromRepo.RepoPath())253 fromGitRepo, err := gitrepo.OpenRepository(git.DefaultContext, fromRepo)
253 assert.NoError(t, err)254 assert.NoError(t, err)
254 defer fromGitRepo.Close()255 defer fromGitRepo.Close()
255 baseSHA, err := fromGitRepo.GetBranchCommitID(baseRef)256 baseSHA, err := fromGitRepo.GetBranchCommitID(baseRef)
@@ -292,7 +293,7 @@ func TestGiteaUploadUpdateGitForPullRequest(t *testing.T) { · 36 unmodified lines
292 Author: &signature,293 Author: &signature,
293 Message: "branch2 commit",294 Message: "branch2 commit",
294 }))295 }))
295 forkGitRepo, err := git.OpenRepository(git.DefaultContext, forkRepo.RepoPath())296 forkGitRepo, err := gitrepo.OpenRepository(git.DefaultContext, forkRepo)
296 assert.NoError(t, err)297 assert.NoError(t, err)
297 defer forkGitRepo.Close()298 defer forkGitRepo.Close()
298 forkHeadSHA, err := forkGitRepo.GetBranchCommitID(forkHeadRef)299 forkHeadSHA, err := forkGitRepo.GetBranchCommitID(forkHeadRef)
services/mirror/mirror_pull.go+4−3
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 system_model "code.gitea.io/gitea/models/system"13 system_model "code.gitea.io/gitea/models/system"
14 "code.gitea.io/gitea/modules/cache"14 "code.gitea.io/gitea/modules/cache"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 "code.gitea.io/gitea/modules/lfs"17 "code.gitea.io/gitea/modules/lfs"
17 "code.gitea.io/gitea/modules/log"18 "code.gitea.io/gitea/modules/log"
18 "code.gitea.io/gitea/modules/process"19 "code.gitea.io/gitea/modules/process"
@@ -300,7 +301,7 @@ func runSync(ctx context.Context, m *repo_model.Mirror) ([]*mirrorSyncResult, bo · 281 unmodified lines
300 log.Error("SyncMirrors [repo: %-v]: %v", m.Repo, err)301 log.Error("SyncMirrors [repo: %-v]: %v", m.Repo, err)
301 }302 }
302 303
303 gitRepo, err := git.OpenRepository(ctx, repoPath)304 gitRepo, err := gitrepo.OpenRepository(ctx, m.Repo)
304 if err != nil {305 if err != nil {
305 log.Error("SyncMirrors [repo: %-v]: failed to OpenRepository: %v", m.Repo, err)306 log.Error("SyncMirrors [repo: %-v]: failed to OpenRepository: %v", m.Repo, err)
306 return nil, false307 return nil, false
@@ -396,7 +397,7 @@ func runSync(ctx context.Context, m *repo_model.Mirror) ([]*mirrorSyncResult, bo · 89 unmodified lines
396 }397 }
397 398
398 log.Trace("SyncMirrors [repo: %-v]: invalidating mirror branch caches...", m.Repo)399 log.Trace("SyncMirrors [repo: %-v]: invalidating mirror branch caches...", m.Repo)
399 branches, _, err := git.GetBranchesByPath(ctx, m.Repo.RepoPath(), 0, 0)400 branches, _, err := gitrepo.GetBranchesByPath(ctx, m.Repo, 0, 0)
400 if err != nil {401 if err != nil {
401 log.Error("SyncMirrors [repo: %-v]: failed to GetBranches: %v", m.Repo, err)402 log.Error("SyncMirrors [repo: %-v]: failed to GetBranches: %v", m.Repo, err)
402 return nil, false403 return nil, false
@@ -453,7 +454,7 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool { · 50 unmodified lines
453 log.Trace("SyncMirrors [repo: %-v]: no branches updated", m.Repo)454 log.Trace("SyncMirrors [repo: %-v]: no branches updated", m.Repo)
454 } else {455 } else {
455 log.Trace("SyncMirrors [repo: %-v]: %d branches updated", m.Repo, len(results))456 log.Trace("SyncMirrors [repo: %-v]: %d branches updated", m.Repo, len(results))
456 gitRepo, err = git.OpenRepository(ctx, m.Repo.RepoPath())457 gitRepo, err = gitrepo.OpenRepository(ctx, m.Repo)
457 if err != nil {458 if err != nil {
458 log.Error("SyncMirrors [repo: %-v]: unable to OpenRepository: %v", m.Repo, err)459 log.Error("SyncMirrors [repo: %-v]: unable to OpenRepository: %v", m.Repo, err)
459 return false460 return false
services/mirror/mirror_push.go+15−6
@@ -15,6 +15,7 @@ import ( · 14 unmodified lines
15 "code.gitea.io/gitea/models/db"15 "code.gitea.io/gitea/models/db"
16 repo_model "code.gitea.io/gitea/models/repo"16 repo_model "code.gitea.io/gitea/models/repo"
17 "code.gitea.io/gitea/modules/git"17 "code.gitea.io/gitea/modules/git"
18 "code.gitea.io/gitea/modules/gitrepo"
18 "code.gitea.io/gitea/modules/lfs"19 "code.gitea.io/gitea/modules/lfs"
19 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
20 "code.gitea.io/gitea/modules/process"21 "code.gitea.io/gitea/modules/process"
@@ -131,7 +132,11 @@ func SyncPushMirror(ctx context.Context, mirrorID int64) bool { · 110 unmodified lines
131func runPushSync(ctx context.Context, m *repo_model.PushMirror) error {132func runPushSync(ctx context.Context, m *repo_model.PushMirror) error {
132 timeout := time.Duration(setting.Git.Timeout.Mirror) * time.Second133 timeout := time.Duration(setting.Git.Timeout.Mirror) * time.Second
133 134
134 performPush := func(path string) error {135 performPush := func(repo *repo_model.Repository, isWiki bool) error {
136 path := repo.RepoPath()
137 if isWiki {
138 path = repo.WikiPath()
139 }
135 remoteURL, err := git.GetRemoteURL(ctx, path, m.RemoteName)140 remoteURL, err := git.GetRemoteURL(ctx, path, m.RemoteName)
136 if err != nil {141 if err != nil {
137 log.Error("GetRemoteAddress(%s) Error %v", path, err)142 log.Error("GetRemoteAddress(%s) Error %v", path, err)
@@ -141,7 +146,12 @@ func runPushSync(ctx context.Context, m *repo_model.PushMirror) error { · 3 unmodified lines
141 if setting.LFS.StartServer {146 if setting.LFS.StartServer {
142 log.Trace("SyncMirrors [repo: %-v]: syncing LFS objects...", m.Repo)147 log.Trace("SyncMirrors [repo: %-v]: syncing LFS objects...", m.Repo)
143 148
144 gitRepo, err := git.OpenRepository(ctx, path)149 var gitRepo *git.Repository
150 if isWiki {
151 gitRepo, err = gitrepo.OpenWikiRepository(ctx, repo)
152 } else {
153 gitRepo, err = gitrepo.OpenRepository(ctx, repo)
154 }
145 if err != nil {155 if err != nil {
146 log.Error("OpenRepository: %v", err)156 log.Error("OpenRepository: %v", err)
147 return errors.New("Unexpected error")157 return errors.New("Unexpected error")
@@ -171,16 +181,15 @@ func runPushSync(ctx context.Context, m *repo_model.PushMirror) error { · 23 unmodified lines
171 return nil181 return nil
172 }182 }
173 183
174 err := performPush(m.Repo.RepoPath())184 err := performPush(m.Repo, false)
175 if err != nil {185 if err != nil {
176 return err186 return err
177 }187 }
178 188
179 if m.Repo.HasWiki() {189 if m.Repo.HasWiki() {
180 wikiPath := m.Repo.WikiPath()190 _, err := git.GetRemoteAddress(ctx, m.Repo.WikiPath(), m.RemoteName)
181 _, err := git.GetRemoteAddress(ctx, wikiPath, m.RemoteName)
182 if err == nil {191 if err == nil {
183 err := performPush(wikiPath)192 err := performPush(m.Repo, true)
184 if err != nil {193 if err != nil {
185 return err194 return err
186 }195 }
services/pull/check.go+2−1
@@ -20,6 +20,7 @@ import ( · 19 unmodified lines
20 "code.gitea.io/gitea/models/unit"20 "code.gitea.io/gitea/models/unit"
21 user_model "code.gitea.io/gitea/models/user"21 user_model "code.gitea.io/gitea/models/user"
22 "code.gitea.io/gitea/modules/git"22 "code.gitea.io/gitea/modules/git"
23 "code.gitea.io/gitea/modules/gitrepo"
23 "code.gitea.io/gitea/modules/graceful"24 "code.gitea.io/gitea/modules/graceful"
24 "code.gitea.io/gitea/modules/log"25 "code.gitea.io/gitea/modules/log"
25 "code.gitea.io/gitea/modules/process"26 "code.gitea.io/gitea/modules/process"
@@ -215,7 +216,7 @@ func getMergeCommit(ctx context.Context, pr *issues_model.PullRequest) (*git.Com · 189 unmodified lines
215 return nil, fmt.Errorf("GetFullCommitID(%s) in %s: %w", prHeadRef, pr.BaseRepo.FullName(), err)216 return nil, fmt.Errorf("GetFullCommitID(%s) in %s: %w", prHeadRef, pr.BaseRepo.FullName(), err)
216 }217 }
217 218
218 gitRepo, err := git.OpenRepository(ctx, pr.BaseRepo.RepoPath())219 gitRepo, err := gitrepo.OpenRepository(ctx, pr.BaseRepo)
219 if err != nil {220 if err != nil {
220 return nil, fmt.Errorf("%-v OpenRepository: %w", pr.BaseRepo, err)221 return nil, fmt.Errorf("%-v OpenRepository: %w", pr.BaseRepo, err)
221 }222 }
services/pull/comment.go+2−3
@@ -9,7 +9,7 @@ import ( · 8 unmodified lines
9 issues_model "code.gitea.io/gitea/models/issues"9 issues_model "code.gitea.io/gitea/models/issues"
10 repo_model "code.gitea.io/gitea/models/repo"10 repo_model "code.gitea.io/gitea/models/repo"
11 user_model "code.gitea.io/gitea/models/user"11 user_model "code.gitea.io/gitea/models/user"
12 "code.gitea.io/gitea/modules/git"12 "code.gitea.io/gitea/modules/gitrepo"
13 "code.gitea.io/gitea/modules/json"13 "code.gitea.io/gitea/modules/json"
14)14)
15 15
@@ -17,8 +17,7 @@ import ( · 1 unmodified line
17// isForcePush will be true if oldCommit isn't on the branch17// isForcePush will be true if oldCommit isn't on the branch
18// Commit on baseBranch will skip18// Commit on baseBranch will skip
19func getCommitIDsFromRepo(ctx context.Context, repo *repo_model.Repository, oldCommitID, newCommitID, baseBranch string) (commitIDs []string, isForcePush bool, err error) {19func getCommitIDsFromRepo(ctx context.Context, repo *repo_model.Repository, oldCommitID, newCommitID, baseBranch string) (commitIDs []string, isForcePush bool, err error) {
20 repoPath := repo.RepoPath()20 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
21 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repoPath)
22 if err != nil {21 if err != nil {
23 return nil, false, err22 return nil, false, err
24 }23 }
services/pull/commit_status.go+2−1
@@ -11,6 +11,7 @@ import ( · 10 unmodified lines
11 git_model "code.gitea.io/gitea/models/git"11 git_model "code.gitea.io/gitea/models/git"
12 issues_model "code.gitea.io/gitea/models/issues"12 issues_model "code.gitea.io/gitea/models/issues"
13 "code.gitea.io/gitea/modules/git"13 "code.gitea.io/gitea/modules/git"
14 "code.gitea.io/gitea/modules/gitrepo"
14 "code.gitea.io/gitea/modules/log"15 "code.gitea.io/gitea/modules/log"
15 "code.gitea.io/gitea/modules/structs"16 "code.gitea.io/gitea/modules/structs"
16 17
@@ -116,7 +117,7 @@ func GetPullRequestCommitStatusState(ctx context.Context, pr *issues_model.PullR · 99 unmodified lines
116 }117 }
117 118
118 // check if all required status checks are successful119 // check if all required status checks are successful
119 headGitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.HeadRepo.RepoPath())120 headGitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.HeadRepo)
120 if err != nil {121 if err != nil {
121 return "", errors.Wrap(err, "OpenRepository")122 return "", errors.Wrap(err, "OpenRepository")
122 }123 }
services/pull/merge_rebase.go+2−1
@@ -9,6 +9,7 @@ import ( · 8 unmodified lines
9 9
10 repo_model "code.gitea.io/gitea/models/repo"10 repo_model "code.gitea.io/gitea/models/repo"
11 "code.gitea.io/gitea/modules/git"11 "code.gitea.io/gitea/modules/git"
12 "code.gitea.io/gitea/modules/gitrepo"
12 "code.gitea.io/gitea/modules/log"13 "code.gitea.io/gitea/modules/log"
13)14)
14 15
@@ -57,7 +58,7 @@ func doMergeRebaseFastForward(ctx *mergeContext) error { · 42 unmodified lines
57 }58 }
58 59
59 // Original repo to read template from.60 // Original repo to read template from.
60 baseGitRepo, err := git.OpenRepository(ctx, ctx.pr.BaseRepo.RepoPath())61 baseGitRepo, err := gitrepo.OpenRepository(ctx, ctx.pr.BaseRepo)
61 if err != nil {62 if err != nil {
62 log.Error("Unable to get Git repo for rebase: %v", err)63 log.Error("Unable to get Git repo for rebase: %v", err)
63 return err64 return err
services/pull/merge_squash.go+2−1
@@ -10,6 +10,7 @@ import ( · 9 unmodified lines
10 user_model "code.gitea.io/gitea/models/user"10 user_model "code.gitea.io/gitea/models/user"
11 "code.gitea.io/gitea/modules/container"11 "code.gitea.io/gitea/modules/container"
12 "code.gitea.io/gitea/modules/git"12 "code.gitea.io/gitea/modules/git"
13 "code.gitea.io/gitea/modules/gitrepo"
13 "code.gitea.io/gitea/modules/log"14 "code.gitea.io/gitea/modules/log"
14 "code.gitea.io/gitea/modules/setting"15 "code.gitea.io/gitea/modules/setting"
15)16)
@@ -24,7 +25,7 @@ func getAuthorSignatureSquash(ctx *mergeContext) (*git.Signature, error) { · 8 unmodified lines
24 // Try to get an signature from the same user in one of the commits, as the25 // Try to get an signature from the same user in one of the commits, as the
25 // poster email might be private or commits might have a different signature26 // poster email might be private or commits might have a different signature
26 // than the primary email address of the poster.27 // than the primary email address of the poster.
27 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, ctx.tmpBasePath)28 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpenPath(ctx, ctx.tmpBasePath)
28 if err != nil {29 if err != nil {
29 log.Error("%-v Unable to open base repository: %v", ctx.pr, err)30 log.Error("%-v Unable to open base repository: %v", ctx.pr, err)
30 return nil, err31 return nil, err
services/pull/patch.go+2−1
@@ -19,6 +19,7 @@ import ( · 18 unmodified lines
19 "code.gitea.io/gitea/models/unit"19 "code.gitea.io/gitea/models/unit"
20 "code.gitea.io/gitea/modules/container"20 "code.gitea.io/gitea/modules/container"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/git"
22 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/graceful"23 "code.gitea.io/gitea/modules/graceful"
23 "code.gitea.io/gitea/modules/log"24 "code.gitea.io/gitea/modules/log"
24 "code.gitea.io/gitea/modules/process"25 "code.gitea.io/gitea/modules/process"
@@ -35,7 +36,7 @@ func DownloadDiffOrPatch(ctx context.Context, pr *issues_model.PullRequest, w io · 10 unmodified lines
35 return err36 return err
36 }37 }
37 38
38 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.BaseRepo.RepoPath())39 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.BaseRepo)
39 if err != nil {40 if err != nil {
40 return fmt.Errorf("OpenRepository: %w", err)41 return fmt.Errorf("OpenRepository: %w", err)
41 }42 }
services/pull/pull.go+9−8
@@ -23,6 +23,7 @@ import ( · 22 unmodified lines
23 "code.gitea.io/gitea/modules/container"23 "code.gitea.io/gitea/modules/container"
24 gitea_context "code.gitea.io/gitea/modules/context"24 gitea_context "code.gitea.io/gitea/modules/context"
25 "code.gitea.io/gitea/modules/git"25 "code.gitea.io/gitea/modules/git"
26 "code.gitea.io/gitea/modules/gitrepo"
26 "code.gitea.io/gitea/modules/graceful"27 "code.gitea.io/gitea/modules/graceful"
27 "code.gitea.io/gitea/modules/json"28 "code.gitea.io/gitea/modules/json"
28 "code.gitea.io/gitea/modules/log"29 "code.gitea.io/gitea/modules/log"
@@ -62,7 +63,7 @@ func NewPullRequest(ctx context.Context, repo *repo_model.Repository, issue *iss · 33 unmodified lines
62 assigneeCommentMap := make(map[int64]*issues_model.Comment)63 assigneeCommentMap := make(map[int64]*issues_model.Comment)
63 64
64 // add first push codes comment65 // add first push codes comment
65 baseGitRepo, err := git.OpenRepository(ctx, pr.BaseRepo.RepoPath())66 baseGitRepo, err := gitrepo.OpenRepository(ctx, pr.BaseRepo)
66 if err != nil {67 if err != nil {
67 return err68 return err
68 }69 }
@@ -269,9 +270,9 @@ func checkForInvalidation(ctx context.Context, requests issues_model.PullRequest · 200 unmodified lines
269 if err != nil {270 if err != nil {
270 return fmt.Errorf("GetRepositoryByIDCtx: %w", err)271 return fmt.Errorf("GetRepositoryByIDCtx: %w", err)
271 }272 }
272 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())273 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
273 if err != nil {274 if err != nil {
274 return fmt.Errorf("git.OpenRepository: %w", err)275 return fmt.Errorf("gitrepo.OpenRepository: %w", err)
275 }276 }
276 go func() {277 go func() {
277 // FIXME: graceful: We need to tell the manager we're doing something...278 // FIXME: graceful: We need to tell the manager we're doing something...
@@ -614,7 +615,7 @@ func CloseBranchPulls(ctx context.Context, doer *user_model.User, repoID int64, · 336 unmodified lines
614 615
615// CloseRepoBranchesPulls close all pull requests which head branches are in the given repository, but only whose base repo is not in the given repository616// CloseRepoBranchesPulls close all pull requests which head branches are in the given repository, but only whose base repo is not in the given repository
616func CloseRepoBranchesPulls(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) error {617func CloseRepoBranchesPulls(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) error {
617 branches, _, err := git.GetBranchesByPath(ctx, repo.RepoPath(), 0, 0)618 branches, _, err := gitrepo.GetBranchesByPath(ctx, repo, 0, 0)
618 if err != nil {619 if err != nil {
619 return err620 return err
620 }621 }
@@ -671,7 +672,7 @@ func GetSquashMergeCommitMessages(ctx context.Context, pr *issues_model.PullRequ · 50 unmodified lines
671 }672 }
672 }673 }
673 674
674 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.HeadRepo.RepoPath())675 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.HeadRepo)
675 if err != nil {676 if err != nil {
676 log.Error("Unable to open head repository: Error: %v", err)677 log.Error("Unable to open head repository: Error: %v", err)
677 return ""678 return ""
@@ -845,7 +846,7 @@ func GetIssuesAllCommitStatus(ctx context.Context, issues issues_model.IssueList · 167 unmodified lines
845 }846 }
846 gitRepo, ok := gitRepos[issue.RepoID]847 gitRepo, ok := gitRepos[issue.RepoID]
847 if !ok {848 if !ok {
848 gitRepo, err = git.OpenRepository(ctx, issue.Repo.RepoPath())849 gitRepo, err = gitrepo.OpenRepository(ctx, issue.Repo)
849 if err != nil {850 if err != nil {
850 log.Error("Cannot open git repository %-v for issue #%d[%d]. Error: %v", issue.Repo, issue.Index, issue.ID, err)851 log.Error("Cannot open git repository %-v for issue #%d[%d]. Error: %v", issue.Repo, issue.Index, issue.ID, err)
851 continue852 continue
@@ -882,7 +883,7 @@ func IsHeadEqualWithBranch(ctx context.Context, pr *issues_model.PullRequest, br · 30 unmodified lines
882 if err = pr.LoadBaseRepo(ctx); err != nil {883 if err = pr.LoadBaseRepo(ctx); err != nil {
883 return false, err884 return false, err
884 }885 }
885 baseGitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.BaseRepo.RepoPath())886 baseGitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.BaseRepo)
886 if err != nil {887 if err != nil {
887 return false, err888 return false, err
888 }889 }
@@ -902,7 +903,7 @@ func IsHeadEqualWithBranch(ctx context.Context, pr *issues_model.PullRequest, br · 13 unmodified lines
902 } else {903 } else {
903 var closer io.Closer904 var closer io.Closer
904 905
905 headGitRepo, closer, err = git.RepositoryFromContextOrOpen(ctx, pr.HeadRepo.RepoPath())906 headGitRepo, closer, err = gitrepo.RepositoryFromContextOrOpen(ctx, pr.HeadRepo)
906 if err != nil {907 if err != nil {
907 return false, err908 return false, err
908 }909 }
services/pull/pull_test.go+3−2
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 "code.gitea.io/gitea/models/unit"13 "code.gitea.io/gitea/models/unit"
14 "code.gitea.io/gitea/models/unittest"14 "code.gitea.io/gitea/models/unittest"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 17
17 "github.com/stretchr/testify/assert"18 "github.com/stretchr/testify/assert"
18)19)
@@ -41,7 +42,7 @@ func TestPullRequest_GetDefaultMergeMessage_InternalTracker(t *testing.T) { · 22 unmodified lines
41 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2})42 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2})
42 43
43 assert.NoError(t, pr.LoadBaseRepo(db.DefaultContext))44 assert.NoError(t, pr.LoadBaseRepo(db.DefaultContext))
44 gitRepo, err := git.OpenRepository(git.DefaultContext, pr.BaseRepo.RepoPath())45 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, pr.BaseRepo)
45 assert.NoError(t, err)46 assert.NoError(t, err)
46 defer gitRepo.Close()47 defer gitRepo.Close()
47 48
@@ -71,7 +72,7 @@ func TestPullRequest_GetDefaultMergeMessage_ExternalTracker(t *testing.T) { · 23 unmodified lines
71 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2, BaseRepo: baseRepo})72 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2, BaseRepo: baseRepo})
72 73
73 assert.NoError(t, pr.LoadBaseRepo(db.DefaultContext))74 assert.NoError(t, pr.LoadBaseRepo(db.DefaultContext))
74 gitRepo, err := git.OpenRepository(git.DefaultContext, pr.BaseRepo.RepoPath())75 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, pr.BaseRepo)
75 assert.NoError(t, err)76 assert.NoError(t, err)
76 defer gitRepo.Close()77 defer gitRepo.Close()
77 78
services/pull/review.go+2−1
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 repo_model "code.gitea.io/gitea/models/repo"16 repo_model "code.gitea.io/gitea/models/repo"
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
20 "code.gitea.io/gitea/modules/setting"21 "code.gitea.io/gitea/modules/setting"
21 "code.gitea.io/gitea/modules/util"22 "code.gitea.io/gitea/modules/util"
@@ -170,7 +171,7 @@ func createCodeComment(ctx context.Context, doer *user_model.User, repo *repo_mo · 148 unmodified lines
170 if err := pr.LoadBaseRepo(ctx); err != nil {171 if err := pr.LoadBaseRepo(ctx); err != nil {
171 return nil, fmt.Errorf("LoadBaseRepo: %w", err)172 return nil, fmt.Errorf("LoadBaseRepo: %w", err)
172 }173 }
173 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.BaseRepo.RepoPath())174 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, pr.BaseRepo)
174 if err != nil {175 if err != nil {
175 return nil, fmt.Errorf("RepositoryFromContextOrOpen: %w", err)176 return nil, fmt.Errorf("RepositoryFromContextOrOpen: %w", err)
176 }177 }
services/release/release.go+2−1
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 user_model "code.gitea.io/gitea/models/user"16 user_model "code.gitea.io/gitea/models/user"
17 "code.gitea.io/gitea/modules/container"17 "code.gitea.io/gitea/modules/container"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/graceful"20 "code.gitea.io/gitea/modules/graceful"
20 "code.gitea.io/gitea/modules/log"21 "code.gitea.io/gitea/modules/log"
21 "code.gitea.io/gitea/modules/repository"22 "code.gitea.io/gitea/modules/repository"
@@ -168,7 +169,7 @@ func CreateNewTag(ctx context.Context, doer *user_model.User, repo *repo_model.R · 146 unmodified lines
168 }169 }
169 }170 }
170 171
171 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())172 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
172 if err != nil {173 if err != nil {
173 return err174 return err
174 }175 }
services/release/release_test.go+4−6
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 "code.gitea.io/gitea/models/unittest"13 "code.gitea.io/gitea/models/unittest"
14 user_model "code.gitea.io/gitea/models/user"14 user_model "code.gitea.io/gitea/models/user"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 "code.gitea.io/gitea/services/attachment"17 "code.gitea.io/gitea/services/attachment"
17 18
18 _ "code.gitea.io/gitea/models/actions"19 _ "code.gitea.io/gitea/models/actions"
@@ -29,9 +30,8 @@ func TestRelease_Create(t *testing.T) { · 10 unmodified lines
29 30
30 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})31 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
31 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})32 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
32 repoPath := repo_model.RepoPath(user.Name, repo.Name)
33 33
34 gitRepo, err := git.OpenRepository(git.DefaultContext, repoPath)34 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo)
35 assert.NoError(t, err)35 assert.NoError(t, err)
36 defer gitRepo.Close()36 defer gitRepo.Close()
37 37
@@ -135,9 +135,8 @@ func TestRelease_Update(t *testing.T) { · 97 unmodified lines
135 135
136 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})136 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
137 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})137 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
138 repoPath := repo_model.RepoPath(user.Name, repo.Name)
139 138
140 gitRepo, err := git.OpenRepository(git.DefaultContext, repoPath)139 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo)
141 assert.NoError(t, err)140 assert.NoError(t, err)
142 defer gitRepo.Close()141 defer gitRepo.Close()
143 142
@@ -278,9 +277,8 @@ func TestRelease_createTag(t *testing.T) { · 134 unmodified lines
278 277
279 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})278 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
280 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})279 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
281 repoPath := repo_model.RepoPath(user.Name, repo.Name)
282 280
283 gitRepo, err := git.OpenRepository(git.DefaultContext, repoPath)281 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo)
284 assert.NoError(t, err)282 assert.NoError(t, err)
285 defer gitRepo.Close()283 defer gitRepo.Close()
286 284
services/repository/adopt.go+2−1
@@ -17,6 +17,7 @@ import ( · 16 unmodified lines
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 "code.gitea.io/gitea/modules/container"18 "code.gitea.io/gitea/modules/container"
19 "code.gitea.io/gitea/modules/git"19 "code.gitea.io/gitea/modules/git"
20 "code.gitea.io/gitea/modules/gitrepo"
20 "code.gitea.io/gitea/modules/log"21 "code.gitea.io/gitea/modules/log"
21 repo_module "code.gitea.io/gitea/modules/repository"22 repo_module "code.gitea.io/gitea/modules/repository"
22 "code.gitea.io/gitea/modules/setting"23 "code.gitea.io/gitea/modules/setting"
@@ -126,7 +127,7 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r · 103 unmodified lines
126 repo.IsEmpty = false127 repo.IsEmpty = false
127 128
128 // Don't bother looking this repo in the context it won't be there129 // Don't bother looking this repo in the context it won't be there
129 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())130 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
130 if err != nil {131 if err != nil {
131 return fmt.Errorf("openRepository: %w", err)132 return fmt.Errorf("openRepository: %w", err)
132 }133 }
services/repository/archiver/archiver.go+2−1
@@ -15,6 +15,7 @@ import ( · 14 unmodified lines
15 "code.gitea.io/gitea/models/db"15 "code.gitea.io/gitea/models/db"
16 repo_model "code.gitea.io/gitea/models/repo"16 repo_model "code.gitea.io/gitea/models/repo"
17 "code.gitea.io/gitea/modules/git"17 "code.gitea.io/gitea/modules/git"
18 "code.gitea.io/gitea/modules/gitrepo"
18 "code.gitea.io/gitea/modules/graceful"19 "code.gitea.io/gitea/modules/graceful"
19 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
20 "code.gitea.io/gitea/modules/process"21 "code.gitea.io/gitea/modules/process"
@@ -209,7 +210,7 @@ func doArchive(ctx context.Context, r *ArchiveRequest) (*repo_model.RepoArchiver · 188 unmodified lines
209 return nil, fmt.Errorf("archiver.LoadRepo failed: %w", err)210 return nil, fmt.Errorf("archiver.LoadRepo failed: %w", err)
210 }211 }
211 212
212 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())213 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
213 if err != nil {214 if err != nil {
214 return nil, err215 return nil, err
215 }216 }
services/repository/branch.go+3−6
@@ -17,6 +17,7 @@ import ( · 16 unmodified lines
17 repo_model "code.gitea.io/gitea/models/repo"17 repo_model "code.gitea.io/gitea/models/repo"
18 user_model "code.gitea.io/gitea/models/user"18 user_model "code.gitea.io/gitea/models/user"
19 "code.gitea.io/gitea/modules/git"19 "code.gitea.io/gitea/modules/git"
20 "code.gitea.io/gitea/modules/gitrepo"
20 "code.gitea.io/gitea/modules/graceful"21 "code.gitea.io/gitea/modules/graceful"
21 "code.gitea.io/gitea/modules/log"22 "code.gitea.io/gitea/modules/log"
22 "code.gitea.io/gitea/modules/queue"23 "code.gitea.io/gitea/modules/queue"
@@ -160,7 +161,7 @@ func loadOneBranch(ctx context.Context, repo *repo_model.Repository, dbBranch *g · 137 unmodified lines
160 if pr.HasMerged {161 if pr.HasMerged {
161 baseGitRepo, ok := repoIDToGitRepo[pr.BaseRepoID]162 baseGitRepo, ok := repoIDToGitRepo[pr.BaseRepoID]
162 if !ok {163 if !ok {
163 baseGitRepo, err = git.OpenRepository(ctx, pr.BaseRepo.RepoPath())164 baseGitRepo, err = gitrepo.OpenRepository(ctx, pr.BaseRepo)
164 if err != nil {165 if err != nil {
165 return nil, fmt.Errorf("OpenRepository: %v", err)166 return nil, fmt.Errorf("OpenRepository: %v", err)
166 }167 }
@@ -190,13 +191,9 @@ func loadOneBranch(ctx context.Context, repo *repo_model.Repository, dbBranch *g · 23 unmodified lines
190 }, nil191 }, nil
191}192}
192 193
193func GetBranchCommitID(ctx context.Context, repo *repo_model.Repository, branch string) (string, error) {
194 return git.GetBranchCommitID(ctx, repo.RepoPath(), branch)
195}
196
197// checkBranchName validates branch name with existing repository branches194// checkBranchName validates branch name with existing repository branches
198func checkBranchName(ctx context.Context, repo *repo_model.Repository, name string) error {195func checkBranchName(ctx context.Context, repo *repo_model.Repository, name string) error {
199 _, err := git.WalkReferences(ctx, repo.RepoPath(), func(_, refName string) error {196 _, err := gitrepo.WalkReferences(ctx, repo, func(_, refName string) error {
200 branchRefName := strings.TrimPrefix(refName, git.BranchPrefix)197 branchRefName := strings.TrimPrefix(refName, git.BranchPrefix)
201 switch {198 switch {
202 case branchRefName == name:199 case branchRefName == name:
services/repository/create.go+2−1
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 repo_model "code.gitea.io/gitea/models/repo"16 repo_model "code.gitea.io/gitea/models/repo"
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/log"20 "code.gitea.io/gitea/modules/log"
20 "code.gitea.io/gitea/modules/options"21 "code.gitea.io/gitea/modules/options"
21 repo_module "code.gitea.io/gitea/modules/repository"22 repo_module "code.gitea.io/gitea/modules/repository"
@@ -175,7 +176,7 @@ func initRepository(ctx context.Context, repoPath string, u *user_model.User, re · 153 unmodified lines
175 176
176 if len(opts.DefaultBranch) > 0 {177 if len(opts.DefaultBranch) > 0 {
177 repo.DefaultBranch = opts.DefaultBranch178 repo.DefaultBranch = opts.DefaultBranch
178 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())179 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
179 if err != nil {180 if err != nil {
180 return fmt.Errorf("openRepository: %w", err)181 return fmt.Errorf("openRepository: %w", err)
181 }182 }
services/repository/files/commit.go+2−1
@@ -12,6 +12,7 @@ import ( · 11 unmodified lines
12 repo_model "code.gitea.io/gitea/models/repo"12 repo_model "code.gitea.io/gitea/models/repo"
13 user_model "code.gitea.io/gitea/models/user"13 user_model "code.gitea.io/gitea/models/user"
14 "code.gitea.io/gitea/modules/git"14 "code.gitea.io/gitea/modules/git"
15 "code.gitea.io/gitea/modules/gitrepo"
15 "code.gitea.io/gitea/modules/structs"16 "code.gitea.io/gitea/modules/structs"
16 "code.gitea.io/gitea/services/automerge"17 "code.gitea.io/gitea/services/automerge"
17)18)
@@ -23,7 +24,7 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato · 5 unmodified lines
23 repoPath := repo.RepoPath()24 repoPath := repo.RepoPath()
24 25
25 // confirm that commit is exist26 // confirm that commit is exist
26 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())27 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
27 if err != nil {28 if err != nil {
28 return fmt.Errorf("OpenRepository[%s]: %w", repoPath, err)29 return fmt.Errorf("OpenRepository[%s]: %w", repoPath, err)
29 }30 }
services/repository/files/content.go+3−2
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 "code.gitea.io/gitea/models"13 "code.gitea.io/gitea/models"
14 repo_model "code.gitea.io/gitea/models/repo"14 repo_model "code.gitea.io/gitea/models/repo"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 "code.gitea.io/gitea/modules/setting"17 "code.gitea.io/gitea/modules/setting"
17 api "code.gitea.io/gitea/modules/structs"18 api "code.gitea.io/gitea/modules/structs"
18 "code.gitea.io/gitea/modules/util"19 "code.gitea.io/gitea/modules/util"
@@ -58,7 +59,7 @@ func GetContentsOrList(ctx context.Context, repo *repo_model.Repository, treePat · 39 unmodified lines
58 }59 }
59 treePath = cleanTreePath60 treePath = cleanTreePath
60 61
61 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())62 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
62 if err != nil {63 if err != nil {
63 return nil, err64 return nil, err
64 }65 }
@@ -133,7 +134,7 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref · 68 unmodified lines
133 }134 }
134 treePath = cleanTreePath135 treePath = cleanTreePath
135 136
136 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())137 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
137 if err != nil {138 if err != nil {
138 return nil, err139 return nil, err
139 }140 }
services/repository/files/content_test.go+2−3
@@ -6,10 +6,9 @@ package files · 5 unmodified lines
6import (6import (
7 "testing"7 "testing"
8 8
9 repo_model "code.gitea.io/gitea/models/repo"
10 "code.gitea.io/gitea/models/unittest"9 "code.gitea.io/gitea/models/unittest"
11 "code.gitea.io/gitea/modules/contexttest"10 "code.gitea.io/gitea/modules/contexttest"
12 "code.gitea.io/gitea/modules/git"11 "code.gitea.io/gitea/modules/gitrepo"
13 api "code.gitea.io/gitea/modules/structs"12 api "code.gitea.io/gitea/modules/structs"
14 13
15 _ "code.gitea.io/gitea/models/actions"14 _ "code.gitea.io/gitea/models/actions"
@@ -235,7 +234,7 @@ func TestGetBlobBySHA(t *testing.T) { · 219 unmodified lines
235 ctx.SetParams(":id", "1")234 ctx.SetParams(":id", "1")
236 ctx.SetParams(":sha", sha)235 ctx.SetParams(":sha", sha)
237 236
238 gitRepo, err := git.OpenRepository(ctx, repo_model.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name))237 gitRepo, err := gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
239 if err != nil {238 if err != nil {
240 t.Fail()239 t.Fail()
241 }240 }
services/repository/files/file_test.go+2−2
@@ -8,7 +8,7 @@ import ( · 7 unmodified lines
8 8
9 "code.gitea.io/gitea/models/unittest"9 "code.gitea.io/gitea/models/unittest"
10 "code.gitea.io/gitea/modules/contexttest"10 "code.gitea.io/gitea/modules/contexttest"
11 "code.gitea.io/gitea/modules/git"11 "code.gitea.io/gitea/modules/gitrepo"
12 "code.gitea.io/gitea/modules/setting"12 "code.gitea.io/gitea/modules/setting"
13 api "code.gitea.io/gitea/modules/structs"13 api "code.gitea.io/gitea/modules/structs"
14 14
@@ -109,7 +109,7 @@ func TestGetFileResponseFromCommit(t *testing.T) { · 94 unmodified lines
109 repo := ctx.Repo.Repository109 repo := ctx.Repo.Repository
110 branch := repo.DefaultBranch110 branch := repo.DefaultBranch
111 treePath := "README.md"111 treePath := "README.md"
112 gitRepo, _ := git.OpenRepository(ctx, repo.RepoPath())112 gitRepo, _ := gitrepo.OpenRepository(ctx, repo)
113 defer gitRepo.Close()113 defer gitRepo.Close()
114 commit, _ := gitRepo.GetBranchCommit(branch)114 commit, _ := gitRepo.GetBranchCommit(branch)
115 expectedFileResponse := getExpectedFileResponse()115 expectedFileResponse := getExpectedFileResponse()
services/repository/files/patch.go+2−1
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 repo_model "code.gitea.io/gitea/models/repo"13 repo_model "code.gitea.io/gitea/models/repo"
14 user_model "code.gitea.io/gitea/models/user"14 user_model "code.gitea.io/gitea/models/user"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 "code.gitea.io/gitea/modules/log"17 "code.gitea.io/gitea/modules/log"
17 "code.gitea.io/gitea/modules/structs"18 "code.gitea.io/gitea/modules/structs"
18 asymkey_service "code.gitea.io/gitea/services/asymkey"19 asymkey_service "code.gitea.io/gitea/services/asymkey"
@@ -42,7 +43,7 @@ func (opts *ApplyDiffPatchOptions) Validate(ctx context.Context, repo *repo_mode · 23 unmodified lines
42 opts.NewBranch = opts.OldBranch43 opts.NewBranch = opts.OldBranch
43 }44 }
44 45
45 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())46 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
46 if err != nil {47 if err != nil {
47 return err48 return err
48 }49 }
services/repository/files/update.go+2−1
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 repo_model "code.gitea.io/gitea/models/repo"16 repo_model "code.gitea.io/gitea/models/repo"
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/lfs"20 "code.gitea.io/gitea/modules/lfs"
20 "code.gitea.io/gitea/modules/log"21 "code.gitea.io/gitea/modules/log"
21 "code.gitea.io/gitea/modules/setting"22 "code.gitea.io/gitea/modules/setting"
@@ -78,7 +79,7 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use · 56 unmodified lines
78 opts.NewBranch = opts.OldBranch79 opts.NewBranch = opts.OldBranch
79 }80 }
80 81
81 gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, repo.RepoPath())82 gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo)
82 if err != nil {83 if err != nil {
83 return nil, err84 return nil, err
84 }85 }
services/repository/fork.go+3−2
@@ -14,6 +14,7 @@ import ( · 13 unmodified lines
14 repo_model "code.gitea.io/gitea/models/repo"14 repo_model "code.gitea.io/gitea/models/repo"
15 user_model "code.gitea.io/gitea/models/user"15 user_model "code.gitea.io/gitea/models/user"
16 "code.gitea.io/gitea/modules/git"16 "code.gitea.io/gitea/modules/git"
17 "code.gitea.io/gitea/modules/gitrepo"
17 "code.gitea.io/gitea/modules/log"18 "code.gitea.io/gitea/modules/log"
18 repo_module "code.gitea.io/gitea/modules/repository"19 repo_module "code.gitea.io/gitea/modules/repository"
19 "code.gitea.io/gitea/modules/structs"20 "code.gitea.io/gitea/modules/structs"
@@ -167,7 +168,7 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork · 147 unmodified lines
167 return fmt.Errorf("createDelegateHooks: %w", err)168 return fmt.Errorf("createDelegateHooks: %w", err)
168 }169 }
169 170
170 gitRepo, err := git.OpenRepository(txCtx, repo.RepoPath())171 gitRepo, err := gitrepo.OpenRepository(txCtx, repo)
171 if err != nil {172 if err != nil {
172 return fmt.Errorf("OpenRepository: %w", err)173 return fmt.Errorf("OpenRepository: %w", err)
173 }174 }
@@ -190,7 +191,7 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork · 16 unmodified lines
190 log.Error("Copy language stat from oldRepo failed: %v", err)191 log.Error("Copy language stat from oldRepo failed: %v", err)
191 }192 }
192 193
193 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())194 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
194 if err != nil {195 if err != nil {
195 log.Error("Open created git repository failed: %v", err)196 log.Error("Open created git repository failed: %v", err)
196 } else {197 } else {
services/repository/hooks.go+3−3
@@ -10,7 +10,7 @@ import ( · 9 unmodified lines
10 "code.gitea.io/gitea/models/db"10 "code.gitea.io/gitea/models/db"
11 repo_model "code.gitea.io/gitea/models/repo"11 repo_model "code.gitea.io/gitea/models/repo"
12 "code.gitea.io/gitea/models/webhook"12 "code.gitea.io/gitea/models/webhook"
13 "code.gitea.io/gitea/modules/git"13 "code.gitea.io/gitea/modules/gitrepo"
14 "code.gitea.io/gitea/modules/log"14 "code.gitea.io/gitea/modules/log"
15 repo_module "code.gitea.io/gitea/modules/repository"15 repo_module "code.gitea.io/gitea/modules/repository"
16 16
@@ -52,13 +52,13 @@ func SyncRepositoryHooks(ctx context.Context) error { · 35 unmodified lines
52 52
53// GenerateGitHooks generates git hooks from a template repository53// GenerateGitHooks generates git hooks from a template repository
54func GenerateGitHooks(ctx context.Context, templateRepo, generateRepo *repo_model.Repository) error {54func GenerateGitHooks(ctx context.Context, templateRepo, generateRepo *repo_model.Repository) error {
55 generateGitRepo, err := git.OpenRepository(ctx, generateRepo.RepoPath())55 generateGitRepo, err := gitrepo.OpenRepository(ctx, generateRepo)
56 if err != nil {56 if err != nil {
57 return err57 return err
58 }58 }
59 defer generateGitRepo.Close()59 defer generateGitRepo.Close()
60 60
61 templateGitRepo, err := git.OpenRepository(ctx, templateRepo.RepoPath())61 templateGitRepo, err := gitrepo.OpenRepository(ctx, templateRepo)
62 if err != nil {62 if err != nil {
63 return err63 return err
64 }64 }
services/repository/lfs.go+2−1
@@ -12,6 +12,7 @@ import ( · 11 unmodified lines
12 git_model "code.gitea.io/gitea/models/git"12 git_model "code.gitea.io/gitea/models/git"
13 repo_model "code.gitea.io/gitea/models/repo"13 repo_model "code.gitea.io/gitea/models/repo"
14 "code.gitea.io/gitea/modules/git"14 "code.gitea.io/gitea/modules/git"
15 "code.gitea.io/gitea/modules/gitrepo"
15 "code.gitea.io/gitea/modules/lfs"16 "code.gitea.io/gitea/modules/lfs"
16 "code.gitea.io/gitea/modules/log"17 "code.gitea.io/gitea/modules/log"
17 "code.gitea.io/gitea/modules/setting"18 "code.gitea.io/gitea/modules/setting"
@@ -69,7 +70,7 @@ func GarbageCollectLFSMetaObjectsForRepo(ctx context.Context, repo *repo_model.R · 51 unmodified lines
69 }70 }
70 }()71 }()
71 72
72 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())73 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
73 if err != nil {74 if err != nil {
74 log.Error("Unable to open git repository %-v: %v", repo, err)75 log.Error("Unable to open git repository %-v: %v", repo, err)
75 return err76 return err
services/repository/push.go+4−5
@@ -16,6 +16,7 @@ import ( · 15 unmodified lines
16 user_model "code.gitea.io/gitea/models/user"16 user_model "code.gitea.io/gitea/models/user"
17 "code.gitea.io/gitea/modules/cache"17 "code.gitea.io/gitea/modules/cache"
18 "code.gitea.io/gitea/modules/git"18 "code.gitea.io/gitea/modules/git"
19 "code.gitea.io/gitea/modules/gitrepo"
19 "code.gitea.io/gitea/modules/graceful"20 "code.gitea.io/gitea/modules/graceful"
20 "code.gitea.io/gitea/modules/log"21 "code.gitea.io/gitea/modules/log"
21 "code.gitea.io/gitea/modules/process"22 "code.gitea.io/gitea/modules/process"
@@ -86,17 +87,15 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error { · 64 unmodified lines
86 return fmt.Errorf("GetRepositoryByOwnerAndName failed: %w", err)87 return fmt.Errorf("GetRepositoryByOwnerAndName failed: %w", err)
87 }88 }
88 89
89 repoPath := repo.RepoPath()90 gitRepo, err := gitrepo.OpenRepository(ctx, repo)
90
91 gitRepo, err := git.OpenRepository(ctx, repoPath)
92 if err != nil {91 if err != nil {
93 return fmt.Errorf("OpenRepository[%s]: %w", repoPath, err)92 return fmt.Errorf("OpenRepository[%s]: %w", repo.FullName(), err)
94 }93 }
95 defer gitRepo.Close()94 defer gitRepo.Close()
96 95
97 objectFormat, err := gitRepo.GetObjectFormat()96 objectFormat, err := gitRepo.GetObjectFormat()
98 if err != nil {97 if err != nil {
99 return fmt.Errorf("unknown repository ObjectFormat [%s]: %w", repoPath, err)98 return fmt.Errorf("unknown repository ObjectFormat [%s]: %w", repo.FullName(), err)
100 }99 }
101 100
102 if err = repo_module.UpdateRepoSize(ctx, repo); err != nil {101 if err = repo_module.UpdateRepoSize(ctx, repo); err != nil {
services/wiki/wiki.go+2−2
@@ -191,7 +191,7 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model · 190 unmodified lines
191 191
192 committer := doer.NewGitSig()192 committer := doer.NewGitSig()
193 193
194 sign, signingKey, signer, _ := asymkey_service.SignWikiCommit(ctx, repo.WikiPath(), doer)194 sign, signingKey, signer, _ := asymkey_service.SignWikiCommit(ctx, repo, doer)
195 if sign {195 if sign {
196 commitTreeOpts.KeyID = signingKey196 commitTreeOpts.KeyID = signingKey
197 if repo.GetTrustModel() == repo_model.CommitterTrustModel || repo.GetTrustModel() == repo_model.CollaboratorCommitterTrustModel {197 if repo.GetTrustModel() == repo_model.CommitterTrustModel || repo.GetTrustModel() == repo_model.CollaboratorCommitterTrustModel {
@@ -314,7 +314,7 @@ func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model · 116 unmodified lines
314 314
315 committer := doer.NewGitSig()315 committer := doer.NewGitSig()
316 316
317 sign, signingKey, signer, _ := asymkey_service.SignWikiCommit(ctx, repo.WikiPath(), doer)317 sign, signingKey, signer, _ := asymkey_service.SignWikiCommit(ctx, repo, doer)
318 if sign {318 if sign {
319 commitTreeOpts.KeyID = signingKey319 commitTreeOpts.KeyID = signingKey
320 if repo.GetTrustModel() == repo_model.CommitterTrustModel || repo.GetTrustModel() == repo_model.CollaboratorCommitterTrustModel {320 if repo.GetTrustModel() == repo_model.CommitterTrustModel || repo.GetTrustModel() == repo_model.CollaboratorCommitterTrustModel {
services/wiki/wiki_test.go+5−4
@@ -12,6 +12,7 @@ import ( · 11 unmodified lines
12 "code.gitea.io/gitea/models/unittest"12 "code.gitea.io/gitea/models/unittest"
13 user_model "code.gitea.io/gitea/models/user"13 user_model "code.gitea.io/gitea/models/user"
14 "code.gitea.io/gitea/modules/git"14 "code.gitea.io/gitea/modules/git"
15 "code.gitea.io/gitea/modules/gitrepo"
15 16
16 _ "code.gitea.io/gitea/models/actions"17 _ "code.gitea.io/gitea/models/actions"
17 18
@@ -164,7 +165,7 @@ func TestRepository_AddWikiPage(t *testing.T) { · 146 unmodified lines
164 webPath := UserTitleToWebPath("", userTitle)165 webPath := UserTitleToWebPath("", userTitle)
165 assert.NoError(t, AddWikiPage(git.DefaultContext, doer, repo, webPath, wikiContent, commitMsg))166 assert.NoError(t, AddWikiPage(git.DefaultContext, doer, repo, webPath, wikiContent, commitMsg))
166 // Now need to show that the page has been added:167 // Now need to show that the page has been added:
167 gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())168 gitRepo, err := gitrepo.OpenWikiRepository(git.DefaultContext, repo)
168 if !assert.NoError(t, err) {169 if !assert.NoError(t, err) {
169 return170 return
170 }171 }
@@ -212,7 +213,7 @@ func TestRepository_EditWikiPage(t *testing.T) { · 41 unmodified lines
212 assert.NoError(t, EditWikiPage(git.DefaultContext, doer, repo, "Home", webPath, newWikiContent, commitMsg))213 assert.NoError(t, EditWikiPage(git.DefaultContext, doer, repo, "Home", webPath, newWikiContent, commitMsg))
213 214
214 // Now need to show that the page has been added:215 // Now need to show that the page has been added:
215 gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())216 gitRepo, err := gitrepo.OpenWikiRepository(git.DefaultContext, repo)
216 assert.NoError(t, err)217 assert.NoError(t, err)
217 masterTree, err := gitRepo.GetTree(DefaultBranch)218 masterTree, err := gitRepo.GetTree(DefaultBranch)
218 assert.NoError(t, err)219 assert.NoError(t, err)
@@ -236,7 +237,7 @@ func TestRepository_DeleteWikiPage(t *testing.T) { · 17 unmodified lines
236 assert.NoError(t, DeleteWikiPage(git.DefaultContext, doer, repo, "Home"))237 assert.NoError(t, DeleteWikiPage(git.DefaultContext, doer, repo, "Home"))
237 238
238 // Now need to show that the page has been added:239 // Now need to show that the page has been added:
239 gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())240 gitRepo, err := gitrepo.OpenWikiRepository(git.DefaultContext, repo)
240 if !assert.NoError(t, err) {241 if !assert.NoError(t, err) {
241 return242 return
242 }243 }
@@ -251,7 +252,7 @@ func TestRepository_DeleteWikiPage(t *testing.T) { · 8 unmodified lines
251func TestPrepareWikiFileName(t *testing.T) {252func TestPrepareWikiFileName(t *testing.T) {
252 unittest.PrepareTestEnv(t)253 unittest.PrepareTestEnv(t)
253 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})254 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
254 gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())255 gitRepo, err := gitrepo.OpenWikiRepository(git.DefaultContext, repo)
255 if !assert.NoError(t, err) {256 if !assert.NoError(t, err) {
256 return257 return
257 }258 }
tests/integration/api_packages_cargo_test.go+2−2
@@ -18,7 +18,7 @@ import ( · 17 unmodified lines
18 repo_model "code.gitea.io/gitea/models/repo"18 repo_model "code.gitea.io/gitea/models/repo"
19 "code.gitea.io/gitea/models/unittest"19 "code.gitea.io/gitea/models/unittest"
20 user_model "code.gitea.io/gitea/models/user"20 user_model "code.gitea.io/gitea/models/user"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/json"22 "code.gitea.io/gitea/modules/json"
23 cargo_module "code.gitea.io/gitea/modules/packages/cargo"23 cargo_module "code.gitea.io/gitea/modules/packages/cargo"
24 "code.gitea.io/gitea/modules/setting"24 "code.gitea.io/gitea/modules/setting"
@@ -78,7 +78,7 @@ func testPackageCargo(t *testing.T, _ *neturl.URL) { · 53 unmodified lines
78 assert.NoError(t, err)78 assert.NoError(t, err)
79 79
80 readGitContent := func(t *testing.T, path string) string {80 readGitContent := func(t *testing.T, path string) string {
81 gitRepo, err := git.OpenRepository(db.DefaultContext, repo.RepoPath())81 gitRepo, err := gitrepo.OpenRepository(db.DefaultContext, repo)
82 assert.NoError(t, err)82 assert.NoError(t, err)
83 defer gitRepo.Close()83 defer gitRepo.Close()
84 84
tests/integration/api_releases_test.go+3−2
@@ -18,6 +18,7 @@ import ( · 17 unmodified lines
18 "code.gitea.io/gitea/models/unittest"18 "code.gitea.io/gitea/models/unittest"
19 user_model "code.gitea.io/gitea/models/user"19 user_model "code.gitea.io/gitea/models/user"
20 "code.gitea.io/gitea/modules/git"20 "code.gitea.io/gitea/modules/git"
21 "code.gitea.io/gitea/modules/gitrepo"
21 api "code.gitea.io/gitea/modules/structs"22 api "code.gitea.io/gitea/modules/structs"
22 "code.gitea.io/gitea/tests"23 "code.gitea.io/gitea/tests"
23 24
@@ -109,7 +110,7 @@ func TestAPICreateAndUpdateRelease(t *testing.T) { · 85 unmodified lines
109 session := loginUser(t, owner.LowerName)110 session := loginUser(t, owner.LowerName)
110 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)111 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
111 112
112 gitRepo, err := git.OpenRepository(git.DefaultContext, repo.RepoPath())113 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo)
113 assert.NoError(t, err)114 assert.NoError(t, err)
114 defer gitRepo.Close()115 defer gitRepo.Close()
115 116
@@ -172,7 +173,7 @@ func TestAPICreateReleaseToDefaultBranchOnExistingTag(t *testing.T) { · 56 unmodified lines
172 session := loginUser(t, owner.LowerName)173 session := loginUser(t, owner.LowerName)
173 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)174 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
174 175
175 gitRepo, err := git.OpenRepository(git.DefaultContext, repo.RepoPath())176 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo)
176 assert.NoError(t, err)177 assert.NoError(t, err)
177 defer gitRepo.Close()178 defer gitRepo.Close()
178 179
tests/integration/api_repo_file_create_test.go+3−3
@@ -18,7 +18,7 @@ import ( · 17 unmodified lines
18 "code.gitea.io/gitea/models/unittest"18 "code.gitea.io/gitea/models/unittest"
19 user_model "code.gitea.io/gitea/models/user"19 user_model "code.gitea.io/gitea/models/user"
20 "code.gitea.io/gitea/modules/context"20 "code.gitea.io/gitea/modules/context"
21 "code.gitea.io/gitea/modules/git"21 "code.gitea.io/gitea/modules/gitrepo"
22 "code.gitea.io/gitea/modules/setting"22 "code.gitea.io/gitea/modules/setting"
23 api "code.gitea.io/gitea/modules/structs"23 api "code.gitea.io/gitea/modules/structs"
24 24
@@ -167,7 +167,7 @@ func TestAPICreateFile(t *testing.T) { · 142 unmodified lines
167 req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user2.Name, repo1.Name, treePath), &createFileOptions).167 req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user2.Name, repo1.Name, treePath), &createFileOptions).
168 AddTokenAuth(token2)168 AddTokenAuth(token2)
169 resp := MakeRequest(t, req, http.StatusCreated)169 resp := MakeRequest(t, req, http.StatusCreated)
170 gitRepo, _ := git.OpenRepository(stdCtx.Background(), repo1.RepoPath())170 gitRepo, _ := gitrepo.OpenRepository(stdCtx.Background(), repo1)
171 commitID, _ := gitRepo.GetBranchCommitID(createFileOptions.NewBranchName)171 commitID, _ := gitRepo.GetBranchCommitID(createFileOptions.NewBranchName)
172 latestCommit, _ := gitRepo.GetCommitByPath(treePath)172 latestCommit, _ := gitRepo.GetCommitByPath(treePath)
173 expectedFileResponse := getExpectedFileResponseForCreate("user2/repo1", commitID, treePath, latestCommit.ID.String())173 expectedFileResponse := getExpectedFileResponseForCreate("user2/repo1", commitID, treePath, latestCommit.ID.String())
@@ -285,7 +285,7 @@ func TestAPICreateFile(t *testing.T) { · 111 unmodified lines
285 AddTokenAuth(token2)285 AddTokenAuth(token2)
286 resp = MakeRequest(t, req, http.StatusCreated)286 resp = MakeRequest(t, req, http.StatusCreated)
287 emptyRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "empty-repo"}) // public repo287 emptyRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "empty-repo"}) // public repo
288 gitRepo, _ := git.OpenRepository(stdCtx.Background(), emptyRepo.RepoPath())288 gitRepo, _ := gitrepo.OpenRepository(stdCtx.Background(), emptyRepo)
289 commitID, _ := gitRepo.GetBranchCommitID(createFileOptions.NewBranchName)289 commitID, _ := gitRepo.GetBranchCommitID(createFileOptions.NewBranchName)
290 latestCommit, _ := gitRepo.GetCommitByPath(treePath)290 latestCommit, _ := gitRepo.GetCommitByPath(treePath)
291 expectedFileResponse := getExpectedFileResponseForCreate("user2/empty-repo", commitID, treePath, latestCommit.ID.String())291 expectedFileResponse := getExpectedFileResponseForCreate("user2/empty-repo", commitID, treePath, latestCommit.ID.String())
tests/integration/api_repo_file_update_test.go+2−2
@@ -17,7 +17,7 @@ import ( · 16 unmodified lines
17 "code.gitea.io/gitea/models/unittest"17 "code.gitea.io/gitea/models/unittest"
18 user_model "code.gitea.io/gitea/models/user"18 user_model "code.gitea.io/gitea/models/user"
19 "code.gitea.io/gitea/modules/context"19 "code.gitea.io/gitea/modules/context"
20 "code.gitea.io/gitea/modules/git"20 "code.gitea.io/gitea/modules/gitrepo"
21 "code.gitea.io/gitea/modules/setting"21 "code.gitea.io/gitea/modules/setting"
22 api "code.gitea.io/gitea/modules/structs"22 api "code.gitea.io/gitea/modules/structs"
23 23
@@ -135,7 +135,7 @@ func TestAPIUpdateFile(t *testing.T) { · 111 unmodified lines
135 req := NewRequestWithJSON(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user2.Name, repo1.Name, treePath), &updateFileOptions).135 req := NewRequestWithJSON(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", user2.Name, repo1.Name, treePath), &updateFileOptions).
136 AddTokenAuth(token2)136 AddTokenAuth(token2)
137 resp := MakeRequest(t, req, http.StatusOK)137 resp := MakeRequest(t, req, http.StatusOK)
138 gitRepo, _ := git.OpenRepository(stdCtx.Background(), repo1.RepoPath())138 gitRepo, _ := gitrepo.OpenRepository(stdCtx.Background(), repo1)
139 commitID, _ := gitRepo.GetBranchCommitID(updateFileOptions.NewBranchName)139 commitID, _ := gitRepo.GetBranchCommitID(updateFileOptions.NewBranchName)
140 lasCommit, _ := gitRepo.GetCommitByPath(treePath)140 lasCommit, _ := gitRepo.GetCommitByPath(treePath)
141 expectedFileResponse := getExpectedFileResponseForUpdate(commitID, treePath, lasCommit.ID.String())141 expectedFileResponse := getExpectedFileResponseForUpdate(commitID, treePath, lasCommit.ID.String())
tests/integration/api_repo_files_change_test.go+2−2
@@ -16,7 +16,7 @@ import ( · 15 unmodified lines
16 "code.gitea.io/gitea/models/unittest"16 "code.gitea.io/gitea/models/unittest"
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 "code.gitea.io/gitea/modules/context"18 "code.gitea.io/gitea/modules/context"
19 "code.gitea.io/gitea/modules/git"19 "code.gitea.io/gitea/modules/gitrepo"
20 "code.gitea.io/gitea/modules/setting"20 "code.gitea.io/gitea/modules/setting"
21 api "code.gitea.io/gitea/modules/structs"21 api "code.gitea.io/gitea/modules/structs"
22 22
@@ -96,7 +96,7 @@ func TestAPIChangeFiles(t *testing.T) { · 73 unmodified lines
96 req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents", user2.Name, repo1.Name), &changeFilesOptions).96 req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents", user2.Name, repo1.Name), &changeFilesOptions).
97 AddTokenAuth(token2)97 AddTokenAuth(token2)
98 resp := MakeRequest(t, req, http.StatusCreated)98 resp := MakeRequest(t, req, http.StatusCreated)
99 gitRepo, _ := git.OpenRepository(stdCtx.Background(), repo1.RepoPath())99 gitRepo, _ := gitrepo.OpenRepository(stdCtx.Background(), repo1)
100 commitID, _ := gitRepo.GetBranchCommitID(changeFilesOptions.NewBranchName)100 commitID, _ := gitRepo.GetBranchCommitID(changeFilesOptions.NewBranchName)
101 createLasCommit, _ := gitRepo.GetCommitByPath(createTreePath)101 createLasCommit, _ := gitRepo.GetCommitByPath(createTreePath)
102 updateLastCommit, _ := gitRepo.GetCommitByPath(updateTreePath)102 updateLastCommit, _ := gitRepo.GetCommitByPath(updateTreePath)
tests/integration/api_repo_get_contents_list_test.go+2−1
@@ -14,6 +14,7 @@ import ( · 13 unmodified lines
14 "code.gitea.io/gitea/models/unittest"14 "code.gitea.io/gitea/models/unittest"
15 user_model "code.gitea.io/gitea/models/user"15 user_model "code.gitea.io/gitea/models/user"
16 "code.gitea.io/gitea/modules/git"16 "code.gitea.io/gitea/modules/git"
17 "code.gitea.io/gitea/modules/gitrepo"
17 "code.gitea.io/gitea/modules/setting"18 "code.gitea.io/gitea/modules/setting"
18 api "code.gitea.io/gitea/modules/structs"19 api "code.gitea.io/gitea/modules/structs"
19 repo_service "code.gitea.io/gitea/services/repository"20 repo_service "code.gitea.io/gitea/services/repository"
@@ -71,7 +72,7 @@ func testAPIGetContentsList(t *testing.T, u *url.URL) { · 51 unmodified lines
71 token4 := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository)72 token4 := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository)
72 73
73 // Get the commit ID of the default branch74 // Get the commit ID of the default branch
74 gitRepo, err := git.OpenRepository(git.DefaultContext, repo1.RepoPath())75 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo1)
75 assert.NoError(t, err)76 assert.NoError(t, err)
76 defer gitRepo.Close()77 defer gitRepo.Close()
77 78
tests/integration/api_repo_get_contents_test.go+2−1
@@ -14,6 +14,7 @@ import ( · 13 unmodified lines
14 "code.gitea.io/gitea/models/unittest"14 "code.gitea.io/gitea/models/unittest"
15 user_model "code.gitea.io/gitea/models/user"15 user_model "code.gitea.io/gitea/models/user"
16 "code.gitea.io/gitea/modules/git"16 "code.gitea.io/gitea/modules/git"
17 "code.gitea.io/gitea/modules/gitrepo"
17 "code.gitea.io/gitea/modules/setting"18 "code.gitea.io/gitea/modules/setting"
18 api "code.gitea.io/gitea/modules/structs"19 api "code.gitea.io/gitea/modules/structs"
19 repo_service "code.gitea.io/gitea/services/repository"20 repo_service "code.gitea.io/gitea/services/repository"
@@ -73,7 +74,7 @@ func testAPIGetContents(t *testing.T, u *url.URL) { · 53 unmodified lines
73 token4 := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository)74 token4 := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository)
74 75
75 // Get the commit ID of the default branch76 // Get the commit ID of the default branch
76 gitRepo, err := git.OpenRepository(git.DefaultContext, repo1.RepoPath())77 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo1)
77 assert.NoError(t, err)78 assert.NoError(t, err)
78 defer gitRepo.Close()79 defer gitRepo.Close()
79 80
tests/integration/api_repo_git_tags_test.go+2−1
@@ -13,6 +13,7 @@ import ( · 12 unmodified lines
13 "code.gitea.io/gitea/models/unittest"13 "code.gitea.io/gitea/models/unittest"
14 user_model "code.gitea.io/gitea/models/user"14 user_model "code.gitea.io/gitea/models/user"
15 "code.gitea.io/gitea/modules/git"15 "code.gitea.io/gitea/modules/git"
16 "code.gitea.io/gitea/modules/gitrepo"
16 api "code.gitea.io/gitea/modules/structs"17 api "code.gitea.io/gitea/modules/structs"
17 "code.gitea.io/gitea/modules/util"18 "code.gitea.io/gitea/modules/util"
18 "code.gitea.io/gitea/tests"19 "code.gitea.io/gitea/tests"
@@ -32,7 +33,7 @@ func TestAPIGitTags(t *testing.T) { · 13 unmodified lines
32 _ = git.NewCommand(git.DefaultContext, "config", "user.name").AddDynamicArguments(user.Name).Run(&git.RunOpts{Dir: repo.RepoPath()})33 _ = git.NewCommand(git.DefaultContext, "config", "user.name").AddDynamicArguments(user.Name).Run(&git.RunOpts{Dir: repo.RepoPath()})
33 _ = git.NewCommand(git.DefaultContext, "config", "user.email").AddDynamicArguments(user.Email).Run(&git.RunOpts{Dir: repo.RepoPath()})34 _ = git.NewCommand(git.DefaultContext, "config", "user.email").AddDynamicArguments(user.Email).Run(&git.RunOpts{Dir: repo.RepoPath()})
34 35
35 gitRepo, _ := git.OpenRepository(git.DefaultContext, repo.RepoPath())36 gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
36 defer gitRepo.Close()37 defer gitRepo.Close()
37 38
38 commit, _ := gitRepo.GetBranchCommit("master")39 commit, _ := gitRepo.GetBranchCommit("master")
tests/integration/mirror_pull_test.go+2−1
@@ -12,6 +12,7 @@ import ( · 11 unmodified lines
12 "code.gitea.io/gitea/models/unittest"12 "code.gitea.io/gitea/models/unittest"
13 user_model "code.gitea.io/gitea/models/user"13 user_model "code.gitea.io/gitea/models/user"
14 "code.gitea.io/gitea/modules/git"14 "code.gitea.io/gitea/modules/git"
15 "code.gitea.io/gitea/modules/gitrepo"
15 "code.gitea.io/gitea/modules/migration"16 "code.gitea.io/gitea/modules/migration"
16 "code.gitea.io/gitea/modules/repository"17 "code.gitea.io/gitea/modules/repository"
17 mirror_service "code.gitea.io/gitea/services/mirror"18 mirror_service "code.gitea.io/gitea/services/mirror"
@@ -54,7 +55,7 @@ func TestMirrorPull(t *testing.T) { · 36 unmodified lines
54 mirror, err := repository.MigrateRepositoryGitData(ctx, user, mirrorRepo, opts, nil)55 mirror, err := repository.MigrateRepositoryGitData(ctx, user, mirrorRepo, opts, nil)
55 assert.NoError(t, err)56 assert.NoError(t, err)
56 57
57 gitRepo, err := git.OpenRepository(git.DefaultContext, repoPath)58 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo)
58 assert.NoError(t, err)59 assert.NoError(t, err)
59 defer gitRepo.Close()60 defer gitRepo.Close()
60 61
tests/integration/mirror_push_test.go+3−2
@@ -17,6 +17,7 @@ import ( · 16 unmodified lines
17 user_model "code.gitea.io/gitea/models/user"17 user_model "code.gitea.io/gitea/models/user"
18 gitea_context "code.gitea.io/gitea/modules/context"18 gitea_context "code.gitea.io/gitea/modules/context"
19 "code.gitea.io/gitea/modules/git"19 "code.gitea.io/gitea/modules/git"
20 "code.gitea.io/gitea/modules/gitrepo"
20 "code.gitea.io/gitea/modules/setting"21 "code.gitea.io/gitea/modules/setting"
21 "code.gitea.io/gitea/services/migrations"22 "code.gitea.io/gitea/services/migrations"
22 mirror_service "code.gitea.io/gitea/services/mirror"23 mirror_service "code.gitea.io/gitea/services/mirror"
@@ -55,14 +56,14 @@ func testMirrorPush(t *testing.T, u *url.URL) { · 32 unmodified lines
55 ok := mirror_service.SyncPushMirror(context.Background(), mirrors[0].ID)56 ok := mirror_service.SyncPushMirror(context.Background(), mirrors[0].ID)
56 assert.True(t, ok)57 assert.True(t, ok)
57 58
58 srcGitRepo, err := git.OpenRepository(git.DefaultContext, srcRepo.RepoPath())59 srcGitRepo, err := gitrepo.OpenRepository(git.DefaultContext, srcRepo)
59 assert.NoError(t, err)60 assert.NoError(t, err)
60 defer srcGitRepo.Close()61 defer srcGitRepo.Close()
61 62
62 srcCommit, err := srcGitRepo.GetBranchCommit("master")63 srcCommit, err := srcGitRepo.GetBranchCommit("master")
63 assert.NoError(t, err)64 assert.NoError(t, err)
64 65
65 mirrorGitRepo, err := git.OpenRepository(git.DefaultContext, mirrorRepo.RepoPath())66 mirrorGitRepo, err := gitrepo.OpenRepository(git.DefaultContext, mirrorRepo)
66 assert.NoError(t, err)67 assert.NoError(t, err)
67 defer mirrorGitRepo.Close()68 defer mirrorGitRepo.Close()
68 69
tests/integration/pull_merge_test.go+3−2
@@ -25,6 +25,7 @@ import ( · 24 unmodified lines
25 user_model "code.gitea.io/gitea/models/user"25 user_model "code.gitea.io/gitea/models/user"
26 "code.gitea.io/gitea/models/webhook"26 "code.gitea.io/gitea/models/webhook"
27 "code.gitea.io/gitea/modules/git"27 "code.gitea.io/gitea/modules/git"
28 "code.gitea.io/gitea/modules/gitrepo"
28 api "code.gitea.io/gitea/modules/structs"29 api "code.gitea.io/gitea/modules/structs"
29 "code.gitea.io/gitea/modules/test"30 "code.gitea.io/gitea/modules/test"
30 "code.gitea.io/gitea/modules/translation"31 "code.gitea.io/gitea/modules/translation"
@@ -255,7 +256,7 @@ func TestCantMergeConflict(t *testing.T) { · 224 unmodified lines
255 BaseBranch: "base",256 BaseBranch: "base",
256 })257 })
257 258
258 gitRepo, err := git.OpenRepository(git.DefaultContext, repo_model.RepoPath(user1.Name, repo1.Name))259 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo1)
259 assert.NoError(t, err)260 assert.NoError(t, err)
260 261
261 err = pull.Merge(context.Background(), pr, user1, gitRepo, repo_model.MergeStyleMerge, "", "CONFLICT", false)262 err = pull.Merge(context.Background(), pr, user1, gitRepo, repo_model.MergeStyleMerge, "", "CONFLICT", false)
@@ -348,7 +349,7 @@ func TestCantMergeUnrelated(t *testing.T) { · 86 unmodified lines
348 session.MakeRequest(t, req, http.StatusCreated)349 session.MakeRequest(t, req, http.StatusCreated)
349 350
350 // Now this PR could be marked conflict - or at least a race may occur - so drop down to pure code at this point...351 // Now this PR could be marked conflict - or at least a race may occur - so drop down to pure code at this point...
351 gitRepo, err := git.OpenRepository(git.DefaultContext, path)352 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo1)
352 assert.NoError(t, err)353 assert.NoError(t, err)
353 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{354 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{
354 HeadRepoID: repo1.ID,355 HeadRepoID: repo1.ID,
tests/integration/repofiles_change_test.go+5−4
@@ -14,6 +14,7 @@ import ( · 13 unmodified lines
14 "code.gitea.io/gitea/models/unittest"14 "code.gitea.io/gitea/models/unittest"
15 "code.gitea.io/gitea/modules/contexttest"15 "code.gitea.io/gitea/modules/contexttest"
16 "code.gitea.io/gitea/modules/git"16 "code.gitea.io/gitea/modules/git"
17 "code.gitea.io/gitea/modules/gitrepo"
17 "code.gitea.io/gitea/modules/setting"18 "code.gitea.io/gitea/modules/setting"
18 api "code.gitea.io/gitea/modules/structs"19 api "code.gitea.io/gitea/modules/structs"
19 files_service "code.gitea.io/gitea/services/repository/files"20 files_service "code.gitea.io/gitea/services/repository/files"
@@ -262,7 +263,7 @@ func TestChangeRepoFilesForCreate(t *testing.T) { · 242 unmodified lines
262 263
263 // asserts264 // asserts
264 assert.NoError(t, err)265 assert.NoError(t, err)
265 gitRepo, _ := git.OpenRepository(git.DefaultContext, repo.RepoPath())266 gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
266 defer gitRepo.Close()267 defer gitRepo.Close()
267 268
268 commitID, _ := gitRepo.GetBranchCommitID(opts.NewBranch)269 commitID, _ := gitRepo.GetBranchCommitID(opts.NewBranch)
@@ -299,7 +300,7 @@ func TestChangeRepoFilesForUpdate(t *testing.T) { · 30 unmodified lines
299 300
300 // asserts301 // asserts
301 assert.NoError(t, err)302 assert.NoError(t, err)
302 gitRepo, _ := git.OpenRepository(git.DefaultContext, repo.RepoPath())303 gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
303 defer gitRepo.Close()304 defer gitRepo.Close()
304 305
305 commit, _ := gitRepo.GetBranchCommit(opts.NewBranch)306 commit, _ := gitRepo.GetBranchCommit(opts.NewBranch)
@@ -335,7 +336,7 @@ func TestChangeRepoFilesForUpdateWithFileMove(t *testing.T) { · 29 unmodified lines
335 336
336 // asserts337 // asserts
337 assert.NoError(t, err)338 assert.NoError(t, err)
338 gitRepo, _ := git.OpenRepository(git.DefaultContext, repo.RepoPath())339 gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
339 defer gitRepo.Close()340 defer gitRepo.Close()
340 341
341 commit, _ := gitRepo.GetBranchCommit(opts.NewBranch)342 commit, _ := gitRepo.GetBranchCommit(opts.NewBranch)
@@ -386,7 +387,7 @@ func TestChangeRepoFilesWithoutBranchNames(t *testing.T) { · 44 unmodified lines
386 387
387 // asserts388 // asserts
388 assert.NoError(t, err)389 assert.NoError(t, err)
389 gitRepo, _ := git.OpenRepository(git.DefaultContext, repo.RepoPath())390 gitRepo, _ := gitrepo.OpenRepository(git.DefaultContext, repo)
390 defer gitRepo.Close()391 defer gitRepo.Close()
391 392
392 commit, _ := gitRepo.GetBranchCommit(repo.DefaultBranch)393 commit, _ := gitRepo.GetBranchCommit(repo.DefaultBranch)