Build Path Cleanup
This commit is contained in:
+65
-27
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user