diff --git a/cmd/lotus-shed/fr32.go b/cmd/lotus-shed/fr32.go new file mode 100644 index 000000000..940717f74 --- /dev/null +++ b/cmd/lotus-shed/fr32.go @@ -0,0 +1,55 @@ +package main + +import ( + "io" + "os" + + "github.com/urfave/cli/v2" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/lotus/extern/sector-storage/fr32" +) + +var fr32Cmd = &cli.Command{ + Name: "fr32", + Description: "fr32 encode/decode", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "decode", + Aliases: []string{"d"}, + }, + }, + Action: func(context *cli.Context) error { + if context.Bool("decode") { + st, err := os.Stdin.Stat() + if err != nil { + return err + } + + pps := abi.PaddedPieceSize(st.Size()) + if pps == 0 { + return xerrors.Errorf("zero size input") + } + + if err := pps.Validate(); err != nil { + return err + } + + r, err := fr32.NewUnpadReader(os.Stdin, pps) + if err != nil { + return err + } + if _, err := io.Copy(os.Stdout, r); err != nil { + return err + } + return nil + } + + w := fr32.NewPadWriter(os.Stdout) + if _, err := io.Copy(w, os.Stdin); err != nil { + return err + } + return w.Close() + }, +} diff --git a/cmd/lotus-shed/main.go b/cmd/lotus-shed/main.go index e16007e77..074fad92a 100644 --- a/cmd/lotus-shed/main.go +++ b/cmd/lotus-shed/main.go @@ -61,6 +61,7 @@ func main() { minerTypesCmd, minerMultisigsCmd, splitstoreCmd, + fr32Cmd, } app := &cli.App{