AT Protocol IPLD-CAR Repository toolkit (CLI)
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}