summaryrefslogtreecommitdiffstats
path: root/app/import.go
diff options
context:
space:
mode:
authorJesús Espino <jespinog@gmail.com>2018-09-27 18:55:07 +0200
committerGitHub <noreply@github.com>2018-09-27 18:55:07 +0200
commitd937f41233f735b8d4f3b73a0fe87668d66ea7f9 (patch)
tree946c3256e29429919204b8e91bbdb792ab7278cd /app/import.go
parent49e0473753c2e4e2e02e30c17a7793657b71363f (diff)
downloadchat-d937f41233f735b8d4f3b73a0fe87668d66ea7f9.tar.gz
chat-d937f41233f735b8d4f3b73a0fe87668d66ea7f9.tar.bz2
chat-d937f41233f735b8d4f3b73a0fe87668d66ea7f9.zip
Idiomatic error handling for app/import*.go (#9473)
Diffstat (limited to 'app/import.go')
-rw-r--r--app/import.go97
1 files changed, 45 insertions, 52 deletions
diff --git a/app/import.go b/app/import.go
index 496c6b7fc..468f9e505 100644
--- a/app/import.go
+++ b/app/import.go
@@ -42,47 +42,48 @@ func (a *App) BulkImport(fileReader io.Reader, dryRun bool, workers int) (*model
var line LineImportData
if err := decoder.Decode(&line); err != nil {
return model.NewAppError("BulkImport", "app.import.bulk_import.json_decode.error", nil, err.Error(), http.StatusBadRequest), lineNumber
- } else {
- if lineNumber == 1 {
- importDataFileVersion, apperr := processImportDataFileVersionLine(line)
- if apperr != nil {
- return apperr, lineNumber
- }
+ }
- if importDataFileVersion != 1 {
- return model.NewAppError("BulkImport", "app.import.bulk_import.unsupported_version.error", nil, "", http.StatusBadRequest), lineNumber
- }
- } else {
- if line.Type != lastLineType {
- if lastLineType != "" {
- // Changing type. Clear out the worker queue before continuing.
- close(linesChan)
- wg.Wait()
-
- // Check no errors occurred while waiting for the queue to empty.
- if len(errorsChan) != 0 {
- err := <-errorsChan
- return err.Error, err.LineNumber
- }
- }
-
- // Set up the workers and channel for this type.
- lastLineType = line.Type
- linesChan = make(chan LineImportWorkerData, workers)
- for i := 0; i < workers; i++ {
- wg.Add(1)
- go a.bulkImportWorker(dryRun, &wg, linesChan, errorsChan)
- }
- }
+ if lineNumber == 1 {
+ importDataFileVersion, apperr := processImportDataFileVersionLine(line)
+ if apperr != nil {
+ return apperr, lineNumber
+ }
- select {
- case linesChan <- LineImportWorkerData{line, lineNumber}:
- case err := <-errorsChan:
- close(linesChan)
- wg.Wait()
+ if importDataFileVersion != 1 {
+ return model.NewAppError("BulkImport", "app.import.bulk_import.unsupported_version.error", nil, "", http.StatusBadRequest), lineNumber
+ }
+ continue
+ }
+
+ if line.Type != lastLineType {
+ if lastLineType != "" {
+ // Changing type. Clear out the worker queue before continuing.
+ close(linesChan)
+ wg.Wait()
+
+ // Check no errors occurred while waiting for the queue to empty.
+ if len(errorsChan) != 0 {
+ err := <-errorsChan
return err.Error, err.LineNumber
}
}
+
+ // Set up the workers and channel for this type.
+ lastLineType = line.Type
+ linesChan = make(chan LineImportWorkerData, workers)
+ for i := 0; i < workers; i++ {
+ wg.Add(1)
+ go a.bulkImportWorker(dryRun, &wg, linesChan, errorsChan)
+ }
+ }
+
+ select {
+ case linesChan <- LineImportWorkerData{line, lineNumber}:
+ case err := <-errorsChan:
+ close(linesChan)
+ wg.Wait()
+ return err.Error, err.LineNumber
}
}
@@ -120,51 +121,43 @@ func (a *App) ImportLine(line LineImportData, dryRun bool) *model.AppError {
case line.Type == "scheme":
if line.Scheme == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_scheme.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportScheme(line.Scheme, dryRun)
}
+ return a.ImportScheme(line.Scheme, dryRun)
case line.Type == "team":
if line.Team == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_team.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportTeam(line.Team, dryRun)
}
+ return a.ImportTeam(line.Team, dryRun)
case line.Type == "channel":
if line.Channel == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_channel.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportChannel(line.Channel, dryRun)
}
+ return a.ImportChannel(line.Channel, dryRun)
case line.Type == "user":
if line.User == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_user.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportUser(line.User, dryRun)
}
+ return a.ImportUser(line.User, dryRun)
case line.Type == "post":
if line.Post == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_post.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportPost(line.Post, dryRun)
}
+ return a.ImportPost(line.Post, dryRun)
case line.Type == "direct_channel":
if line.DirectChannel == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_direct_channel.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportDirectChannel(line.DirectChannel, dryRun)
}
+ return a.ImportDirectChannel(line.DirectChannel, dryRun)
case line.Type == "direct_post":
if line.DirectPost == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_direct_post.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportDirectPost(line.DirectPost, dryRun)
}
+ return a.ImportDirectPost(line.DirectPost, dryRun)
case line.Type == "emoji":
if line.Emoji == nil {
return model.NewAppError("BulkImport", "app.import.import_line.null_emoji.error", nil, "", http.StatusBadRequest)
- } else {
- return a.ImportEmoji(line.Emoji, dryRun)
}
+ return a.ImportEmoji(line.Emoji, dryRun)
default:
return model.NewAppError("BulkImport", "app.import.import_line.unknown_line_type.error", map[string]interface{}{"Type": line.Type}, "", http.StatusBadRequest)
}