mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Adds an API POST endpoint under `/repos/{owner}/{repo}/file-contents`
which receives a list of paths and returns a list of the contents of
these files.
This API endpoint will be helpful for applications like headless CMS
(reference: https://github.com/sveltia/sveltia-cms/issues/198) which
need to retrieve a large number of files by reducing the amount of
needed API calls.
Close #33495
---------
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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
 | 
						|
}
 |