Browse code

Convert parse errors to more informative format

- Wrap parse errors in errdefs.InvalidParameters
- Include dockerfile in error names

Signed-off-by: Natasha Jarus <linuxmercedes@gmail.com>

linuxmercedes authored on 2019/01/04 06:49:48
Showing 1 changed files
... ...
@@ -12,6 +12,7 @@ import (
12 12
 	"github.com/docker/docker/api/types/backend"
13 13
 	"github.com/docker/docker/builder"
14 14
 	"github.com/docker/docker/builder/dockerignore"
15
+	"github.com/docker/docker/errdefs"
15 16
 	"github.com/docker/docker/pkg/fileutils"
16 17
 	"github.com/docker/docker/pkg/urlutil"
17 18
 	"github.com/moby/buildkit/frontend/dockerfile/parser"
... ...
@@ -34,8 +35,9 @@ func Detect(config backend.BuildConfig) (remote builder.Source, dockerfile *pars
34 34
 	case remoteURL == ClientSessionRemote:
35 35
 		res, err := parser.Parse(config.Source)
36 36
 		if err != nil {
37
-			return nil, nil, err
37
+			return nil, nil, errdefs.InvalidParameter(err)
38 38
 		}
39
+
39 40
 		return nil, res, nil
40 41
 	case urlutil.IsGitURL(remoteURL):
41 42
 		remote, dockerfile, err = newGitRemote(remoteURL, dockerfilePath)
... ...
@@ -106,7 +108,7 @@ func newURLRemote(url string, dockerfilePath string, progressReader func(in io.R
106 106
 	switch contentType {
107 107
 	case mimeTypes.TextPlain:
108 108
 		res, err := parser.Parse(progressReader(content))
109
-		return nil, res, err
109
+		return nil, res, errdefs.InvalidParameter(err)
110 110
 	default:
111 111
 		source, err := FromArchive(progressReader(content))
112 112
 		if err != nil {
... ...
@@ -146,11 +148,17 @@ func readAndParseDockerfile(name string, rc io.Reader) (*parser.Result, error) {
146 146
 	br := bufio.NewReader(rc)
147 147
 	if _, err := br.Peek(1); err != nil {
148 148
 		if err == io.EOF {
149
-			return nil, errors.Errorf("the Dockerfile (%s) cannot be empty", name)
149
+			return nil, errdefs.InvalidParameter(errors.Errorf("the Dockerfile (%s) cannot be empty", name))
150 150
 		}
151 151
 		return nil, errors.Wrap(err, "unexpected error reading Dockerfile")
152 152
 	}
153
-	return parser.Parse(br)
153
+
154
+	dockerfile, err := parser.Parse(br)
155
+	if err != nil {
156
+		return nil, errdefs.InvalidParameter(errors.Wrapf(err, "failed to parse %s", name))
157
+	}
158
+
159
+	return dockerfile, nil
154 160
 }
155 161
 
156 162
 func openAt(remote builder.Source, path string) (driver.File, error) {