2022-05-14 17:54:35 +00:00
package fs
2022-05-13 14:21:47 +00:00
import (
2023-06-05 15:41:30 +00:00
"io/fs"
"sort"
"time"
2022-05-13 14:21:47 +00:00
2023-06-05 15:41:30 +00:00
"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/libs/cmdio"
2022-05-13 14:21:47 +00:00
"github.com/spf13/cobra"
)
2023-06-05 15:41:30 +00:00
type jsonDirEntry struct {
Name string ` json:"name" `
IsDir bool ` json:"is_directory" `
Size int64 ` json:"size" `
ModTime time . Time ` json:"last_modified" `
}
func toJsonDirEntry ( f fs . DirEntry ) ( * jsonDirEntry , error ) {
info , err := f . Info ( )
if err != nil {
return nil , err
}
return & jsonDirEntry {
Name : f . Name ( ) ,
IsDir : f . IsDir ( ) ,
Size : info . Size ( ) ,
ModTime : info . ModTime ( ) ,
} , nil
}
2022-05-13 14:21:47 +00:00
// lsCmd represents the ls command
var lsCmd = & cobra . Command {
2023-06-05 15:41:30 +00:00
Use : "ls DIR_PATH" ,
Short : "Lists files" ,
Long : ` Lists files ` ,
Args : cobra . ExactArgs ( 1 ) ,
PreRunE : root . MustWorkspaceClient ,
2022-09-16 09:06:58 +00:00
2023-04-11 14:59:27 +00:00
RunE : func ( cmd * cobra . Command , args [ ] string ) error {
2023-06-05 15:41:30 +00:00
ctx := cmd . Context ( )
2023-06-16 15:09:08 +00:00
f , path , err := filerForPath ( ctx , args [ 0 ] )
2023-06-05 15:41:30 +00:00
if err != nil {
return err
}
entries , err := f . ReadDir ( ctx , path )
if err != nil {
return err
}
jsonDirEntries := make ( [ ] jsonDirEntry , len ( entries ) )
for i , entry := range entries {
jsonDirEntry , err := toJsonDirEntry ( entry )
if err != nil {
return err
}
jsonDirEntries [ i ] = * jsonDirEntry
}
sort . Slice ( jsonDirEntries , func ( i , j int ) bool {
return jsonDirEntries [ i ] . Name < jsonDirEntries [ j ] . Name
} )
// Use template for long mode if the flag is set
if longMode {
return cmdio . RenderWithTemplate ( ctx , jsonDirEntries , cmdio . Heredoc ( `
{ { range . } } { { if . IsDir } } DIRECTORY { { else } } FILE { { end } } { { . Size } } { { . ModTime | pretty_date } } { { . Name } }
{ { end } }
` ) )
}
return cmdio . RenderWithTemplate ( ctx , jsonDirEntries , cmdio . Heredoc ( `
{ { range . } } { { . Name } }
{ { end } }
` ) )
2022-05-13 14:21:47 +00:00
} ,
}
2023-06-05 15:41:30 +00:00
var longMode bool
2022-05-13 14:21:47 +00:00
func init ( ) {
2023-06-05 15:41:30 +00:00
lsCmd . Flags ( ) . BoolVarP ( & longMode , "long" , "l" , false , "Displays full information including size, file type and modification time since Epoch in milliseconds." )
2022-05-13 14:21:47 +00:00
fsCmd . AddCommand ( lsCmd )
}