mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-28 10:04:49 +01: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
 | |
| }
 |