mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	… for `docker images`. This deprecates the `filter` param for the `/images` endpoint and make a new filter called `reference` to replace it. It does change the CLI side (still possible to do `docker images busybox:musl`) but changes the cli code to use the filter instead (so that `docker images --filter busybox:musl` and `docker images busybox:musl` act the same). Signed-off-by: Vincent Demeester <vincent@sbr.pm>
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package image
 | 
						|
 | 
						|
import (
 | 
						|
	"golang.org/x/net/context"
 | 
						|
 | 
						|
	"github.com/docker/docker/api/types"
 | 
						|
	"github.com/docker/docker/cli"
 | 
						|
	"github.com/docker/docker/cli/command"
 | 
						|
	"github.com/docker/docker/cli/command/formatter"
 | 
						|
	"github.com/docker/docker/opts"
 | 
						|
	"github.com/spf13/cobra"
 | 
						|
)
 | 
						|
 | 
						|
type imagesOptions struct {
 | 
						|
	matchName string
 | 
						|
 | 
						|
	quiet       bool
 | 
						|
	all         bool
 | 
						|
	noTrunc     bool
 | 
						|
	showDigests bool
 | 
						|
	format      string
 | 
						|
	filter      opts.FilterOpt
 | 
						|
}
 | 
						|
 | 
						|
// NewImagesCommand creates a new `docker images` command
 | 
						|
func NewImagesCommand(dockerCli *command.DockerCli) *cobra.Command {
 | 
						|
	opts := imagesOptions{filter: opts.NewFilterOpt()}
 | 
						|
 | 
						|
	cmd := &cobra.Command{
 | 
						|
		Use:   "images [OPTIONS] [REPOSITORY[:TAG]]",
 | 
						|
		Short: "List images",
 | 
						|
		Args:  cli.RequiresMaxArgs(1),
 | 
						|
		RunE: func(cmd *cobra.Command, args []string) error {
 | 
						|
			if len(args) > 0 {
 | 
						|
				opts.matchName = args[0]
 | 
						|
			}
 | 
						|
			return runImages(dockerCli, opts)
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	flags := cmd.Flags()
 | 
						|
 | 
						|
	flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only show numeric IDs")
 | 
						|
	flags.BoolVarP(&opts.all, "all", "a", false, "Show all images (default hides intermediate images)")
 | 
						|
	flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Don't truncate output")
 | 
						|
	flags.BoolVar(&opts.showDigests, "digests", false, "Show digests")
 | 
						|
	flags.StringVar(&opts.format, "format", "", "Pretty-print images using a Go template")
 | 
						|
	flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided")
 | 
						|
 | 
						|
	return cmd
 | 
						|
}
 | 
						|
 | 
						|
func newListCommand(dockerCli *command.DockerCli) *cobra.Command {
 | 
						|
	cmd := *NewImagesCommand(dockerCli)
 | 
						|
	cmd.Aliases = []string{"images", "list"}
 | 
						|
	cmd.Use = "ls [OPTIONS] [REPOSITORY[:TAG]]"
 | 
						|
	return &cmd
 | 
						|
}
 | 
						|
 | 
						|
func runImages(dockerCli *command.DockerCli, opts imagesOptions) error {
 | 
						|
	ctx := context.Background()
 | 
						|
 | 
						|
	filters := opts.filter.Value()
 | 
						|
	if opts.matchName != "" {
 | 
						|
		filters.Add("reference", opts.matchName)
 | 
						|
	}
 | 
						|
 | 
						|
	options := types.ImageListOptions{
 | 
						|
		All:     opts.all,
 | 
						|
		Filters: filters,
 | 
						|
	}
 | 
						|
 | 
						|
	images, err := dockerCli.Client().ImageList(ctx, options)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	format := opts.format
 | 
						|
	if len(format) == 0 {
 | 
						|
		if len(dockerCli.ConfigFile().ImagesFormat) > 0 && !opts.quiet {
 | 
						|
			format = dockerCli.ConfigFile().ImagesFormat
 | 
						|
		} else {
 | 
						|
			format = formatter.TableFormatKey
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	imageCtx := formatter.ImageContext{
 | 
						|
		Context: formatter.Context{
 | 
						|
			Output: dockerCli.Out(),
 | 
						|
			Format: formatter.NewImageFormat(format, opts.quiet, opts.showDigests),
 | 
						|
			Trunc:  !opts.noTrunc,
 | 
						|
		},
 | 
						|
		Digest: opts.showDigests,
 | 
						|
	}
 | 
						|
	return formatter.ImageWrite(imageCtx, images)
 | 
						|
}
 |