From bbe2376252246df9aaa2622a66e9f8f7a964156a Mon Sep 17 00:00:00 2001 From: vickydotbat Date: Fri, 10 Apr 2026 08:20:33 +0200 Subject: [PATCH] Improved Logging --- internal/topdata/native.go | 47 +++++++++++++++++++++++++---- internal/topdata/topdata_test.go | 51 ++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 6 deletions(-) diff --git a/internal/topdata/native.go b/internal/topdata/native.go index aac2fa7..71f2d43 100644 --- a/internal/topdata/native.go +++ b/internal/topdata/native.go @@ -272,13 +272,19 @@ func buildNativeUnchecked(p *project.Project, progress func(string)) (BuildResul globalKeyToID[key] = rowID } - groupTotals := nativeCompileGroupTotals(collected) + groupStats := nativeCompileGroupStats(collected) currentGroup := "" for _, dataset := range collected { group := nativeCompileGroup(dataset.Dataset.Name) if group != currentGroup { currentGroup = group - progress(fmt.Sprintf("Compiling %s datasets (%d tables)...", group, groupTotals[group])) + stats := groupStats[group] + progress(fmt.Sprintf( + "Compiling %s datasets (%d output tables from %d source fragments)...", + group, + stats.OutputTables, + stats.SourceFragments, + )) } compiled, err := resolveNativeDataset(dataset, globalKeyToID, globalRowByKey, tableRegistry, compiler) if err != nil { @@ -320,12 +326,41 @@ func nativeCompileGroup(datasetName string) string { } } -func nativeCompileGroupTotals(collected []nativeCollectedDataset) map[string]int { - totals := make(map[string]int) +type nativeCompileGroupStat struct { + OutputTables int + SourceFragments int +} + +func nativeCompileGroupStats(collected []nativeCollectedDataset) map[string]nativeCompileGroupStat { + stats := make(map[string]nativeCompileGroupStat) for _, dataset := range collected { - totals[nativeCompileGroup(dataset.Dataset.Name)]++ + group := nativeCompileGroup(dataset.Dataset.Name) + groupStat := stats[group] + groupStat.OutputTables++ + groupStat.SourceFragments += nativeDatasetSourceFragments(dataset.Dataset) + stats[group] = groupStat } - return totals + return stats +} + +func nativeDatasetSourceFragments(dataset nativeDataset) int { + fragments := 1 + if dataset.Kind == nativeDatasetBase { + fragments += countModuleFiles(dataset.ModulesDir) + fragments += countModuleFiles(dataset.GeneratedDir) + } + return fragments +} + +func countModuleFiles(dir string) int { + if strings.TrimSpace(dir) == "" { + return 0 + } + paths, err := collectModulePaths(dir) + if err != nil { + return 0 + } + return len(paths) } func discoverNativeDatasets(dataDir string) ([]nativeDataset, error) { diff --git a/internal/topdata/topdata_test.go b/internal/topdata/topdata_test.go index 9b40804..a846abf 100644 --- a/internal/topdata/topdata_test.go +++ b/internal/topdata/topdata_test.go @@ -8334,6 +8334,57 @@ func TestBuildAndPackageIncludesCompiled2DAAndTopAssets(t *testing.T) { } } +func TestNativeCompileGroupStatsCountSourceFragmentsForBaseDatasets(t *testing.T) { + root := testProjectRoot(t) + modulesDir := filepath.Join(root, "placeables", "modules") + generatedDir := filepath.Join(root, "feat", "generated") + mkdirAll(t, modulesDir) + mkdirAll(t, generatedDir) + writeFile(t, filepath.Join(modulesDir, "a.json"), "{}\n") + writeFile(t, filepath.Join(modulesDir, "b.json"), "{}\n") + writeFile(t, filepath.Join(generatedDir, "family.json"), "{}\n") + + stats := nativeCompileGroupStats([]nativeCollectedDataset{ + { + Dataset: nativeDataset{ + Kind: nativeDatasetBase, + Name: "placeables", + ModulesDir: modulesDir, + GeneratedDir: filepath.Join(root, "missing-generated"), + }, + }, + { + Dataset: nativeDataset{ + Kind: nativeDatasetBase, + Name: "feat", + ModulesDir: filepath.Join(root, "missing-modules"), + GeneratedDir: generatedDir, + }, + }, + { + Dataset: nativeDataset{ + Kind: nativeDatasetPlain, + Name: "classes/skills/fighter", + }, + }, + }) + + placeables := stats["placeables"] + if placeables.OutputTables != 1 || placeables.SourceFragments != 3 { + t.Fatalf("unexpected placeables stats: %#v", placeables) + } + + feat := stats["feat"] + if feat.OutputTables != 1 || feat.SourceFragments != 2 { + t.Fatalf("unexpected feat stats: %#v", feat) + } + + classes := stats["classes"] + if classes.OutputTables != 1 || classes.SourceFragments != 1 { + t.Fatalf("unexpected classes stats: %#v", classes) + } +} + func TestValidateProjectAcceptsPNGTopPackageAsset(t *testing.T) { root := testProjectRoot(t) mkdirAll(t, filepath.Join(root, "topdata", "data", "repadjust"))