From 3afd1b5a7c40e2a55ffd93b9a987385daa3047c0 Mon Sep 17 00:00:00 2001
From: Qi Wang <qiwan@redhat.com>
Date: Thu, 6 Feb 2020 15:55:14 -0500
Subject: images --format compatible with docker

This patch lets valid values of --format be compatible with docker. Replace CreatedTime with CreatedAt, Created with CreatedSince.
Keep CreatedTime and Created are valid as hidden options.

Signed-off-by: Qi Wang <qiwan@redhat.com>
---
 cmd/podman/images.go | 59 ++++++++++++++++++++++++++++++++--------------------
 1 file changed, 36 insertions(+), 23 deletions(-)

(limited to 'cmd/podman')

diff --git a/cmd/podman/images.go b/cmd/podman/images.go
index 115f30d9b..de61690ae 100644
--- a/cmd/podman/images.go
+++ b/cmd/podman/images.go
@@ -21,16 +21,16 @@ import (
 )
 
 type imagesTemplateParams struct {
-	Repository  string
-	Tag         string
-	ID          string
-	Digest      digest.Digest
-	Digests     []digest.Digest
-	Created     string
-	CreatedTime time.Time
-	Size        string
-	ReadOnly    bool
-	History     string
+	Repository   string
+	Tag          string
+	ID           string
+	Digest       digest.Digest
+	Digests      []digest.Digest
+	CreatedAt    time.Time
+	CreatedSince string
+	Size         string
+	ReadOnly     bool
+	History      string
 }
 
 type imagesJSONParams struct {
@@ -65,7 +65,7 @@ func (a imagesSorted) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
 type imagesSortedCreated struct{ imagesSorted }
 
 func (a imagesSortedCreated) Less(i, j int) bool {
-	return a.imagesSorted[i].CreatedTime.After(a.imagesSorted[j].CreatedTime)
+	return a.imagesSorted[i].CreatedAt.After(a.imagesSorted[j].CreatedAt)
 }
 
 type imagesSortedID struct{ imagesSorted }
@@ -185,7 +185,17 @@ func imagesCmd(c *cliconfig.ImagesValues) error {
 		history:   c.History,
 	}
 
-	opts.outputformat = opts.setOutputFormat()
+	outputformat := opts.setOutputFormat()
+	// These fields were renamed, so we need to provide backward compat for
+	// the old names.
+	if strings.Contains(outputformat, "{{.Created}}") {
+		outputformat = strings.Replace(outputformat, "{{.Created}}", "{{.CreatedSince}}", -1)
+	}
+	if strings.Contains(outputformat, "{{.CreatedTime}}") {
+		outputformat = strings.Replace(outputformat, "{{.CreatedTime}}", "{{.CreatedAt}}", -1)
+	}
+	opts.outputformat = outputformat
+
 	filteredImages, err := runtime.GetFilteredImages(filters, false)
 	if err != nil {
 		return errors.Wrapf(err, "unable to get images")
@@ -216,7 +226,7 @@ func (i imagesOptions) setOutputFormat() string {
 	if i.digests {
 		format += "{{.Digest}}\t"
 	}
-	format += "{{.ID}}\t{{.Created}}\t{{.Size}}\t"
+	format += "{{.ID}}\t{{.CreatedSince}}\t{{.Size}}\t"
 	if i.history {
 		format += "{{if .History}}{{.History}}{{else}}<none>{{end}}\t"
 	}
@@ -301,16 +311,16 @@ func getImagesTemplateOutput(ctx context.Context, images []*adapter.ContainerIma
 					imageDigest = img.Digest()
 				}
 				params := imagesTemplateParams{
-					Repository:  repo,
-					Tag:         tag,
-					ID:          imageID,
-					Digest:      imageDigest,
-					Digests:     img.Digests(),
-					CreatedTime: createdTime,
-					Created:     units.HumanDuration(time.Since(createdTime)) + " ago",
-					Size:        sizeStr,
-					ReadOnly:    img.IsReadOnly(),
-					History:     strings.Join(img.NamesHistory(), ", "),
+					Repository:   repo,
+					Tag:          tag,
+					ID:           imageID,
+					Digest:       imageDigest,
+					Digests:      img.Digests(),
+					CreatedAt:    createdTime,
+					CreatedSince: units.HumanDuration(time.Since(createdTime)) + " ago",
+					Size:         sizeStr,
+					ReadOnly:     img.IsReadOnly(),
+					History:      strings.Join(img.NamesHistory(), ", "),
 				}
 				imagesOutput = append(imagesOutput, params)
 				if opts.quiet { // Show only one image ID when quiet
@@ -384,6 +394,9 @@ func GenImageOutputMap() map[string]string {
 			values[key] = "R/O"
 			continue
 		}
+		if value == "CreatedSince" {
+			value = "created"
+		}
 		values[key] = strings.ToUpper(splitCamelCase(value))
 	}
 	return values
-- 
cgit v1.2.3-54-g00ecf