ソースを参照

Migrate push command to cobra

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Vincent Demeester 9 年 前
コミット
9640e3a451
4 ファイル変更69 行追加49 行削除
  1. 63 0
      api/client/image/push.go
  2. 2 47
      api/client/push.go
  3. 3 2
      api/client/trust.go
  4. 1 0
      cli/cobraadaptor/adaptor.go

+ 63 - 0
api/client/image/push.go

@@ -0,0 +1,63 @@
+package image
+
+import (
+	"golang.org/x/net/context"
+
+	"github.com/docker/docker/api/client"
+	"github.com/docker/docker/cli"
+	"github.com/docker/docker/pkg/jsonmessage"
+	"github.com/docker/docker/reference"
+	"github.com/docker/docker/registry"
+	"github.com/spf13/cobra"
+)
+
+// NewPushCommand creates a new `docker push` command
+func NewPushCommand(dockerCli *client.DockerCli) *cobra.Command {
+	cmd := &cobra.Command{
+		Use:   "push NAME[:TAG]",
+		Short: "Push an image or a repository to a registry",
+		Args:  cli.ExactArgs(1),
+		RunE: func(cmd *cobra.Command, args []string) error {
+			return runPush(dockerCli, args[0])
+		},
+	}
+
+	flags := cmd.Flags()
+
+	client.AddTrustedFlags(flags, true)
+
+	return cmd
+}
+
+func runPush(dockerCli *client.DockerCli, remote string) error {
+
+	ref, err := reference.ParseNamed(remote)
+	if err != nil {
+		return err
+	}
+
+	// Resolve the Repository name from fqn to RepositoryInfo
+	repoInfo, err := registry.ParseRepositoryInfo(ref)
+	if err != nil {
+		return err
+	}
+
+	ctx := context.Background()
+
+	// Resolve the Auth config relevant for this server
+	authConfig := dockerCli.ResolveAuthConfig(ctx, repoInfo.Index)
+	requestPrivilege := dockerCli.RegistryAuthenticationPrivilegedFunc(repoInfo.Index, "push")
+
+	if client.IsTrusted() {
+		return dockerCli.TrustedPush(ctx, repoInfo, ref, authConfig, requestPrivilege)
+	}
+
+	responseBody, err := dockerCli.ImagePushPrivileged(ctx, authConfig, ref.String(), requestPrivilege)
+	if err != nil {
+		return err
+	}
+
+	defer responseBody.Close()
+
+	return jsonmessage.DisplayJSONMessagesStream(responseBody, dockerCli.Out(), dockerCli.OutFd(), dockerCli.IsTerminalOut(), nil)
+}

+ 2 - 47
api/client/push.go

@@ -5,56 +5,11 @@ import (
 
 
 	"golang.org/x/net/context"
 	"golang.org/x/net/context"
 
 
-	Cli "github.com/docker/docker/cli"
-	"github.com/docker/docker/pkg/jsonmessage"
-	flag "github.com/docker/docker/pkg/mflag"
-	"github.com/docker/docker/reference"
-	"github.com/docker/docker/registry"
 	"github.com/docker/engine-api/types"
 	"github.com/docker/engine-api/types"
 )
 )
 
 
-// CmdPush pushes an image or repository to the registry.
-//
-// Usage: docker push NAME[:TAG]
-func (cli *DockerCli) CmdPush(args ...string) error {
-	cmd := Cli.Subcmd("push", []string{"NAME[:TAG]"}, Cli.DockerCommands["push"].Description, true)
-	addTrustedFlags(cmd, false)
-	cmd.Require(flag.Exact, 1)
-
-	cmd.ParseFlags(args, true)
-
-	ref, err := reference.ParseNamed(cmd.Arg(0))
-	if err != nil {
-		return err
-	}
-
-	// Resolve the Repository name from fqn to RepositoryInfo
-	repoInfo, err := registry.ParseRepositoryInfo(ref)
-	if err != nil {
-		return err
-	}
-
-	ctx := context.Background()
-
-	// Resolve the Auth config relevant for this server
-	authConfig := cli.ResolveAuthConfig(ctx, repoInfo.Index)
-	requestPrivilege := cli.RegistryAuthenticationPrivilegedFunc(repoInfo.Index, "push")
-
-	if IsTrusted() {
-		return cli.trustedPush(ctx, repoInfo, ref, authConfig, requestPrivilege)
-	}
-
-	responseBody, err := cli.imagePushPrivileged(ctx, authConfig, ref.String(), requestPrivilege)
-	if err != nil {
-		return err
-	}
-
-	defer responseBody.Close()
-
-	return jsonmessage.DisplayJSONMessagesStream(responseBody, cli.out, cli.outFd, cli.isTerminalOut, nil)
-}
-
-func (cli *DockerCli) imagePushPrivileged(ctx context.Context, authConfig types.AuthConfig, ref string, requestPrivilege types.RequestPrivilegeFunc) (io.ReadCloser, error) {
+// ImagePushPrivileged push the image
+func (cli *DockerCli) ImagePushPrivileged(ctx context.Context, authConfig types.AuthConfig, ref string, requestPrivilege types.RequestPrivilegeFunc) (io.ReadCloser, error) {
 	encodedAuth, err := EncodeAuthToBase64(authConfig)
 	encodedAuth, err := EncodeAuthToBase64(authConfig)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err

+ 3 - 2
api/client/trust.go

@@ -399,8 +399,9 @@ func (cli *DockerCli) TrustedPull(ctx context.Context, repoInfo *registry.Reposi
 	return nil
 	return nil
 }
 }
 
 
-func (cli *DockerCli) trustedPush(ctx context.Context, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
-	responseBody, err := cli.imagePushPrivileged(ctx, authConfig, ref.String(), requestPrivilege)
+// TrustedPush handles content trust pushing of an image
+func (cli *DockerCli) TrustedPush(ctx context.Context, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
+	responseBody, err := cli.ImagePushPrivileged(ctx, authConfig, ref.String(), requestPrivilege)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}

+ 1 - 0
cli/cobraadaptor/adaptor.go

@@ -60,6 +60,7 @@ func NewCobraAdaptor(clientFlags *cliflags.ClientFlags) CobraAdaptor {
 		image.NewRemoveCommand(dockerCli),
 		image.NewRemoveCommand(dockerCli),
 		image.NewSaveCommand(dockerCli),
 		image.NewSaveCommand(dockerCli),
 		image.NewPullCommand(dockerCli),
 		image.NewPullCommand(dockerCli),
+		image.NewPushCommand(dockerCli),
 		image.NewSearchCommand(dockerCli),
 		image.NewSearchCommand(dockerCli),
 		image.NewImportCommand(dockerCli),
 		image.NewImportCommand(dockerCli),
 		image.NewTagCommand(dockerCli),
 		image.NewTagCommand(dockerCli),