Skip to content
go-libfossil Artifact [a9cb373d04]
Login

Artifact [a9cb373d04]

Artifact a9cb373d044d58538241ff340302598ab429ffcdf378dcc1ea6bfa79e094d51f:


package cli

import (
	"fmt"
	"os"

	"github.com/danmestas/libfossil/internal/blob"
	"github.com/danmestas/libfossil/internal/content"
	"github.com/danmestas/libfossil/internal/fsltype"
)

// RepoCatCmd outputs the content of an artifact.
type RepoCatCmd struct {
	Artifact string `arg:"" help:"Artifact UUID or prefix"`
	Raw      bool   `help:"Output raw blob (no delta expansion)"`
}

func (c *RepoCatCmd) Run(g *Globals) error {
	r, err := g.OpenRepo()
	if err != nil {
		return err
	}
	defer r.Close()

	rid, err := resolveRID(r, c.Artifact)
	if err != nil {
		return err
	}

	db := r.Inner().DB()
	var data []byte
	if c.Raw {
		data, err = blob.Load(db, fsltype.FslID(rid))
	} else {
		data, err = content.Expand(db, fsltype.FslID(rid))
	}
	if err != nil {
		return fmt.Errorf("reading artifact: %w", err)
	}

	os.Stdout.Write(data)
	return nil
}