|
@@ -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(),
|
|
|
+ })
|
|
|
+}
|