blob: 60df6461be99119b28175cf991c2ffcfc31ad040 [file] [log] [blame]
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=<path>] <url> <target>
Options:
-s <path> 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["<target>"])
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
}