From 497d545093bce4f01455bf8d2e1658435dbb040b Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Sat, 12 Mar 2016 18:01:01 +0100 Subject: [PATCH] distribution: errors: do not retry if no credentials provided Fix and add test for case c) in #21054 Signed-off-by: Antonio Murdaca --- distribution/errors.go | 4 ++++ integration-cli/docker_cli_push_test.go | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/distribution/errors.go b/distribution/errors.go index 1cb34fdd51..1a2923a8cf 100644 --- a/distribution/errors.go +++ b/distribution/errors.go @@ -8,6 +8,7 @@ import ( "github.com/docker/distribution/registry/api/errcode" "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/client" + "github.com/docker/distribution/registry/client/auth" "github.com/docker/docker/distribution/xfer" ) @@ -90,6 +91,9 @@ func retryOnError(err error) error { return xfer.DoNotRetry{Err: err} } case *url.Error: + if v.Err == auth.ErrNoBasicAuthCredentials { + return xfer.DoNotRetry{Err: v.Err} + } return retryOnError(v.Err) case *client.UnexpectedHTTPResponseError: return xfer.DoNotRetry{Err: err} diff --git a/integration-cli/docker_cli_push_test.go b/integration-cli/docker_cli_push_test.go index ee91abfb2f..8c05342d27 100644 --- a/integration-cli/docker_cli_push_test.go +++ b/integration-cli/docker_cli_push_test.go @@ -526,3 +526,12 @@ func (s *DockerTrustSuite) TestTrustedPushWithReleasesDelegation(c *check.C) { c.Assert(err, check.IsNil, check.Commentf("Unable to read targets/releases metadata")) c.Assert(string(contents), checker.Contains, `"latest"`, check.Commentf(string(contents))) } + +func (s *DockerRegistryAuthSuite) TestPushNoCredentialsNoRetry(c *check.C) { + repoName := fmt.Sprintf("%s/busybox", privateRegistryURL) + dockerCmd(c, "tag", "busybox", repoName) + out, _, err := dockerCmdWithError("push", repoName) + c.Assert(err, check.NotNil, check.Commentf(out)) + c.Assert(out, check.Not(checker.Contains), "Retrying") + c.Assert(out, checker.Contains, "no basic auth credentials") +}