EnsureIncludes makes sure the passed PostgreSQL configuration file has an include directive to every filesToInclude.
(fileName string, filesToInclude ...string)
| 166 | // EnsureIncludes makes sure the passed PostgreSQL configuration file has an include directive |
| 167 | // to every filesToInclude. |
| 168 | func EnsureIncludes(fileName string, filesToInclude ...string) (changed bool, err error) { |
| 169 | includeLinesToAdd := make(map[string]string, len(filesToInclude)) |
| 170 | for _, fileToInclude := range filesToInclude { |
| 171 | includeLinesToAdd[fileToInclude] = fmt.Sprintf("include '%v'", fileToInclude) |
| 172 | } |
| 173 | |
| 174 | lines, err := fileutils.ReadFileLines(fileName) |
| 175 | if err != nil { |
| 176 | return false, fmt.Errorf("error while reading lines of %v: %w", fileName, err) |
| 177 | } |
| 178 | |
| 179 | for _, line := range lines { |
| 180 | trimLine := strings.TrimSpace(line) |
| 181 | for targetFile, includeLine := range includeLinesToAdd { |
| 182 | if trimLine == includeLine { |
| 183 | delete(includeLinesToAdd, targetFile) |
| 184 | } |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | if len(includeLinesToAdd) == 0 { |
| 189 | return false, nil |
| 190 | } |
| 191 | |
| 192 | for _, fileToInclude := range filesToInclude { |
| 193 | if includeLine, present := includeLinesToAdd[fileToInclude]; present { |
| 194 | lines = append(lines, |
| 195 | "", |
| 196 | fmt.Sprintf("# load CloudNativePG %s configuration", fileToInclude), |
| 197 | includeLine, |
| 198 | ) |
| 199 | } |
| 200 | } |
| 201 | |
| 202 | return fileutils.WriteLinesToFile(fileName, lines) |
| 203 | } |
no outgoing calls
no test coverage detected