Skip to content

Commit

Permalink
Fix lakectl upload from standard input (#7984)
Browse files Browse the repository at this point in the history
  • Loading branch information
guy-har authored Jul 14, 2024
1 parent 3b9b498 commit d83f980
Showing 2 changed files with 19 additions and 8 deletions.
18 changes: 12 additions & 6 deletions cmd/lakectl/cmd/fs_upload.go
Original file line number Diff line number Diff line change
@@ -33,12 +33,7 @@ var fsUploadCmd = &cobra.Command{
ctx, stop := signal.NotifyContext(ctx, os.Interrupt, os.Kill)
defer stop()

stat, err := os.Stat(source)
if err != nil {
Die("failed to stat source", 1)
}

if !recursive || !stat.IsDir() { // Ignore recursive if source is a file and not a directory
if !recursive || isFileOrStdin(source) {
if strings.HasSuffix(remotePath, uri.PathSeparator) {
Die("target path is not a valid URI", 1)
}
@@ -85,6 +80,17 @@ var fsUploadCmd = &cobra.Command{
},
}

func isFileOrStdin(source string) bool {
if source == StdinFileName {
return true
}
stat, err := os.Stat(source)
if err != nil {
Die("failed to stat source", 1)
}
return !stat.IsDir()
}

func upload(ctx context.Context, client apigen.ClientWithResponsesInterface, sourcePathname string, destURI *uri.URI, contentType string, syncFlags local.SyncFlags) (*apigen.ObjectStats, error) {
fp := Must(OpenByPath(sourcePathname))
defer func() {
9 changes: 7 additions & 2 deletions esti/lakectl_test.go
Original file line number Diff line number Diff line change
@@ -112,8 +112,13 @@ func TestLakectlPreSignUpload(t *testing.T) {
RunCmdAndVerifySuccessWithFile(t, Lakectl()+" log lakefs://"+repoName+"/"+mainBranch, false, "lakectl_log_initial", vars)

filePath := "ro_1k.1"
vars["FILE_PATH"] = filePath
RunCmdAndVerifySuccessWithFile(t, Lakectl()+" fs upload -s files/ro_1k lakefs://"+repoName+"/"+mainBranch+"/"+filePath+" --pre-sign", false, "lakectl_fs_upload", vars)
t.Run("upload from file", func(t *testing.T) {
vars["FILE_PATH"] = filePath
RunCmdAndVerifySuccessWithFile(t, Lakectl()+" fs upload -s files/ro_1k lakefs://"+repoName+"/"+mainBranch+"/"+filePath+" --pre-sign", false, "lakectl_fs_upload", vars)
})
t.Run("upload from stdin", func(t *testing.T) {
RunCmdAndVerifySuccessWithFile(t, "cat files/ro_1k | "+Lakectl()+" fs upload -s - lakefs://"+repoName+"/"+mainBranch+"/"+filePath+" --pre-sign", false, "lakectl_fs_upload", vars)
})
}

func TestLakectlCommit(t *testing.T) {

0 comments on commit d83f980

Please sign in to comment.