move readme fetching to api package
This commit is contained in:
parent
3459dfab95
commit
379ecdab54
2 changed files with 43 additions and 26 deletions
|
|
@ -2,6 +2,7 @@ package api
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
|
@ -9,6 +10,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/cli/cli/internal/ghrepo"
|
||||
"github.com/cli/cli/utils"
|
||||
)
|
||||
|
||||
// Repository contains information about a GitHub repo
|
||||
|
|
@ -281,3 +283,43 @@ func RepoCreate(client *Client, input RepoCreateInput) (*Repository, error) {
|
|||
|
||||
return &response.CreateRepository.Repository, nil
|
||||
}
|
||||
|
||||
func RepositoryReadme(client *Client, fullName string) (string, error) {
|
||||
type readmeResponse struct {
|
||||
Name string
|
||||
Content string
|
||||
}
|
||||
|
||||
var readme readmeResponse
|
||||
|
||||
err := client.REST("GET", fmt.Sprintf("repos/%s/readme", fullName), nil, &readme)
|
||||
if err != nil && !strings.HasSuffix(err.Error(), "'Not Found'") {
|
||||
return "", fmt.Errorf("could not get readme for repo: %w", err)
|
||||
}
|
||||
|
||||
decoded, err := base64.StdEncoding.DecodeString(readme.Content)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to decode readme: %w", err)
|
||||
}
|
||||
|
||||
readmeContent := string(decoded)
|
||||
|
||||
if isMarkdownFile(readme.Name) {
|
||||
readmeContent, err = utils.RenderMarkdown(readmeContent)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to render readme as markdown: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return readmeContent, nil
|
||||
|
||||
}
|
||||
|
||||
func isMarkdownFile(filename string) bool {
|
||||
// kind of gross, but i'm assuming that 90% of the time the suffix will just be .md. it didn't
|
||||
// seem worth executing a regex for this given that assumption.
|
||||
return strings.HasSuffix(filename, ".md") ||
|
||||
strings.HasSuffix(filename, ".markdown") ||
|
||||
strings.HasSuffix(filename, ".mdown") ||
|
||||
strings.HasSuffix(filename, ".mkdown")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package command
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
|
|
@ -450,31 +449,7 @@ func repoView(cmd *cobra.Command, args []string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
type readmeResponse struct {
|
||||
Name string
|
||||
Content string
|
||||
}
|
||||
|
||||
var readme readmeResponse
|
||||
|
||||
err = apiClient.REST("GET", fmt.Sprintf("repos/%s/readme", fullName), nil, &readme)
|
||||
if err != nil && !strings.HasSuffix(err.Error(), "'Not Found'") {
|
||||
return fmt.Errorf("could not get readme for repo: %w", err)
|
||||
}
|
||||
|
||||
decoded, err := base64.StdEncoding.DecodeString(readme.Content)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to decode readme: %w", err)
|
||||
}
|
||||
|
||||
readmeContent := string(decoded)
|
||||
|
||||
if strings.HasSuffix(readme.Name, ".md") {
|
||||
readmeContent, err = utils.RenderMarkdown(readmeContent)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to render readme as markdown: %w", err)
|
||||
}
|
||||
}
|
||||
readmeContent, err := api.RepositoryReadme(apiClient, fullName)
|
||||
|
||||
if readmeContent == "" {
|
||||
readmeContent = utils.Gray("No README provided")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue