From 7df51ce8b18b10ccdef60575174470f19486dc24 Mon Sep 17 00:00:00 2001 From: Adin Schmahmann Date: Mon, 16 Jan 2023 00:26:48 -0500 Subject: [PATCH 1/2] feat(cmd): add index create subcommand to create an external carv2 index --- cmd/car/car.go | 5 +++++ cmd/car/index.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/cmd/car/car.go b/cmd/car/car.go index c66232f7..70c9eb32 100644 --- a/cmd/car/car.go +++ b/cmd/car/car.go @@ -153,6 +153,11 @@ func main1() int { Usage: "Write output as a v1 or v2 format car", }, }, + Subcommands: []*cli.Command{{ + Name: "create", + Usage: "Write out a detached index", + Action: CreateIndex, + }}, }, { Name: "inspect", diff --git a/cmd/car/index.go b/cmd/car/index.go index 031df2ad..fc6bd5d6 100644 --- a/cmd/car/index.go +++ b/cmd/car/index.go @@ -166,3 +166,45 @@ func IndexCar(c *cli.Context) error { _, err = index.WriteTo(idx, outStream) return err } + +// CreateIndex is a command to write out an index of the CAR file +func CreateIndex(c *cli.Context) error { + r, err := carv2.OpenReader(c.Args().Get(0)) + if err != nil { + return err + } + defer r.Close() + + outStream := os.Stdout + if c.Args().Len() >= 2 { + outStream, err = os.Create(c.Args().Get(1)) + if err != nil { + return err + } + } + defer outStream.Close() + + var mc multicodec.Code + if err := mc.Set(c.String("codec")); err != nil { + return err + } + idx, err := index.New(mc) + if err != nil { + return err + } + + dr, err := r.DataReader() + if err != nil { + return err + } + + if err := carv2.LoadIndex(idx, dr); err != nil { + return err + } + + if _, err := index.WriteTo(idx, outStream); err != nil { + return err + } + + return nil +} From 4038bee446e9a87507783aea936493f0a5f9234b Mon Sep 17 00:00:00 2001 From: Adin Schmahmann Date: Mon, 30 Jan 2023 11:03:31 -0500 Subject: [PATCH 2/2] test(cmd): add index creation test --- cmd/car/testdata/script/index-create.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 cmd/car/testdata/script/index-create.txt diff --git a/cmd/car/testdata/script/index-create.txt b/cmd/car/testdata/script/index-create.txt new file mode 100644 index 00000000..bfdfe65c --- /dev/null +++ b/cmd/car/testdata/script/index-create.txt @@ -0,0 +1,3 @@ +car index create ${INPUTS}/sample-v1.car sample-v1.car.idx +car detach-index ${INPUTS}/sample-wrapped-v2.car sample-wrapped-v2.car.idx +cmp sample-v1.car.idx sample-wrapped-v2.car.idx