AT Protocol IPLD-CAR Repository toolkit (CLI)
at main 964 B view raw
1package engine 2 3import ( 4 "fmt" 5 "io" 6 "log" 7 "os" 8 "path/filepath" 9 "syscall" 10 11 "github.com/atscan/atr/cli" 12 "github.com/atscan/atr/repo" 13) 14 15func WalkFiles(ctx *cli.Context, cb func(repo.RepoSnapshot, error)) error { 16 wd := ctx.WorkingDir 17 if wd != "." { 18 syscall.Chdir(wd) 19 } 20 21 dir := "." 22 if len(ctx.Args) > 0 { 23 dir = ctx.Args[0] 24 } 25 if dir == "" { 26 dir = "." 27 } 28 info, err := os.Stat(dir) 29 if err != nil { 30 fmt.Println(err) 31 return err 32 } 33 if !info.IsDir() { 34 cb(Load(ctx, dir)) 35 return nil 36 } 37 err = filepath.Walk(dir, 38 func(fn string, info os.FileInfo, err error) error { 39 if err != nil { 40 return err 41 } 42 cb(Load(ctx, fn)) 43 return nil 44 }) 45 if err != nil { 46 log.Println(err) 47 } 48 return nil 49} 50 51func WalkStream(ctx *cli.Context, input io.Reader, cb func(repo.RepoSnapshot, error)) error { 52 ss, err := LoadFromStream(ctx, input, -1) 53 if err != nil { 54 log.Println("Cannot load from stream:", err) 55 return nil 56 } 57 cb(ss, nil) 58 return nil 59}