Files
miandmhoennig f9c1ae835d Api socket (#5)
Co-authored-by: mhoennig <michael@hoennig.de>
Reviewed-on: #5
2026-09-10 22:09:58 +02:00

44 lines
1.0 KiB
Go

package cli
import (
"errors"
"flag"
"fmt"
"io"
"os"
"werkdock/internal/registry"
"werkdock/internal/store"
)
// pullCmd is `docker pull`: fetch an image from a registry into the
// store, through package registry (crane). The verb is a thin frontend,
// as the API server's images/create is (RFC 0005).
func pullCmd(args []string) int {
fs := flag.NewFlagSet("pull", flag.ContinueOnError)
fs.SetOutput(io.Discard)
platform := fs.String("platform", registry.DefaultPlatform(), "os/arch to pull from a multi-arch image")
if err := fs.Parse(args); err != nil {
return fail(err)
}
rest := fs.Args()
if len(rest) == 0 {
return fail(errors.New("pull needs an IMAGE (werkdock pull [REGISTRY/]REPOSITORY[:TAG])"))
}
if len(rest) > 1 {
return fail(fmt.Errorf("unexpected argument %q", rest[1]))
}
st, err := store.Default()
if err != nil {
return fail(err)
}
loaded, err := registry.Pull(st, rest[0], *platform, os.Stderr)
if err != nil {
return fail(err)
}
for _, name := range loaded {
fmt.Printf("Pulled image: %s\n", name)
}
return 0
}