parseProjectEntries converts raw YAML entries into validated GlobalProjectEntry values.
(projects []globalProjectYAML, cfgDir string)
| 81 | |
| 82 | // parseProjectEntries converts raw YAML entries into validated GlobalProjectEntry values. |
| 83 | func parseProjectEntries(projects []globalProjectYAML, cfgDir string) ([]GlobalProjectEntry, error) { |
| 84 | entries := make([]GlobalProjectEntry, 0, len(projects)) |
| 85 | var errs []error |
| 86 | |
| 87 | for i, p := range projects { |
| 88 | entry, err := resolveProjectEntry(p, i, cfgDir) |
| 89 | if err != nil { |
| 90 | errs = append(errs, err) |
| 91 | continue |
| 92 | } |
| 93 | entries = append(entries, entry) |
| 94 | } |
| 95 | |
| 96 | // Check for duplicate IDs. |
| 97 | seen := make(map[string]int, len(entries)) |
| 98 | for i, e := range entries { |
| 99 | if prev, ok := seen[e.ID]; ok { |
| 100 | errs = append(errs, fmt.Errorf("projects[%d]: duplicate id %q (first seen at index %d)", i, e.ID, prev)) |
| 101 | } else { |
| 102 | seen[e.ID] = i |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | if len(errs) > 0 { |
| 107 | return nil, errors.Join(errs...) |
| 108 | } |
| 109 | return entries, nil |
| 110 | } |
| 111 | |
| 112 | // resolveProjectEntry normalizes a single YAML project entry into a GlobalProjectEntry. |
| 113 | func resolveProjectEntry(p globalProjectYAML, index int, cfgDir string) (GlobalProjectEntry, error) { |
no test coverage detected