Sorting changes
This commit is contained in:
@@ -493,6 +493,9 @@ func packagedBuildResult(p *project.Project) (BuildResult, error) {
|
||||
if files2DA == 0 {
|
||||
return BuildResult{}, fmt.Errorf("topdata build output missing: run build-topdata first")
|
||||
}
|
||||
if err := validateCompiled2DAOutputCatalog(p, output2DA); err != nil {
|
||||
return BuildResult{}, err
|
||||
}
|
||||
|
||||
newestSource, newestPath, err := newestTopDataInput(p, time.Now())
|
||||
if err != nil {
|
||||
@@ -515,6 +518,74 @@ func packagedBuildResult(p *project.Project) (BuildResult, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func validateCompiled2DAOutputCatalog(p *project.Project, output2DA string) error {
|
||||
expected, err := expectedCompiled2DAOutputs(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
actual, err := compiled2DAOutputNames(output2DA)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
missing := make([]string, 0)
|
||||
for outputName := range expected {
|
||||
if _, ok := actual[outputName]; !ok {
|
||||
missing = append(missing, outputName)
|
||||
}
|
||||
}
|
||||
stale := make([]string, 0)
|
||||
for outputName := range actual {
|
||||
if _, ok := expected[outputName]; !ok {
|
||||
stale = append(stale, outputName)
|
||||
}
|
||||
}
|
||||
slices.Sort(missing)
|
||||
slices.Sort(stale)
|
||||
if len(missing) > 0 {
|
||||
return fmt.Errorf("topdata build output is missing compiled 2da %s; run build-topdata first", strings.Join(missing, ", "))
|
||||
}
|
||||
if len(stale) > 0 {
|
||||
return fmt.Errorf("topdata build output contains stale compiled 2da %s; run build-topdata first", strings.Join(stale, ", "))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func expectedCompiled2DAOutputs(p *project.Project) (map[string]struct{}, error) {
|
||||
dataDir := filepath.Join(p.TopDataSourceDir(), "data")
|
||||
datasets, err := discoverNativeDatasets(dataDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
registryDatasets, err := collectGeneratedRegistryDatasets(dataDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
outputs := make(map[string]struct{}, len(datasets)+len(registryDatasets))
|
||||
for _, dataset := range datasets {
|
||||
outputs[dataset.OutputName] = struct{}{}
|
||||
}
|
||||
for _, dataset := range registryDatasets {
|
||||
outputs[dataset.Dataset.OutputName] = struct{}{}
|
||||
}
|
||||
return outputs, nil
|
||||
}
|
||||
|
||||
func compiled2DAOutputNames(output2DA string) (map[string]struct{}, error) {
|
||||
entries, err := os.ReadDir(output2DA)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("read compiled 2da output dir %s: %w", output2DA, err)
|
||||
}
|
||||
outputs := make(map[string]struct{})
|
||||
for _, entry := range entries {
|
||||
if entry.IsDir() || !strings.EqualFold(filepath.Ext(entry.Name()), ".2da") {
|
||||
continue
|
||||
}
|
||||
outputs[entry.Name()] = struct{}{}
|
||||
}
|
||||
return outputs, nil
|
||||
}
|
||||
|
||||
func currentCompiledBuildResult(p *project.Project) (BuildResult, bool, error) {
|
||||
nativeResult, err := packagedBuildResult(p)
|
||||
if err == nil {
|
||||
|
||||
Reference in New Issue
Block a user