package main import ( "io" "os" "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf/client" "github.com/theupdateframework/go-tuf/util" ) func init() { register("get", cmdGet, ` usage: tuf-client get [-s|--store=] Options: -s The path to the local file store [default: tuf.db] Get a target from the repository. `) } type tmpFile struct { *os.File } func (t *tmpFile) Delete() error { t.Close() return os.Remove(t.Name()) } func cmdGet(args *docopt.Args, client *tuf.Client) error { if _, err := client.Update(); err != nil { return err } target := util.NormalizeTarget(args.String[""]) file, err := os.CreateTemp("", "go-tuf") if err != nil { return err } tmp := tmpFile{file} if err := client.Download(target, &tmp); err != nil { return err } defer tmp.Delete() if _, err := tmp.Seek(0, io.SeekStart); err != nil { return err } _, err = io.Copy(os.Stdout, file) return err }