diff options
author | zeripath <art27@cantab.net> | 2021-06-20 23:39:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-21 00:39:12 +0200 |
commit | 196593e2e996aa4a59547629b870701f2b001d9b (patch) | |
tree | e9d5f63b07c54cdd74eecb53322b839abdfd979c /modules/git/repo_branch_gogit.go | |
parent | 23358bc55de67be132e3858a5d40f25dbdd0a769 (diff) | |
download | gitea-196593e2e996aa4a59547629b870701f2b001d9b.tar.gz gitea-196593e2e996aa4a59547629b870701f2b001d9b.zip |
More efficiently parse shas for shaPostProcessor (#16101)
* More efficiently parse shas for shaPostProcessor
The shaPostProcessor currently repeatedly calls git rev-parse --verify on both backends
which is fine if there is only one thing that matches a sha - however if there are
multiple things then this becomes wildly inefficient.
This PR provides functions for both backends which are much faster to use.
Fix #16092
* Add ShaExistCache to RenderContext
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: 6543 <6543@obermui.de>
Diffstat (limited to 'modules/git/repo_branch_gogit.go')
-rw-r--r-- | modules/git/repo_branch_gogit.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/modules/git/repo_branch_gogit.go b/modules/git/repo_branch_gogit.go index b00253f6ff..e8386b2dbd 100644 --- a/modules/git/repo_branch_gogit.go +++ b/modules/git/repo_branch_gogit.go @@ -13,6 +13,30 @@ import ( "github.com/go-git/go-git/v5/plumbing" ) +// IsObjectExist returns true if given reference exists in the repository. +func (repo *Repository) IsObjectExist(name string) bool { + if name == "" { + return false + } + + _, err := repo.gogitRepo.ResolveRevision(plumbing.Revision(name)) + + return err == nil +} + +// IsReferenceExist returns true if given reference exists in the repository. +func (repo *Repository) IsReferenceExist(name string) bool { + if name == "" { + return false + } + + reference, err := repo.gogitRepo.Reference(plumbing.ReferenceName(name), true) + if err != nil { + return false + } + return reference.Type() != plumbing.InvalidReference +} + // IsBranchExist returns true if given branch exists in current repository. func (repo *Repository) IsBranchExist(name string) bool { if name == "" { |