|  | @@ -0,0 +1,49 @@
 | 
	
		
			
				|  |  | +package repo
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import (
 | 
	
		
			
				|  |  | +	"encoding/base64"
 | 
	
		
			
				|  |  | +	"fmt"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/gogs/git-module"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"gogs.io/gogs/internal/context"
 | 
	
		
			
				|  |  | +	"gogs.io/gogs/internal/gitutil"
 | 
	
		
			
				|  |  | +	"gogs.io/gogs/internal/repoutil"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func RepoGitBlob(c *context.APIContext) {
 | 
	
		
			
				|  |  | +	gitRepo, err := git.Open(repoutil.RepositoryPath(c.Params(":username"), c.Params(":reponame")))
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		c.Error(err, "open repository")
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	sha := c.Params(":sha")
 | 
	
		
			
				|  |  | +	blob, err := gitRepo.CatFileBlob(sha)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		c.NotFoundOrError(gitutil.NewError(err), "get blob")
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	type repoGitBlob struct {
 | 
	
		
			
				|  |  | +		Content  string `json:"content"`
 | 
	
		
			
				|  |  | +		Encoding string `json:"encoding"`
 | 
	
		
			
				|  |  | +		URL      string `json:"url"`
 | 
	
		
			
				|  |  | +		SHA      string `json:"sha"`
 | 
	
		
			
				|  |  | +		Size     int64  `json:"size"`
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	content, err := blob.Blob().Bytes()
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		c.NotFoundOrError(gitutil.NewError(err), "get blob content")
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	c.JSONSuccess(&repoGitBlob{
 | 
	
		
			
				|  |  | +		Content:  base64.StdEncoding.EncodeToString(content),
 | 
	
		
			
				|  |  | +		Encoding: "base64",
 | 
	
		
			
				|  |  | +		URL:      fmt.Sprintf("%s/repos/%s/%s/git/blobs/%s", c.BaseURL, c.Params(":username"), c.Params(":reponame"), sha),
 | 
	
		
			
				|  |  | +		SHA:      sha,
 | 
	
		
			
				|  |  | +		Size:     blob.Size(),
 | 
	
		
			
				|  |  | +	})
 | 
	
		
			
				|  |  | +}
 |