github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/api/client/history.go (about) 1 package client 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 "text/tabwriter" 8 "time" 9 10 "golang.org/x/net/context" 11 12 Cli "github.com/docker/docker/cli" 13 flag "github.com/docker/docker/pkg/mflag" 14 "github.com/docker/docker/pkg/stringid" 15 "github.com/docker/docker/pkg/stringutils" 16 "github.com/docker/go-units" 17 ) 18 19 // CmdHistory shows the history of an image. 20 // 21 // Usage: docker history [OPTIONS] IMAGE 22 func (cli *DockerCli) CmdHistory(args ...string) error { 23 cmd := Cli.Subcmd("history", []string{"IMAGE"}, Cli.DockerCommands["history"].Description, true) 24 human := cmd.Bool([]string{"H", "-human"}, true, "Print sizes and dates in human readable format") 25 quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Only show numeric IDs") 26 noTrunc := cmd.Bool([]string{"-no-trunc"}, false, "Don't truncate output") 27 cmd.Require(flag.Exact, 1) 28 29 cmd.ParseFlags(args, true) 30 31 history, err := cli.client.ImageHistory(context.Background(), cmd.Arg(0)) 32 if err != nil { 33 return err 34 } 35 36 w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0) 37 38 if *quiet { 39 for _, entry := range history { 40 if *noTrunc { 41 fmt.Fprintf(w, "%s\n", entry.ID) 42 } else { 43 fmt.Fprintf(w, "%s\n", stringid.TruncateID(entry.ID)) 44 } 45 } 46 w.Flush() 47 return nil 48 } 49 50 var imageID string 51 var createdBy string 52 var created string 53 var size string 54 55 fmt.Fprintln(w, "IMAGE\tCREATED\tCREATED BY\tSIZE\tCOMMENT") 56 for _, entry := range history { 57 imageID = entry.ID 58 createdBy = strings.Replace(entry.CreatedBy, "\t", " ", -1) 59 if *noTrunc == false { 60 createdBy = stringutils.Truncate(createdBy, 45) 61 imageID = stringid.TruncateID(entry.ID) 62 } 63 64 if *human { 65 created = units.HumanDuration(time.Now().UTC().Sub(time.Unix(entry.Created, 0))) + " ago" 66 size = units.HumanSize(float64(entry.Size)) 67 } else { 68 created = time.Unix(entry.Created, 0).Format(time.RFC3339) 69 size = strconv.FormatInt(entry.Size, 10) 70 } 71 72 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", imageID, created, createdBy, size, entry.Comment) 73 } 74 w.Flush() 75 return nil 76 }