Log map-file errors instead of breaking
Change-Id: I689e2cff9c0d4e0d628331dfbfd2683f023f9205
diff --git a/config/config.go b/config/config.go
index 1176876..12b934d 100644
--- a/config/config.go
+++ b/config/config.go
@@ -6,6 +6,7 @@
"github.com/KorAP/KoralPipe-TermMapper/ast"
"github.com/KorAP/KoralPipe-TermMapper/parser"
+ "github.com/rs/zerolog/log"
"gopkg.in/yaml.v3"
)
@@ -96,20 +97,24 @@
for _, file := range mappingFiles {
data, err := os.ReadFile(file)
if err != nil {
- return nil, fmt.Errorf("failed to read mapping file '%s': %w", file, err)
+ log.Error().Err(err).Str("file", file).Msg("Failed to read mapping file")
+ continue
}
if len(data) == 0 {
- return nil, fmt.Errorf("EOF: mapping file '%s' is empty", file)
+ log.Error().Err(err).Str("file", file).Msg("EOF: mapping file is empty")
+ continue
}
var list MappingList
if err := yaml.Unmarshal(data, &list); err != nil {
- return nil, fmt.Errorf("failed to parse YAML mapping file '%s': %w", file, err)
+ log.Error().Err(err).Str("file", file).Msg("Failed to parse YAML mapping file")
+ continue
}
if seenIDs[list.ID] {
- return nil, fmt.Errorf("duplicate mapping list ID found: %s", list.ID)
+ log.Error().Err(err).Str("file", file).Str("list-id", list.ID).Msg("Duplicate mapping list ID found")
+ continue
}
seenIDs[list.ID] = true
allLists = append(allLists, list)
diff --git a/config/config_test.go b/config/config_test.go
index 329712c..706e1e6 100644
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -1,10 +1,12 @@
package config
import (
+ "bytes"
"os"
"testing"
"github.com/KorAP/KoralPipe-TermMapper/ast"
+ "github.com/rs/zerolog/log"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -763,6 +765,14 @@
}
func TestLoadFromSourcesDuplicateIDs(t *testing.T) {
+ // Set up a buffer to capture log output
+ var buf bytes.Buffer
+ originalLogger := log.Logger
+ defer func() {
+ log.Logger = originalLogger
+ }()
+ log.Logger = log.Logger.Output(&buf)
+
// Create config with duplicate IDs across sources
configContent := `
lists:
@@ -793,9 +803,21 @@
err = mappingFile.Close()
require.NoError(t, err)
- _, err = LoadFromSources(configFile.Name(), []string{mappingFile.Name()})
- require.Error(t, err)
- assert.Contains(t, err.Error(), "duplicate mapping list ID found: duplicate-id")
+ // The function should now succeed but log the duplicate ID error
+ config, err := LoadFromSources(configFile.Name(), []string{mappingFile.Name()})
+ require.NoError(t, err)
+ require.NotNil(t, config)
+
+ // Check that the duplicate ID error was logged
+ logOutput := buf.String()
+ assert.Contains(t, logOutput, "Duplicate mapping list ID found")
+ assert.Contains(t, logOutput, "duplicate-id")
+
+ // Only the first mapping list (from config file) should be loaded
+ require.Len(t, config.Lists, 1)
+ assert.Equal(t, "duplicate-id", config.Lists[0].ID)
+ // Check that it's the one from the config file (has mapping "[A] <> [B]")
+ assert.Equal(t, "[A] <> [B]", string(config.Lists[0].Mappings[0]))
}
func TestLoadFromSourcesConfigWithOnlyPort(t *testing.T) {