forked from TrueCloudLab/rclone
Update vendor dependencies
This commit is contained in:
parent
8118623680
commit
00af021abb
247 changed files with 45514 additions and 11689 deletions
98
vendor/github.com/ncw/go-acd/nodes.go
generated
vendored
98
vendor/github.com/ncw/go-acd/nodes.go
generated
vendored
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue