git-lfs/client/client.go

77 lines
1.4 KiB
Go
Raw Normal View History

2013-10-04 17:09:03 +00:00
package gitmediaclient
import (
"encoding/json"
2013-10-04 17:09:03 +00:00
"fmt"
"io"
2013-10-04 17:09:03 +00:00
"net/http"
"os"
"path/filepath"
)
func Put(filename string) error {
2013-10-04 17:09:03 +00:00
sha := filepath.Base(filename)
file, err := os.Open(filename)
if err != nil {
return err
}
req, err := http.NewRequest("PUT", objectUrl(sha), file)
2013-10-04 17:09:03 +00:00
if err != nil {
return err
}
res, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer res.Body.Close()
if res.StatusCode > 299 {
apierr := &Error{}
dec := json.NewDecoder(res.Body)
if err = dec.Decode(apierr); err != nil {
return err
}
return apierr
}
2013-10-04 17:09:03 +00:00
fmt.Printf("Sending %s from %s: %d\n", sha, filename, res.StatusCode)
return nil
}
func Get(filename string) (io.ReadCloser, error) {
sha := filepath.Base(filename)
if stat, err := os.Stat(filename); err != nil || stat == nil {
req, err := http.NewRequest("GET", objectUrl(sha), nil)
if err != nil {
return nil, err
}
req.Header.Set("Accept", "application/vnd.git-media")
res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
fmt.Printf("Downloading %s: %d\n", sha, res.StatusCode)
return res.Body, nil
}
return os.Open(filename)
}
func objectUrl(sha string) string {
return "http://localhost:8080/objects/" + sha
}
type Error struct {
Message string `json:"message"`
RequestId string `json:"request_id,omitempty"`
}
func (e *Error) Error() string {
return e.Message
}