Skip to content

Commit 11885ac

Browse files
committed
Better error handling and Handle potential permissions issue
err could be nil, so it is checked before checking for the type of error. This may not be needed, but is a better default to establish since code is often copied by new contributors when adding features. Addresses comment by @rgee0 for handling error from stat. Signed-off-by: Alex Ellis (OpenFaaS Ltd) <[email protected]>
1 parent d3c89eb commit 11885ac

File tree

13 files changed

+28
-23
lines changed

13 files changed

+28
-23
lines changed

builder/build.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func BuildImage(image string, handler string, functionName string, language stri
3434

3535
if stack.IsValidTemplate(language) {
3636
pathToTemplateYAML := fmt.Sprintf("./template/%s/template.yml", language)
37-
if _, err := os.Stat(pathToTemplateYAML); os.IsNotExist(err) {
37+
if _, err := os.Stat(pathToTemplateYAML); err != nil && os.IsNotExist(err) {
3838
return err
3939
}
4040

builder/copy_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func checkDestinationFiles(dir string, numberOfFiles, mode int) error {
103103
// Check each file inside the destination folder
104104
for i := 1; i <= numberOfFiles; i++ {
105105
fileStat, err := os.Stat(fmt.Sprintf("%s/test-file-%d", dir, i))
106-
if os.IsNotExist(err) {
106+
if err != nil && os.IsNotExist(err) {
107107
return err
108108
}
109109
if fileStat.Mode() != os.FileMode(mode) {

builder/publish.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func PublishImage(image string, handler string, functionName string, language st
4848

4949
if stack.IsValidTemplate(language) {
5050
pathToTemplateYAML := fmt.Sprintf("./template/%s/template.yml", language)
51-
if _, err := os.Stat(pathToTemplateYAML); os.IsNotExist(err) {
51+
if _, err := os.Stat(pathToTemplateYAML); err != nil && os.IsNotExist(err) {
5252
return err
5353
}
5454

commands/build.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ func runBuild(cmd *cobra.Command, args []string) error {
179179
}
180180
} else {
181181
templateAddress := getTemplateURL("", os.Getenv(templateURLEnvironment), DefaultTemplateRepository)
182-
if pullErr := pullTemplates(templateAddress, templateName); pullErr != nil {
183-
return fmt.Errorf("could not pull templates for OpenFaaS: %v", pullErr)
182+
if err := pullTemplates(templateAddress, templateName); err != nil {
183+
return fmt.Errorf("could not pull templates: %v", err)
184184
}
185185
}
186186

@@ -307,12 +307,18 @@ func build(services *stack.Services, queueDepth int, shrinkwrap, quietBuild bool
307307
// pullTemplates pulls templates from specified git remote. templateURL may be a pinned repository.
308308
func pullTemplates(templateURL, templateName string) error {
309309

310-
if _, err := os.Stat("./template"); err != nil && os.IsNotExist(err) {
310+
if _, err := os.Stat("./template"); err != nil {
311+
if os.IsNotExist(err) {
311312

312-
fmt.Printf("No templates found in current directory.\n")
313+
fmt.Printf("No templates found in current directory.\n")
313314

314-
templateURL, refName := versioncontrol.ParsePinnedRemote(templateURL)
315-
if err := fetchTemplates(templateURL, refName, templateName, false); err != nil {
315+
templateURL, refName := versioncontrol.ParsePinnedRemote(templateURL)
316+
if err := fetchTemplates(templateURL, refName, templateName, false); err != nil {
317+
return err
318+
}
319+
} else {
320+
321+
// Perhaps there was a permissions issue or something else.
316322
return err
317323
}
318324
}

commands/deploy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ func deriveFprocess(function stack.Function) (string, error) {
458458
}
459459

460460
pathToTemplateYAML := "./template/" + function.Language + "/template.yml"
461-
if _, err := os.Stat(pathToTemplateYAML); os.IsNotExist(err) {
461+
if _, err := os.Stat(pathToTemplateYAML); err != nil && os.IsNotExist(err) {
462462
return "", err
463463
}
464464

commands/new_function.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ Download templates:
207207
}
208208

209209
pathToTemplateYAML := fmt.Sprintf("./template/%s/template.yml", language)
210-
if _, err := os.Stat(pathToTemplateYAML); os.IsNotExist(err) {
210+
if _, err := os.Stat(pathToTemplateYAML); err != nil && os.IsNotExist(err) {
211211
return err
212212
}
213213

commands/new_function_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,18 +150,18 @@ func runNewFunctionTest(t *testing.T, nft NewFunctionTest) {
150150
if nft.expectedMsg == SuccessMsg {
151151

152152
// Make sure that the folder and file was created:
153-
if _, err := os.Stat("./" + dirName); os.IsNotExist(err) {
153+
if _, err := os.Stat("./" + dirName); err != nil && os.IsNotExist(err) {
154154
t.Fatalf("%s/ directory was not created", dirName)
155155
}
156156

157157
// Check that the Dockerfile was created
158158
if funcLang == "Dockerfile" || funcLang == "dockerfile" {
159-
if _, err := os.Stat("./" + dirName + "/Dockerfile"); os.IsNotExist(err) {
159+
if _, err := os.Stat("./" + dirName + "/Dockerfile"); err != nil && os.IsNotExist(err) {
160160
t.Fatalf("Dockerfile language should create a Dockerfile for you: %s", funcName)
161161
}
162162
}
163163

164-
if _, err := os.Stat(funcYAML); os.IsNotExist(err) {
164+
if _, err := os.Stat(funcYAML); err != nil && os.IsNotExist(err) {
165165
t.Fatalf("\"%s\" yaml file was not created", funcYAML)
166166
}
167167

commands/plugin_get.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func runPluginGetCmd(cmd *cobra.Command, args []string) error {
9999
}
100100
}
101101

102-
if _, err := os.Stat(pluginDir); os.IsNotExist(err) {
102+
if _, err := os.Stat(pluginDir); err != nil && os.IsNotExist(err) {
103103
if err := os.MkdirAll(pluginDir, 0755); err != nil && os.ErrExist != err {
104104
return fmt.Errorf("failed to create plugin directory %s: %w", pluginDir, err)
105105
}

commands/publish.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func runPublish(cmd *cobra.Command, args []string) error {
164164
}
165165

166166
if needTemplates {
167-
if _, err := os.Stat("./template"); os.IsNotExist(err) {
167+
if _, err := os.Stat("./template"); err != nil && os.IsNotExist(err) {
168168

169169
return fmt.Errorf(`the "template" directory is missing but required by at least one function`)
170170
}

commands/registry_login.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func generateECRRegistryAuth(accountID, region string) ([]byte, error) {
174174

175175
func writeFileToFassCLITmp(fileBytes []byte) error {
176176
path := "./credentials"
177-
if _, err := os.Stat(path); os.IsNotExist(err) {
177+
if _, err := os.Stat(path); err != nil && os.IsNotExist(err) {
178178
err := os.Mkdir(path, 0744)
179179
if err != nil {
180180
return err

0 commit comments

Comments
 (0)