func PutFile(apiClient pfs.ApiClient, repoName string, commitID string, path string, offset int64, reader io.Reader) (_ int, retErr error) { putFileClient, err := apiClient.PutFile(context.Background()) if err != nil { return 0, err } defer func() { if _, err := putFileClient.CloseAndRecv(); err != nil && retErr != nil { retErr = err } }() request := pfs.PutFileRequest{ File: &pfs.File{ Commit: &pfs.Commit{ Repo: &pfs.Repo{ Name: repoName, }, Id: commitID, }, Path: path, }, FileType: pfs.FileType_FILE_TYPE_REGULAR, OffsetBytes: offset, } var size int for { value := make([]byte, chunkSize) iSize, err := reader.Read(value) request.Value = value[0:iSize] if err != nil { if err == io.EOF { break } return 0, err } size += iSize protolog.Printf("pfsutil.PutFile Send(%+v)", request) if err := putFileClient.Send(&request); err != nil { return 0, err } } if err != nil && err != io.EOF { return 0, err } return size, err }
func PutFile(apiClient pfs.APIClient, repoName string, commitID string, path string, offset int64, reader io.Reader) (_ int, retErr error) { putFileClient, err := apiClient.PutFile(context.Background()) if err != nil { return 0, err } defer func() { if _, err := putFileClient.CloseAndRecv(); err != nil && retErr == nil { retErr = err } }() request := pfs.PutFileRequest{ File: NewFile(repoName, commitID, path), FileType: pfs.FileType_FILE_TYPE_REGULAR, OffsetBytes: offset, } var size int eof := false for !eof { value := make([]byte, chunkSize) iSize, err := reader.Read(value) if err != nil && err != io.EOF { return 0, err } if err == io.EOF { eof = true } request.Value = value[0:iSize] size += iSize if err := putFileClient.Send(&request); err != nil { return 0, err } } if err != nil && err != io.EOF { return 0, err } return size, err }