package main import ( "io" "os" "github.com/containerd/containerd/log" "github.com/urfave/cli" ) // TODO(stevvooe): Create "multi-fetch" mode that just takes a remote // then receives object/hint lines on stdin, returning content as // needed. var fetchObjectCommand = cli.Command{ Name: "fetch-object", Usage: "retrieve objects from a remote", ArgsUsage: "[flags] [, ...]", Description: `Fetch objects by identifier from a remote.`, Flags: registryFlags, Action: func(context *cli.Context) error { var ( ref = context.Args().First() ) ctx, cancel := appContext(context) defer cancel() resolver, err := getResolver(ctx, context) if err != nil { return err } ctx = log.WithLogger(ctx, log.G(ctx).WithField("ref", ref)) log.G(ctx).Infof("resolving") name, desc, err := resolver.Resolve(ctx, ref) if err != nil { return err } fetcher, err := resolver.Fetcher(ctx, name) if err != nil { return err } log.G(ctx).Infof("fetching") rc, err := fetcher.Fetch(ctx, desc) if err != nil { return err } defer rc.Close() _, err = io.Copy(os.Stdout, rc) return err }, }