package image import ( "golang.org/x/net/context" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/formatter" "github.com/spf13/cobra" ) type historyOptions struct { image string human bool quiet bool noTrunc bool format string } // NewHistoryCommand creates a new `docker history` command func NewHistoryCommand(dockerCli *command.DockerCli) *cobra.Command { var opts historyOptions cmd := &cobra.Command{ Use: "history [OPTIONS] IMAGE", Short: "Show the history of an image", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.image = args[0] return runHistory(dockerCli, opts) }, } flags := cmd.Flags() flags.BoolVarP(&opts.human, "human", "H", true, "Print sizes and dates in human readable format") flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only show numeric IDs") flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Don't truncate output") flags.StringVar(&opts.format, "format", "", "Pretty-print images using a Go template") return cmd } func runHistory(dockerCli *command.DockerCli, opts historyOptions) error { ctx := context.Background() history, err := dockerCli.Client().ImageHistory(ctx, opts.image) if err != nil { return err } format := opts.format if len(format) == 0 { format = formatter.TableFormatKey } historyCtx := formatter.Context{ Output: dockerCli.Out(), Format: formatter.NewHistoryFormat(format, opts.quiet, opts.human), Trunc: !opts.noTrunc, } return formatter.HistoryWrite(historyCtx, opts.human, history) }