From 5268314e5376c3da7a1123ee1954b466baf2d911 Mon Sep 17 00:00:00 2001
From: Valentin Rothberg <vrothberg@redhat.com>
Date: Tue, 24 May 2022 13:18:56 +0200
Subject: [PATCH] podman image mount: print pretty table

Make sure that `podman image mount` prints a pretty table unless there
is only argument passed and without a custom format.  Fixing a TODO item
brought me to the specific code location and revealed the fart in the
logic.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
---
 cmd/podman/images/mount.go     | 15 +++++----------
 pkg/domain/entities/images.go  |  1 -
 pkg/domain/infra/abi/images.go |  4 ----
 test/system/060-mount.bats     |  8 ++++++--
 4 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/cmd/podman/images/mount.go b/cmd/podman/images/mount.go
index d5ab3d2740..532d961968 100644
--- a/cmd/podman/images/mount.go
+++ b/cmd/podman/images/mount.go
@@ -7,7 +7,6 @@ import (
 	"github.com/containers/common/pkg/report"
 	"github.com/containers/podman/v4/cmd/podman/common"
 	"github.com/containers/podman/v4/cmd/podman/registry"
-	"github.com/containers/podman/v4/cmd/podman/utils"
 	"github.com/containers/podman/v4/pkg/domain/entities"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
@@ -71,16 +70,12 @@ func mount(cmd *cobra.Command, args []string) error {
 		return err
 	}
 
-	if len(args) > 0 || mountOpts.All {
-		var errs utils.OutputErrors
-		for _, r := range reports {
-			if r.Err == nil {
-				fmt.Println(r.Path)
-				continue
-			}
-			errs = append(errs, r.Err)
+	if len(args) == 1 && mountOpts.Format == "" && !mountOpts.All {
+		if len(reports) != 1 {
+			return fmt.Errorf("internal error: expected 1 report but got %d", len(reports))
 		}
-		return errs.PrintErrors()
+		fmt.Println(reports[0].Path)
+		return nil
 	}
 
 	switch {
diff --git a/pkg/domain/entities/images.go b/pkg/domain/entities/images.go
index 7081c5d25a..553be1157f 100644
--- a/pkg/domain/entities/images.go
+++ b/pkg/domain/entities/images.go
@@ -398,7 +398,6 @@ type ImageUnmountOptions struct {
 
 // ImageMountReport describes the response from image mount
 type ImageMountReport struct {
-	Err          error
 	Id           string // nolint
 	Name         string
 	Repositories []string
diff --git a/pkg/domain/infra/abi/images.go b/pkg/domain/infra/abi/images.go
index c3ec7dd8ab..d469fa0ca0 100644
--- a/pkg/domain/infra/abi/images.go
+++ b/pkg/domain/infra/abi/images.go
@@ -159,10 +159,6 @@ func (ir *ImageEngine) Mount(ctx context.Context, nameOrIDs []string, opts entit
 	mountReports := []*entities.ImageMountReport{}
 	listMountsOnly := !opts.All && len(nameOrIDs) == 0
 	for _, i := range images {
-		// TODO: the .Err fields are not used. This pre-dates the
-		// libimage migration but should be addressed at some point.
-		// A quick glimpse at cmd/podman/image/mount.go suggests that
-		// the errors needed to be handled there as well.
 		var mountPoint string
 		var err error
 		if listMountsOnly {
diff --git a/test/system/060-mount.bats b/test/system/060-mount.bats
index 7addbd88ef..2735d2afdf 100644
--- a/test/system/060-mount.bats
+++ b/test/system/060-mount.bats
@@ -50,6 +50,10 @@ load helpers
     run_podman image mount $IMAGE
     mount_path="$output"
 
+    # Make sure that `mount -a` prints a table
+    run_podman image mount -a
+    is "$output" "$IMAGE .*$mount_path"
+
     test -d $mount_path
 
     # Image is custom-built and has a file containing the YMD tag. Check it.
@@ -62,8 +66,8 @@ load helpers
     run_podman image mount
     is "$output" "$IMAGE *$mount_path" "podman image mount with no args"
 
-    # Clean up
-    run_podman image umount $IMAGE
+    # Clean up: -f since we mounted it twice
+    run_podman image umount -f $IMAGE
     is "$output" "$iid" "podman image umount: image ID of what was umounted"
 
     run_podman image umount $IMAGE