Build Path Cleanup

This commit is contained in:
2026-04-17 21:09:02 +02:00
parent d77b44c210
commit f32dd224fe
6 changed files with 178 additions and 35 deletions
+65 -27
View File
@@ -39,13 +39,14 @@ const (
)
type nativeCollectedDataset struct {
Dataset nativeDataset
Columns []string
Rows []map[string]any
LockData map[string]int
TableKey string
LockAdded int
LockPruned int
Dataset nativeDataset
Columns []string
Rows []map[string]any
LockData map[string]int
TableKey string
LockAdded int
LockPruned int
LockModified bool
}
type resolvedTable struct {
@@ -262,7 +263,10 @@ func buildNativeUnchecked(p *project.Project, progress func(string), prebuiltWik
if err != nil {
return BuildResult{}, err
}
lockAdded, lockPruned := nativeLockChangeStats(collected)
lockAdded, lockPruned, err := saveNativeBaseLockfiles(collected)
if err != nil {
return BuildResult{}, err
}
if lockAdded > 0 || lockPruned > 0 {
progress(fmt.Sprintf("Updated native lockfiles (%d new IDs, %d stale IDs pruned)", lockAdded, lockPruned))
}
@@ -340,9 +344,6 @@ func buildNativeUnchecked(p *project.Project, progress func(string), prebuiltWik
if err != nil {
return BuildResult{}, err
}
if wikiBuild.PageCount > 0 && wikiBuild.Status == wikiSkippedStatus {
wikiBuild.Status = wikiGeneratedStatus
}
}
return BuildResult{
@@ -370,14 +371,49 @@ func nativeCompileGroup(datasetName string) string {
}
}
func nativeLockChangeStats(collected []nativeCollectedDataset) (int, int) {
func saveNativeBaseLockfiles(collected []nativeCollectedDataset) (int, int, error) {
added := 0
pruned := 0
for _, dataset := range collected {
added += dataset.LockAdded
pruned += dataset.LockPruned
if dataset.Dataset.Kind != nativeDatasetBase || dataset.Dataset.LockPath == "" {
continue
}
current, err := loadLockfile(dataset.Dataset.LockPath)
if err != nil {
return 0, 0, fmt.Errorf("dataset %s: %w", dataset.Dataset.Name, err)
}
added += countAddedLockEntries(current, dataset.LockData)
pruned += countAddedLockEntries(dataset.LockData, current)
if lockDataEqual(current, dataset.LockData) {
continue
}
if err := saveLockfile(dataset.Dataset.LockPath, dataset.LockData); err != nil {
return 0, 0, fmt.Errorf("dataset %s: %w", dataset.Dataset.Name, err)
}
}
return added, pruned
return added, pruned, nil
}
func countAddedLockEntries(before, after map[string]int) int {
count := 0
for key, afterID := range after {
if beforeID, ok := before[key]; !ok || beforeID != afterID {
count++
}
}
return count
}
func lockDataEqual(a, b map[string]int) bool {
if len(a) != len(b) {
return false
}
for key, aID := range a {
if bID, ok := b[key]; !ok || bID != aID {
return false
}
}
return true
}
type nativeCompileGroupStat struct {
@@ -993,23 +1029,18 @@ func collectBaseDataset(dataset nativeDataset) (nativeCollectedDataset, error) {
lockPruned += pruned
}
if lockModified {
if err := saveLockfile(dataset.LockPath, lockData); err != nil {
return nativeCollectedDataset{}, fmt.Errorf("dataset %s: %w", dataset.Name, err)
}
}
rows = dedupeCollectedRows(rows)
slices.SortFunc(rows, func(a, b map[string]any) int {
return a["id"].(int) - b["id"].(int)
})
return nativeCollectedDataset{
Dataset: dataset,
Columns: columns,
Rows: rows,
LockData: lockData,
LockAdded: lockAdded,
LockPruned: lockPruned,
Dataset: dataset,
Columns: columns,
Rows: rows,
LockData: lockData,
LockAdded: lockAdded,
LockPruned: lockPruned,
LockModified: lockModified,
}, nil
}
@@ -3919,6 +3950,13 @@ func saveLockfile(path string, lockData map[string]int) error {
if err != nil {
return fmt.Errorf("marshal lockfile: %w", err)
}
current, err := os.ReadFile(path)
if err == nil && bytes.Equal(current, raw) {
return nil
}
if err != nil && !errors.Is(err, os.ErrNotExist) {
return fmt.Errorf("read lockfile %s: %w", path, err)
}
if err := os.WriteFile(path, raw, 0o644); err != nil {
return fmt.Errorf("write lockfile %s: %w", path, err)
}