From 02cda4066d9367378b59b831839894fc7a7deabe Mon Sep 17 00:00:00 2001
From: Jhon Honce <jhonce@redhat.com>
Date: Mon, 26 Aug 2019 16:26:06 -0700
Subject: [PATCH] Update varlink doc and code

* Improved error message
* Added documentation
* Updated messages to include missing data

Signed-off-by: Jhon Honce <jhonce@redhat.com>
---
 API.md                               |  2 ++
 cmd/podman/shared/create.go          |  2 +-
 cmd/podman/varlink/io.podman.varlink |  4 +++-
 pkg/varlinkapi/images.go             | 15 +++++++++++----
 4 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/API.md b/API.md
index b1f57c53a6..4e61b7c9ff 100755
--- a/API.md
+++ b/API.md
@@ -1361,6 +1361,8 @@ pids [int](https://godoc.org/builtin#int)
 ### <a name="Create"></a>type Create
 
 Create is an input structure for creating containers.
+args[0] is the image name or id
+args[1-] are the new commands if changed
 
 args [[]string](#[]string)
 
diff --git a/cmd/podman/shared/create.go b/cmd/podman/shared/create.go
index 094330e245..acbd53dba5 100644
--- a/cmd/podman/shared/create.go
+++ b/cmd/podman/shared/create.go
@@ -81,7 +81,7 @@ func CreateContainer(ctx context.Context, c *GenericCLIResults, runtime *libpod.
 		if len(c.InputArgs) != 0 {
 			name = c.InputArgs[0]
 		} else {
-			return nil, nil, errors.Errorf("error, no input arguments were provided")
+			return nil, nil, errors.Errorf("error, image name not provided")
 		}
 
 		pullType, err := util.ValidatePullType(c.String("pull"))
diff --git a/cmd/podman/varlink/io.podman.varlink b/cmd/podman/varlink/io.podman.varlink
index 2873d97615..752e28256b 100644
--- a/cmd/podman/varlink/io.podman.varlink
+++ b/cmd/podman/varlink/io.podman.varlink
@@ -274,6 +274,8 @@ type Sockets(
 )
 
 # Create is an input structure for creating containers.
+# args[0] is the image name or id
+# args[1-] are the new commands if changed
 type Create (
     args: []string,
     addHost: ?[]string,
@@ -1281,4 +1283,4 @@ error WantsMoreRequired (reason: string)
 error ErrCtrStopped (id: string)
 
 # This function requires CGroupsV2 to run in rootless mode.
-error ErrRequiresCgroupsV2ForRootless(reason: string)
\ No newline at end of file
+error ErrRequiresCgroupsV2ForRootless(reason: string)
diff --git a/pkg/varlinkapi/images.go b/pkg/varlinkapi/images.go
index 0e1ef5b76d..c184155a9e 100644
--- a/pkg/varlinkapi/images.go
+++ b/pkg/varlinkapi/images.go
@@ -338,7 +338,7 @@ func (i *LibpodAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compr
 	dockerRegistryOptions := image.DockerRegistryOptions{}
 	if format != "" {
 		switch format {
-		case "oci": //nolint
+		case "oci": // nolint
 			manifestType = v1.MediaTypeImageManifest
 		case "v2s1":
 			manifestType = manifest.DockerV2Schema1SignedMediaType
@@ -360,7 +360,12 @@ func (i *LibpodAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compr
 	output := bytes.NewBuffer([]byte{})
 	c := make(chan error)
 	go func() {
-		err := newImage.PushImageToHeuristicDestination(getContext(), destname, manifestType, "", "", "", output, compress, so, &dockerRegistryOptions, nil)
+		writer := bytes.NewBuffer([]byte{})
+		err := newImage.PushImageToHeuristicDestination(getContext(), destname, manifestType, "", "", "", writer, compress, so, &dockerRegistryOptions, nil)
+		if err != nil {
+			c <- err
+		}
+		_, err = io.CopyBuffer(output, writer, nil)
 		c <- err
 		close(c)
 	}()
@@ -388,6 +393,7 @@ func (i *LibpodAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compr
 				}
 				br := iopodman.MoreResponse{
 					Logs: log,
+					Id:   newImage.ID(),
 				}
 				call.ReplyPushImage(br)
 				log = []string{}
@@ -403,6 +409,7 @@ func (i *LibpodAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compr
 
 	br := iopodman.MoreResponse{
 		Logs: log,
+		Id:   newImage.ID(),
 	}
 	return call.ReplyPushImage(br)
 }
@@ -530,7 +537,7 @@ func (i *LibpodAPI) Commit(call iopodman.VarlinkCall, name, imageName string, ch
 	}
 	sc := image.GetSystemContext(rtc.SignaturePolicyPath, "", false)
 	switch manifestType {
-	case "oci", "": //nolint
+	case "oci", "": // nolint
 		mimeType = buildah.OCIv1ImageManifest
 	case "docker":
 		mimeType = manifest.DockerV2Schema2MediaType
@@ -821,7 +828,7 @@ func (i *LibpodAPI) ImageSave(call iopodman.VarlinkCall, options iopodman.ImageS
 	// Image has been saved to `output`
 	if outputToDir {
 		// If the output is a directory, we need to tar up the directory to send it back
-		//Create a tempfile for the directory tarball
+		// Create a tempfile for the directory tarball
 		outputFile, err := ioutil.TempFile("", "varlink_save_dir")
 		if err != nil {
 			return err