// Copyright 2013 The go-github AUTHORS. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Repository contents API methods.
|
|
// http://developer.github.com/v3/repos/contents/
|
|
|
|
package github
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// RepositoryContent represents a file or directory in a github repository.
|
|
type RepositoryContent struct {
|
|
Type *string `json:"type,omitempty"`
|
|
Encoding *string `json:"encoding,omitempty"`
|
|
Size *int `json:"size,omitempty"`
|
|
Name *string `json:"name,omitempty"`
|
|
Path *string `json:"path,omitempty"`
|
|
Content *string `json:"content,omitempty"`
|
|
SHA *string `json:"sha,omitempty"`
|
|
URL *string `json:"url,omitempty"`
|
|
GitURL *string `json:"giturl,omitempty"`
|
|
HTMLURL *string `json:"htmlurl,omitempty"`
|
|
}
|
|
|
|
func (r RepositoryContent) String() string {
|
|
return Stringify(r)
|
|
}
|
|
|
|
// Decode decodes the file content if it is base64 encoded.
|
|
func (c *RepositoryContent) Decode() ([]byte, error) {
|
|
if *c.Encoding != "base64" {
|
|
return nil, errors.New("Cannot decode non-base64")
|
|
}
|
|
o, err := base64.StdEncoding.DecodeString(*c.Content)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return o, nil
|
|
}
|
|
|
|
// GetReadme gets the Readme file for the repository.
|
|
//
|
|
// GitHub API docs: http://developer.github.com/v3/repos/contents/#get-the-readme
|
|
func (s *RepositoriesService) GetReadme(owner, repo string) (*RepositoryContent, *Response, error) {
|
|
u := fmt.Sprintf("repos/%v/%v/readme", owner, repo)
|
|
req, err := s.client.NewRequest("GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
readme := new(RepositoryContent)
|
|
resp, err := s.client.Do(req, readme)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
return readme, resp, err
|
|
}
|