move readme fetching to api package

This commit is contained in:
vilmibm 2020-03-24 15:21:18 -05:00
parent 3459dfab95
commit 379ecdab54
2 changed files with 43 additions and 26 deletions

View file

@ -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")
}

View file

@ -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")