func MakeDirectory(apiClient pfs.APIClient, repoName string, commitID string, path string) (retErr error) { putFileClient, err := apiClient.PutFile(context.Background()) if err != nil { return err } defer func() { if _, err := putFileClient.CloseAndRecv(); err != nil && retErr == nil { retErr = err } }() return putFileClient.Send( &pfs.PutFileRequest{ File: &pfs.File{ Commit: &pfs.Commit{ Repo: &pfs.Repo{ Name: repoName, }, Id: commitID, }, Path: path, }, FileType: pfs.FileType_FILE_TYPE_DIR, }, ) }
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 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 }
// TODO: handle directories in filePathToContent func setupPFSInputCommit(t *testing.T, pfsAPIClient pfs.APIClient, repo *pfs.Repo, filePathToContent map[string][]byte) *pfs.Commit { commit, err := pfsAPIClient.StartCommit( context.Background(), &pfs.StartCommitRequest{ Parent: &pfs.Commit{ Repo: repo, Id: pfs.InitialCommitID, }, }, ) require.NoError(t, err) for filePath, content := range filePathToContent { apiPutFileClient, err := pfsAPIClient.PutFile( context.Background(), ) require.NoError(t, err) err = apiPutFileClient.Send( &pfs.PutFileRequest{ File: &pfs.File{ Commit: commit, Path: filePath, }, FileType: pfs.FileType_FILE_TYPE_REGULAR, Value: content, }, ) require.NoError(t, err) _, _ = apiPutFileClient.CloseAndRecv() } _, err = pfsAPIClient.FinishCommit( context.Background(), &pfs.FinishCommitRequest{ Commit: commit, }, ) require.NoError(t, err) return commit }