| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright 2021 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package utils
-
- import (
- "errors"
-
- 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/reqctx"
- "code.gitea.io/gitea/services/context"
- )
-
- type RefCommit struct {
- InputRef string
- RefName git.RefName
- Commit *git.Commit
- CommitID string
- }
-
- // ResolveRefCommit resolve ref to a commit if exist
- func ResolveRefCommit(ctx reqctx.RequestContext, repo *repo_model.Repository, inputRef string, minCommitIDLen ...int) (_ *RefCommit, err error) {
- gitRepo, err := gitrepo.RepositoryFromRequestContextOrOpen(ctx, repo)
- if err != nil {
- return nil, err
- }
- refCommit := RefCommit{InputRef: inputRef}
- if gitrepo.IsBranchExist(ctx, repo, inputRef) {
- refCommit.RefName = git.RefNameFromBranch(inputRef)
- } else if gitrepo.IsTagExist(ctx, repo, inputRef) {
- refCommit.RefName = git.RefNameFromTag(inputRef)
- } else if git.IsStringLikelyCommitID(git.ObjectFormatFromName(repo.ObjectFormatName), inputRef, minCommitIDLen...) {
- refCommit.RefName = git.RefNameFromCommit(inputRef)
- }
- if refCommit.RefName == "" {
- return nil, git.ErrNotExist{ID: inputRef}
- }
- if refCommit.Commit, err = gitRepo.GetCommit(refCommit.RefName.String()); err != nil {
- return nil, err
- }
- refCommit.CommitID = refCommit.Commit.ID.String()
- return &refCommit, nil
- }
-
- func NewRefCommit(refName git.RefName, commit *git.Commit) *RefCommit {
- return &RefCommit{InputRef: refName.ShortName(), RefName: refName, Commit: commit, CommitID: commit.ID.String()}
- }
-
- // GetGitRefs return git references based on filter
- func GetGitRefs(ctx *context.APIContext, filter string) ([]*git.Reference, string, error) {
- if ctx.Repo.GitRepo == nil {
- return nil, "", errors.New("no open git repo found in context")
- }
- if len(filter) > 0 {
- filter = "refs/" + filter
- }
- refs, err := ctx.Repo.GitRepo.GetRefsFiltered(filter)
- return refs, "GetRefsFiltered", err
- }
|