2013-10-04 17:09:03 +00:00
|
|
|
package gitmediaclient
|
|
|
|
|
|
|
|
import (
|
2013-10-31 19:00:09 +00:00
|
|
|
"encoding/json"
|
2013-10-04 17:09:03 +00:00
|
|
|
"fmt"
|
2013-10-22 18:21:01 +00:00
|
|
|
"io"
|
2013-10-04 17:09:03 +00:00
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
)
|
|
|
|
|
2013-10-22 18:11:11 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2013-10-22 18:21:01 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2013-10-31 19:00:09 +00:00
|
|
|
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
|
|
|
|
}
|
2013-10-22 18:21:01 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2013-10-31 19:00:09 +00:00
|
|
|
|
|
|
|
type Error struct {
|
|
|
|
Message string `json:"message"`
|
|
|
|
RequestId string `json:"request_id,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *Error) Error() string {
|
|
|
|
return e.Message
|
|
|
|
}
|