mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-02 20:06:06 +01:00 
			
		
		
		
	* Move last commit cache back into modules/git Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from the interface for last commit cache Signed-off-by: Andrew Thornton <art27@cantab.net> * move cacheref to last_commit_cache Signed-off-by: Andrew Thornton <art27@cantab.net> * Remove go-git from routers/private/hook Signed-off-by: Andrew Thornton <art27@cantab.net> * Move FindLFSFiles to pipeline Signed-off-by: Andrew Thornton <art27@cantab.net> * Make no-go-git variants Signed-off-by: Andrew Thornton <art27@cantab.net> * Submodule RefID Signed-off-by: Andrew Thornton <art27@cantab.net> * fix issue with GetCommitsInfo Signed-off-by: Andrew Thornton <art27@cantab.net> * fix GetLastCommitForPaths Signed-off-by: Andrew Thornton <art27@cantab.net> * Improve efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * More efficiency Signed-off-by: Andrew Thornton <art27@cantab.net> * even faster Signed-off-by: Andrew Thornton <art27@cantab.net> * Reduce duplication * As per @lunny Signed-off-by: Andrew Thornton <art27@cantab.net> * attempt to fix drone Signed-off-by: Andrew Thornton <art27@cantab.net> * fix test-tags Signed-off-by: Andrew Thornton <art27@cantab.net> * default to use no-go-git variants and add gogit build tag Signed-off-by: Andrew Thornton <art27@cantab.net> * placate lint Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @6543 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2015 The Gogs Authors. All rights reserved.
 | 
						|
// Copyright 2017 The Gitea Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
// +build gogit
 | 
						|
 | 
						|
package git
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"path/filepath"
 | 
						|
 | 
						|
	gitealog "code.gitea.io/gitea/modules/log"
 | 
						|
	"github.com/go-git/go-billy/v5/osfs"
 | 
						|
	gogit "github.com/go-git/go-git/v5"
 | 
						|
	"github.com/go-git/go-git/v5/plumbing/cache"
 | 
						|
	"github.com/go-git/go-git/v5/storage/filesystem"
 | 
						|
)
 | 
						|
 | 
						|
// Repository represents a Git repository.
 | 
						|
type Repository struct {
 | 
						|
	Path string
 | 
						|
 | 
						|
	tagCache *ObjectCache
 | 
						|
 | 
						|
	gogitRepo    *gogit.Repository
 | 
						|
	gogitStorage *filesystem.Storage
 | 
						|
	gpgSettings  *GPGSettings
 | 
						|
}
 | 
						|
 | 
						|
// OpenRepository opens the repository at the given path.
 | 
						|
func OpenRepository(repoPath string) (*Repository, error) {
 | 
						|
	repoPath, err := filepath.Abs(repoPath)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	} else if !isDir(repoPath) {
 | 
						|
		return nil, errors.New("no such file or directory")
 | 
						|
	}
 | 
						|
 | 
						|
	fs := osfs.New(repoPath)
 | 
						|
	_, err = fs.Stat(".git")
 | 
						|
	if err == nil {
 | 
						|
		fs, err = fs.Chroot(".git")
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
	}
 | 
						|
	storage := filesystem.NewStorageWithOptions(fs, cache.NewObjectLRUDefault(), filesystem.Options{KeepDescriptors: true})
 | 
						|
	gogitRepo, err := gogit.Open(storage, fs)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	return &Repository{
 | 
						|
		Path:         repoPath,
 | 
						|
		gogitRepo:    gogitRepo,
 | 
						|
		gogitStorage: storage,
 | 
						|
		tagCache:     newObjectCache(),
 | 
						|
	}, nil
 | 
						|
}
 | 
						|
 | 
						|
// Close this repository, in particular close the underlying gogitStorage if this is not nil
 | 
						|
func (repo *Repository) Close() {
 | 
						|
	if repo == nil || repo.gogitStorage == nil {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	if err := repo.gogitStorage.Close(); err != nil {
 | 
						|
		gitealog.Error("Error closing storage: %v", err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// GoGitRepo gets the go-git repo representation
 | 
						|
func (repo *Repository) GoGitRepo() *gogit.Repository {
 | 
						|
	return repo.gogitRepo
 | 
						|
}
 |