mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 06:01:30 +00:00 
			
		
		
		
	@@ -245,6 +245,8 @@ func (sr StorageRepo) RelativePath() string {
 | 
				
			|||||||
	return string(sr)
 | 
						return string(sr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 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 {
 | 
					func (repo *Repository) WikiStorageRepo() StorageRepo {
 | 
				
			||||||
	return StorageRepo(RelativeWikiPath(repo.OwnerName, repo.Name))
 | 
						return StorageRepo(RelativeWikiPath(repo.OwnerName, repo.Name))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								modules/gitrepo/fsck.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								modules/gitrepo/fsck.go
									
									
									
									
									
										Normal file
									
								
							@@ -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)})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -82,3 +82,7 @@ func RenameRepository(ctx context.Context, repo, newRepo Repository) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func InitRepository(ctx context.Context, repo Repository, objectFormatName string) error {
 | 
				
			||||||
 | 
						return git.InitRepository(ctx, repoPath(repo), true, objectFormatName)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -236,6 +236,7 @@ func TestGiteaUploadUpdateGitForPullRequest(t *testing.T) {
 | 
				
			|||||||
	//
 | 
						//
 | 
				
			||||||
	fromRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
 | 
						fromRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
 | 
				
			||||||
	baseRef := "master"
 | 
						baseRef := "master"
 | 
				
			||||||
 | 
						// 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(t.Context(), fromRepo.RepoPath(), false, fromRepo.ObjectFormatName))
 | 
						assert.NoError(t, git.InitRepository(t.Context(), fromRepo.RepoPath(), false, fromRepo.ObjectFormatName))
 | 
				
			||||||
	err := git.NewCommand("symbolic-ref").AddDynamicArguments("HEAD", git.BranchPrefix+baseRef).Run(t.Context(), &git.RunOpts{Dir: fromRepo.RepoPath()})
 | 
						err := git.NewCommand("symbolic-ref").AddDynamicArguments("HEAD", git.BranchPrefix+baseRef).Run(t.Context(), &git.RunOpts{Dir: fromRepo.RepoPath()})
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ import (
 | 
				
			|||||||
	system_model "code.gitea.io/gitea/models/system"
 | 
						system_model "code.gitea.io/gitea/models/system"
 | 
				
			||||||
	user_model "code.gitea.io/gitea/models/user"
 | 
						user_model "code.gitea.io/gitea/models/user"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/gitrepo"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	repo_module "code.gitea.io/gitea/modules/repository"
 | 
						repo_module "code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"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.
 | 
					// 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 {
 | 
					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)
 | 
						log.Trace("Running health check on repository %-v", repo.FullName())
 | 
				
			||||||
	repoPath := repo.RepoPath()
 | 
						if err := gitrepo.Fsck(ctx, repo, timeout, args); err != nil {
 | 
				
			||||||
	if err := git.Fsck(ctx, repoPath, timeout, args); err != nil {
 | 
							log.Warn("Failed to health check repository (%-v): %v", repo.FullName(), err)
 | 
				
			||||||
		log.Warn("Failed to health check repository (%-v): %v", repo, err)
 | 
					 | 
				
			||||||
		if err = system_model.CreateRepositoryNotice("Failed to health check repository (%s): %v", repo.FullName(), err); err != nil {
 | 
							if err = system_model.CreateRepositoryNotice("Failed to health check repository (%s): %v", repo.FullName(), err); err != nil {
 | 
				
			||||||
			log.Error("CreateRepositoryNotice: %v", err)
 | 
								log.Error("CreateRepositoryNotice: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -190,7 +190,7 @@ func ReinitMissingRepositories(ctx context.Context) error {
 | 
				
			|||||||
		default:
 | 
							default:
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		log.Trace("Initializing %d/%d...", repo.OwnerID, repo.ID)
 | 
							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, repo.ObjectFormatName); err != nil {
 | 
				
			||||||
			log.Error("Unable (re)initialize repository %d at %s. Error: %v", repo.ID, repo.RepoPath(), err)
 | 
								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 {
 | 
								if err2 := system_model.CreateRepositoryNotice("InitRepository [%d]: %v", repo.ID, err); err2 != nil {
 | 
				
			||||||
				log.Error("CreateRepositoryNotice: %v", err2)
 | 
									log.Error("CreateRepositoryNotice: %v", err2)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,7 +142,7 @@ func prepareRepoCommit(ctx context.Context, repo *repo_model.Repository, tmpDir
 | 
				
			|||||||
// InitRepository initializes README and .gitignore if needed.
 | 
					// InitRepository initializes README and .gitignore if needed.
 | 
				
			||||||
func initRepository(ctx context.Context, u *user_model.User, repo *repo_model.Repository, opts CreateRepoOptions) (err error) {
 | 
					func initRepository(ctx context.Context, u *user_model.User, repo *repo_model.Repository, opts CreateRepoOptions) (err error) {
 | 
				
			||||||
	// Init git bare new repository.
 | 
						// Init git bare new repository.
 | 
				
			||||||
	if err = git.InitRepository(ctx, repo.RepoPath(), true, repo.ObjectFormatName); err != nil {
 | 
						if err = gitrepo.InitRepository(ctx, repo, repo.ObjectFormatName); err != nil {
 | 
				
			||||||
		return fmt.Errorf("git.InitRepository: %w", err)
 | 
							return fmt.Errorf("git.InitRepository: %w", err)
 | 
				
			||||||
	} else if err = gitrepo.CreateDelegateHooks(ctx, repo); err != nil {
 | 
						} else if err = gitrepo.CreateDelegateHooks(ctx, repo); err != nil {
 | 
				
			||||||
		return fmt.Errorf("createDelegateHooks: %w", err)
 | 
							return fmt.Errorf("createDelegateHooks: %w", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,6 @@ import (
 | 
				
			|||||||
	issues_model "code.gitea.io/gitea/models/issues"
 | 
						issues_model "code.gitea.io/gitea/models/issues"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
	user_model "code.gitea.io/gitea/models/user"
 | 
						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/gitrepo"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	notify_service "code.gitea.io/gitea/services/notify"
 | 
						notify_service "code.gitea.io/gitea/services/notify"
 | 
				
			||||||
@@ -122,7 +121,7 @@ func GenerateRepository(ctx context.Context, doer, owner *user_model.User, templ
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 3 -Init git bare new repository.
 | 
						// 3 -Init git bare new repository.
 | 
				
			||||||
	if err = git.InitRepository(ctx, generateRepo.RepoPath(), true, generateRepo.ObjectFormatName); err != nil {
 | 
						if err = gitrepo.InitRepository(ctx, generateRepo, generateRepo.ObjectFormatName); err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("git.InitRepository: %w", err)
 | 
							return nil, fmt.Errorf("git.InitRepository: %w", err)
 | 
				
			||||||
	} else if err = gitrepo.CreateDelegateHooks(ctx, generateRepo); err != nil {
 | 
						} else if err = gitrepo.CreateDelegateHooks(ctx, generateRepo); err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("createDelegateHooks: %w", err)
 | 
							return nil, fmt.Errorf("createDelegateHooks: %w", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,7 +43,8 @@ func InitWiki(ctx context.Context, repo *repo_model.Repository) error {
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := git.InitRepository(ctx, repo.WikiPath(), true, repo.ObjectFormatName); err != nil {
 | 
						// wiki's object format should be the same as repository's
 | 
				
			||||||
 | 
						if err := gitrepo.InitRepository(ctx, repo.WikiStorageRepo(), repo.ObjectFormatName); err != nil {
 | 
				
			||||||
		return fmt.Errorf("InitRepository: %w", err)
 | 
							return fmt.Errorf("InitRepository: %w", err)
 | 
				
			||||||
	} else if err = gitrepo.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil {
 | 
						} else if err = gitrepo.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil {
 | 
				
			||||||
		return fmt.Errorf("createDelegateHooks: %w", err)
 | 
							return fmt.Errorf("createDelegateHooks: %w", err)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user