in cmd/distrogen/distribution.go [257:329]
func (d *DistributionGenerator) Compare() error {
wd, err := os.Getwd()
if err != nil {
return fmt.Errorf("could not get working directory: %w", err)
}
_, err = os.Stat(d.GeneratePath)
if err != nil {
if os.IsNotExist(err) {
panic(fmt.Sprintf("generated directory %s does not exist, if you see this it's a code error in distrogen", d.GeneratePath))
}
return wrapExitCodeError(
unexpectErrExitCode,
fmt.Errorf("could not stat generated directory: %w", err),
)
}
generateDest := filepath.Join(wd, d.GenerateDirName)
_, err = os.Stat(generateDest)
if err != nil {
if os.IsNotExist(err) {
return fmt.Errorf("%w: %s", ErrDistroFolderDoesNotExist, generateDest)
}
return wrapExitCodeError(
unexpectErrExitCode,
fmt.Errorf("could not stat existing distro directory: %w", err),
)
}
logger.Debug("comparing %s to %s", d.GeneratePath, generateDest)
generatedContent, err := d.getGeneratedFilesInDir()
if err != nil {
return wrapExitCodeError(
unexpectErrExitCode,
fmt.Errorf("could not get generated files: %w", err),
)
}
existingContent, err := d.getGeneratedFilesInDir()
if err != nil {
return wrapExitCodeError(
unexpectErrExitCode,
fmt.Errorf("could not get existing files: %w", err),
)
}
errs := make(CollectionError)
for name, existingFile := range existingContent {
generatedFile, ok := generatedContent[name]
if !ok {
errs[name] = fmt.Errorf("existing file not found in generated distribution")
continue
}
existingFile.checked = true
generatedFile.checked = true
diff := cmp.Diff(existingFile.content, generatedFile.content)
if diff != "" {
errs[name] = fmt.Errorf("existing file differs from generated distribution:\n%s", diff)
}
}
for name, generatedFile := range generatedContent {
if !generatedFile.checked {
errs[name] = fmt.Errorf("generated file not found in existing distribution")
}
}
if len(errs) > 0 {
return fmt.Errorf("%s: %w:\n\n%v", d.Spec.Name, ErrDistroFolderDiff, errs)
}
return nil
}