blob.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package repo
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. "github.com/gogs/git-module"
  6. "gogs.io/gogs/internal/context"
  7. "gogs.io/gogs/internal/gitutil"
  8. "gogs.io/gogs/internal/repoutil"
  9. )
  10. func RepoGitBlob(c *context.APIContext) {
  11. gitRepo, err := git.Open(repoutil.RepositoryPath(c.Params(":username"), c.Params(":reponame")))
  12. if err != nil {
  13. c.Error(err, "open repository")
  14. return
  15. }
  16. sha := c.Params(":sha")
  17. blob, err := gitRepo.CatFileBlob(sha)
  18. if err != nil {
  19. c.NotFoundOrError(gitutil.NewError(err), "get blob")
  20. return
  21. }
  22. type repoGitBlob struct {
  23. Content string `json:"content"`
  24. Encoding string `json:"encoding"`
  25. URL string `json:"url"`
  26. SHA string `json:"sha"`
  27. Size int64 `json:"size"`
  28. }
  29. content, err := blob.Blob().Bytes()
  30. if err != nil {
  31. c.NotFoundOrError(gitutil.NewError(err), "get blob content")
  32. return
  33. }
  34. c.JSONSuccess(&repoGitBlob{
  35. Content: base64.StdEncoding.EncodeToString(content),
  36. Encoding: "base64",
  37. URL: fmt.Sprintf("%s/repos/%s/%s/git/blobs/%s", c.BaseURL, c.Params(":username"), c.Params(":reponame"), sha),
  38. SHA: sha,
  39. Size: blob.Size(),
  40. })
  41. }