From 436e769aced316889e8269457e6949df8306a663 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 16 Mar 2025 10:53:14 -0700 Subject: [PATCH 1/5] Move some functions from package git to gitrepo --- models/repo/repo.go | 7 +++++++ modules/git/fsck.go | 14 -------------- modules/gitrepo/fsck.go | 16 ++++++++++++++++ modules/gitrepo/gitrepo.go | 9 +++++++++ modules/repository/init.go | 3 +-- services/migrations/gitea_uploader_test.go | 2 +- services/repository/check.go | 10 +++++----- services/wiki/wiki.go | 2 +- 8 files changed, 40 insertions(+), 23 deletions(-) delete mode 100644 modules/git/fsck.go create mode 100644 modules/gitrepo/fsck.go diff --git a/models/repo/repo.go b/models/repo/repo.go index 13473699f38d4..f3677b6335254 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -223,6 +223,13 @@ func (repo *Repository) GetOwnerName() string { return repo.OwnerName } +func (repo *Repository) GetObjectFormat() git.ObjectFormat { + if repo.ObjectFormatName == git.Sha256ObjectFormat.Name() { + return git.Sha256ObjectFormat + } + return git.Sha1ObjectFormat +} + // SanitizedOriginalURL returns a sanitized OriginalURL func (repo *Repository) SanitizedOriginalURL() string { if repo.OriginalURL == "" { diff --git a/modules/git/fsck.go b/modules/git/fsck.go deleted file mode 100644 index a52684c84fffe..0000000000000 --- a/modules/git/fsck.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2024 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package git - -import ( - "context" - "time" -) - -// Fsck verifies the connectivity and validity of the objects in the database -func Fsck(ctx context.Context, repoPath string, timeout time.Duration, args TrustedCmdArgs) error { - return NewCommand("fsck").AddArguments(args...).Run(ctx, &RunOpts{Timeout: timeout, Dir: repoPath}) -} diff --git a/modules/gitrepo/fsck.go b/modules/gitrepo/fsck.go new file mode 100644 index 0000000000000..bcec6aa03f1ec --- /dev/null +++ b/modules/gitrepo/fsck.go @@ -0,0 +1,16 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package gitrepo + +import ( + "context" + "time" + + "code.gitea.io/gitea/modules/git" +) + +// Fsck verifies the connectivity and validity of the objects in the database +func Fsck(ctx context.Context, repo Repository, timeout time.Duration, args git.TrustedCmdArgs) error { + return git.NewCommand("fsck").AddArguments(args...).Run(ctx, &git.RunOpts{Timeout: timeout, Dir: repoPath(repo)}) +} diff --git a/modules/gitrepo/gitrepo.go b/modules/gitrepo/gitrepo.go index 5e2ec9ed1edf6..906ec3aaf89fb 100644 --- a/modules/gitrepo/gitrepo.go +++ b/modules/gitrepo/gitrepo.go @@ -19,6 +19,7 @@ import ( type Repository interface { GetName() string GetOwnerName() string + GetObjectFormat() git.ObjectFormat } func absPath(owner, name string) string { @@ -93,3 +94,11 @@ func RenameRepository(ctx context.Context, repo Repository, newName string) erro } return nil } + +func InitRepository(ctx context.Context, repo Repository) error { + return git.InitRepository(ctx, repoPath(repo), true, repo.GetObjectFormat().Name()) +} + +func InitWikiRepository(ctx context.Context, repo Repository) error { + return git.InitRepository(ctx, wikiPath(repo), true, repo.GetObjectFormat().Name()) +} diff --git a/modules/repository/init.go b/modules/repository/init.go index 3fc1261baa5e0..6cbfa2af9a6dd 100644 --- a/modules/repository/init.go +++ b/modules/repository/init.go @@ -12,7 +12,6 @@ import ( issues_model "code.gitea.io/gitea/models/issues" repo_model "code.gitea.io/gitea/models/repo" - "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/label" "code.gitea.io/gitea/modules/log" @@ -136,7 +135,7 @@ func CheckInitRepository(ctx context.Context, repo *repo_model.Repository) (err } // Init git bare new repository. - if err = git.InitRepository(ctx, repo.RepoPath(), true, repo.ObjectFormatName); err != nil { + if err = gitrepo.InitRepository(ctx, repo); err != nil { return fmt.Errorf("git.InitRepository: %w", err) } else if err = gitrepo.CreateDelegateHooksForRepo(ctx, repo); err != nil { return fmt.Errorf("createDelegateHooks: %w", err) diff --git a/services/migrations/gitea_uploader_test.go b/services/migrations/gitea_uploader_test.go index f52d4157c8136..0c9d8769a36c9 100644 --- a/services/migrations/gitea_uploader_test.go +++ b/services/migrations/gitea_uploader_test.go @@ -236,7 +236,7 @@ func TestGiteaUploadUpdateGitForPullRequest(t *testing.T) { // fromRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) baseRef := "master" - assert.NoError(t, git.InitRepository(git.DefaultContext, fromRepo.RepoPath(), false, fromRepo.ObjectFormatName)) + assert.NoError(t, gitrepo.InitRepository(git.DefaultContext, fromRepo)) err := git.NewCommand("symbolic-ref").AddDynamicArguments("HEAD", git.BranchPrefix+baseRef).Run(git.DefaultContext, &git.RunOpts{Dir: fromRepo.RepoPath()}) assert.NoError(t, err) assert.NoError(t, os.WriteFile(filepath.Join(fromRepo.RepoPath(), "README.md"), []byte(fmt.Sprintf("# Testing Repository\n\nOriginally created in: %s", fromRepo.RepoPath())), 0o644)) diff --git a/services/repository/check.go b/services/repository/check.go index b475fbc487d29..46fb8ba616df6 100644 --- a/services/repository/check.go +++ b/services/repository/check.go @@ -14,6 +14,7 @@ import ( system_model "code.gitea.io/gitea/models/system" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/log" repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/util" @@ -47,10 +48,9 @@ func GitFsckRepos(ctx context.Context, timeout time.Duration, args git.TrustedCm // GitFsckRepo calls 'git fsck' to check an individual repository's health. func GitFsckRepo(ctx context.Context, repo *repo_model.Repository, timeout time.Duration, args git.TrustedCmdArgs) error { - log.Trace("Running health check on repository %-v", repo) - repoPath := repo.RepoPath() - if err := git.Fsck(ctx, repoPath, timeout, args); err != nil { - log.Warn("Failed to health check repository (%-v): %v", repo, err) + log.Trace("Running health check on repository %-v", repo.FullName()) + if err := gitrepo.Fsck(ctx, repo, timeout, args); err != nil { + log.Warn("Failed to health check repository (%-v): %v", repo.FullName(), err) if err = system_model.CreateRepositoryNotice("Failed to health check repository (%s): %v", repo.FullName(), err); err != nil { log.Error("CreateRepositoryNotice: %v", err) } @@ -190,7 +190,7 @@ func ReinitMissingRepositories(ctx context.Context) error { default: } log.Trace("Initializing %d/%d...", repo.OwnerID, repo.ID) - if err := git.InitRepository(ctx, repo.RepoPath(), true, repo.ObjectFormatName); err != nil { + if err := gitrepo.InitRepository(ctx, repo); err != nil { log.Error("Unable (re)initialize repository %d at %s. Error: %v", repo.ID, repo.RepoPath(), err) if err2 := system_model.CreateRepositoryNotice("InitRepository [%d]: %v", repo.ID, err); err2 != nil { log.Error("CreateRepositoryNotice: %v", err2) diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go index a3fe07927d9cd..73bd19888e982 100644 --- a/services/wiki/wiki.go +++ b/services/wiki/wiki.go @@ -39,7 +39,7 @@ func InitWiki(ctx context.Context, repo *repo_model.Repository) error { return nil } - if err := git.InitRepository(ctx, repo.WikiPath(), true, repo.ObjectFormatName); err != nil { + if err := gitrepo.InitWikiRepository(ctx, repo); err != nil { return fmt.Errorf("InitRepository: %w", err) } else if err = gitrepo.CreateDelegateHooksForWiki(ctx, repo); err != nil { return fmt.Errorf("createDelegateHooks: %w", err) From dbf1dddcca78f38c1cb9a98a7eb2d94eea6a891d Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 16 Mar 2025 11:23:35 -0700 Subject: [PATCH 2/5] Revert wrong change in test --- services/migrations/gitea_uploader_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/migrations/gitea_uploader_test.go b/services/migrations/gitea_uploader_test.go index 0c9d8769a36c9..d308e622530f1 100644 --- a/services/migrations/gitea_uploader_test.go +++ b/services/migrations/gitea_uploader_test.go @@ -236,7 +236,8 @@ func TestGiteaUploadUpdateGitForPullRequest(t *testing.T) { // fromRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) baseRef := "master" - assert.NoError(t, gitrepo.InitRepository(git.DefaultContext, fromRepo)) + // this is very different from the real situation. It should be a bare repository for all the Gitea managed repositories + assert.NoError(t, git.InitRepository(git.DefaultContext, fromRepo.RepoPath(), false, fromRepo.ObjectFormatName)) err := git.NewCommand("symbolic-ref").AddDynamicArguments("HEAD", git.BranchPrefix+baseRef).Run(git.DefaultContext, &git.RunOpts{Dir: fromRepo.RepoPath()}) assert.NoError(t, err) assert.NoError(t, os.WriteFile(filepath.Join(fromRepo.RepoPath(), "README.md"), []byte(fmt.Sprintf("# Testing Repository\n\nOriginally created in: %s", fromRepo.RepoPath())), 0o644)) From 0150ca0045b22a965082b7d01461c3ab6a9a51d5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 19 Mar 2025 11:27:35 -0700 Subject: [PATCH 3/5] add some comments --- models/repo/repo.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/models/repo/repo.go b/models/repo/repo.go index 40f0357e3a3de..a08d5ae0a08db 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -224,7 +224,7 @@ func (repo *Repository) GetRelativePath() string { return RelativePath(repo.OwnerName, repo.Name) } -// ObjectFormatName returns the object format name of the repository +// GetObjectFormatName returns the object format name of the repository func (repo *Repository) GetObjectFormatName() string { return repo.ObjectFormatName } @@ -234,11 +234,12 @@ type StorageRepo struct { ObjectFormatName string } -// RelativePath should be an unix style path like username/reponame.git +// GetRelativePath should be an unix style path like username/reponame.git func (sr StorageRepo) GetRelativePath() string { return sr.RelativePath } +// GetObjectFormatName returns the object format name of the repository func (sr StorageRepo) GetObjectFormatName() string { return sr.ObjectFormatName } From 1bbfff71edfe310a9d4fb58977dc57e46ddb892e Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 19 Mar 2025 11:28:35 -0700 Subject: [PATCH 4/5] add some comments --- models/repo/repo.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/models/repo/repo.go b/models/repo/repo.go index a08d5ae0a08db..4a41c8f49bd53 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -244,6 +244,8 @@ func (sr StorageRepo) GetObjectFormatName() string { return sr.ObjectFormatName } +// WikiStorageRepo returns the storage repo for the wiki +// The wiki repository should have the same object format as the code repository func (repo *Repository) WikiStorageRepo() StorageRepo { return StorageRepo{ RelativePath: strings.ToLower(repo.OwnerName) + "/" + strings.ToLower(repo.Name) + ".wiki.git", From 6b822551b5731e6bab12224237c342ae5fc8f16f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 19 Mar 2025 11:30:24 -0700 Subject: [PATCH 5/5] Remove unnecessary change --- models/repo/repo.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/models/repo/repo.go b/models/repo/repo.go index 4a41c8f49bd53..6880dedfe5873 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -253,13 +253,6 @@ func (repo *Repository) WikiStorageRepo() StorageRepo { } } -func (repo *Repository) GetObjectFormat() git.ObjectFormat { - if repo.ObjectFormatName == git.Sha256ObjectFormat.Name() { - return git.Sha256ObjectFormat - } - return git.Sha1ObjectFormat -} - // SanitizedOriginalURL returns a sanitized OriginalURL func (repo *Repository) SanitizedOriginalURL() string { if repo.OriginalURL == "" {