Update vendor dependencies

This commit is contained in:
Nick Craig-Wood 2016-11-19 10:03:41 +00:00
parent 8118623680
commit 00af021abb
247 changed files with 45514 additions and 11689 deletions

View file

@ -11,6 +11,7 @@ import (
"errors"
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"net/url"
@ -612,9 +613,20 @@ func (f *Folder) WalkNodes(names ...string) (*Node, []*http.Response, error) {
// Put stores the data read from in at path as name on the Amazon Cloud Drive.
// Errors if the file already exists on the drive.
func (s *NodesService) putOrOverwrite(in io.Reader, httpVerb, url, name, metadata string) (*File, *http.Response, error) {
var bodyReader io.Reader
bodyReader, bodyWriter := io.Pipe()
writer := multipart.NewWriter(bodyWriter)
contentType := writer.FormDataContentType()
contentLength := int64(-1)
buf := make([]byte, 1)
n, err := io.ReadFull(in, buf)
isZeroLength := err == io.EOF
if !isZeroLength && err != nil {
return nil, nil, err
}
in = io.MultiReader(bytes.NewReader(buf[:n]), in)
errChan := make(chan error, 1)
go func() {
@ -641,11 +653,21 @@ func (s *NodesService) putOrOverwrite(in io.Reader, httpVerb, url, name, metadat
errChan <- writer.Close()
}()
if isZeroLength {
buf, err := ioutil.ReadAll(bodyReader)
if err != nil {
return nil, nil, err
}
bodyReader = bytes.NewReader(buf)
contentLength = int64(len(buf))
}
req, err := s.client.NewContentRequest(httpVerb, url, bodyReader)
if err != nil {
return nil, nil, err
}
req.ContentLength = contentLength
req.Header.Add("Content-Type", contentType)
file := &File{&Node{service: s}}
@ -654,63 +676,11 @@ func (s *NodesService) putOrOverwrite(in io.Reader, httpVerb, url, name, metadat
return nil, resp, err
}
err = <-errChan
if err != nil {
return nil, resp, err
}
return file, resp, err
}
// Put stores the data read from in at path as name on the Amazon Cloud Drive.
// Errors if the file already exists on the drive.
func (s *NodesService) putOrOverwriteSized(in io.Reader, fileSize int64, httpVerb, url, name, metadata string) (*File, *http.Response, error) {
var err error
bodyBuf := bytes.NewBufferString("")
bodyWriter := multipart.NewWriter(bodyBuf)
// use the bodyWriter to write the Part headers to the buffer
if metadata != "" {
err = bodyWriter.WriteField("metadata", string(metadata))
if err != nil {
return nil, nil, err
}
}
_, err = bodyWriter.CreateFormFile("content", name)
if err != nil {
return nil, nil, err
}
// need to know the boundary to properly close the part myself.
boundary := bodyWriter.Boundary()
closeBuf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
// use multi-reader to defer the reading of the file data
// until writing to the socket buffer.
requestReader := io.MultiReader(bodyBuf, in, closeBuf)
req, err := s.client.NewContentRequest(httpVerb, url, requestReader)
if err != nil {
return nil, nil, err
}
// Set headers for multipart, and Content Length
req.Header.Add("Content-Type", "multipart/form-data; boundary="+boundary)
req.ContentLength = fileSize + int64(bodyBuf.Len()) + int64(closeBuf.Len())
file := &File{&Node{service: s}}
resp, err := s.client.Do(req, file)
if err != nil {
return nil, resp, err
}
return file, resp, err
}
// Put stores the data read from in at path as name on the Amazon Cloud Drive.
// Errors if the file already exists on the drive.
//
// Can't put file with 0 length file (works sometimes)
func (f *Folder) Put(in io.Reader, name string) (*File, *http.Response, error) {
metadata := createNode{
Name: name,
@ -725,8 +695,6 @@ func (f *Folder) Put(in io.Reader, name string) (*File, *http.Response, error) {
}
// Overwrite updates the file contents from in
//
// Can't overwrite with 0 length file (works sometimes)
func (f *File) Overwrite(in io.Reader) (*File, *http.Response, error) {
url := fmt.Sprintf("nodes/%s/content", *f.Id)
return f.service.putOrOverwrite(in, "PUT", url, *f.Name, "")
@ -734,23 +702,17 @@ func (f *File) Overwrite(in io.Reader) (*File, *http.Response, error) {
// PutSized stores the data read from in at path as name on the Amazon
// Cloud Drive. Errors if the file already exists on the drive.
func (f *Folder) PutSized(in io.Reader, size int64, name string) (*File, *http.Response, error) {
metadata := createNode{
Name: name,
Kind: "FILE",
Parents: []string{*f.Id},
}
metadataJSON, err := json.Marshal(&metadata)
if err != nil {
return nil, nil, err
}
return f.service.putOrOverwriteSized(in, size, "POST", "nodes?suppress=deduplication", name, string(metadataJSON))
//
// Deprecated: no longer needed - just use Put
func (f *Folder) PutSized(in io.Reader, _ int64, name string) (*File, *http.Response, error) {
return f.Put(in, name)
}
// OverwriteSized updates the file contents from in
func (f *File) OverwriteSized(in io.Reader, size int64) (*File, *http.Response, error) {
url := fmt.Sprintf("nodes/%s/content", *f.Id)
return f.service.putOrOverwriteSized(in, size, "PUT", url, *f.Name, "")
//
// Deprecated: no longer needed - just use Overwrite
func (f *File) OverwriteSized(in io.Reader, _ int64) (*File, *http.Response, error) {
return f.Overwrite(in)
}
// Upload stores the content of file at path as name on the Amazon Cloud Drive.