Fix id flip

This commit is contained in:
2026-05-14 18:50:10 +02:00
parent 9384d905d1
commit 0e1001657a
2 changed files with 36 additions and 11 deletions
+3 -11
View File
@@ -311,7 +311,7 @@ func buildNativeUnchecked(p *project.Project, opts NativeBuildOptions, progress
if err != nil { if err != nil {
return BuildResult{}, err return BuildResult{}, err
} }
lockAdded, lockPruned, err := saveNativeBaseLockfiles(collected) lockAdded, lockPruned, err := saveNativeLockfiles(collected)
if err != nil { if err != nil {
return BuildResult{}, err return BuildResult{}, err
} }
@@ -419,11 +419,11 @@ func nativeCompileGroup(datasetName string) string {
} }
} }
func saveNativeBaseLockfiles(collected []nativeCollectedDataset) (int, int, error) { func saveNativeLockfiles(collected []nativeCollectedDataset) (int, int, error) {
added := 0 added := 0
pruned := 0 pruned := 0
for _, dataset := range collected { for _, dataset := range collected {
if dataset.Dataset.Kind != nativeDatasetBase || dataset.Dataset.LockPath == "" { if dataset.Dataset.LockPath == "" {
continue continue
} }
current, err := loadLockfile(dataset.Dataset.LockPath) current, err := loadLockfile(dataset.Dataset.LockPath)
@@ -2769,7 +2769,6 @@ func collectPlainDataset(dataset nativeDataset) (nativeCollectedDataset, error)
} }
rows := make([]map[string]any, 0, len(rawRows)) rows := make([]map[string]any, 0, len(rawRows))
lockModified := false
explicitID := make([]bool, 0, len(rawRows)) explicitID := make([]bool, 0, len(rawRows))
for index, raw := range rawRows { for index, raw := range rawRows {
rowObj, ok := raw.(map[string]any) rowObj, ok := raw.(map[string]any)
@@ -2804,7 +2803,6 @@ func collectPlainDataset(dataset nativeDataset) (nativeCollectedDataset, error)
usedIDs[nextID] = struct{}{} usedIDs[nextID] = struct{}{}
nextID = nextAvailableID(usedIDs) nextID = nextAvailableID(usedIDs)
} }
lockModified = true
continue continue
} }
if !explicitID[index] { if !explicitID[index] {
@@ -2812,12 +2810,6 @@ func collectPlainDataset(dataset nativeDataset) (nativeCollectedDataset, error)
} }
} }
if lockModified {
if err := saveLockfile(dataset.LockPath, lockData); err != nil {
return nativeCollectedDataset{}, fmt.Errorf("dataset %s: %w", dataset.Name, err)
}
}
slices.SortFunc(rows, func(a, b map[string]any) int { slices.SortFunc(rows, func(a, b map[string]any) int {
return a["id"].(int) - b["id"].(int) return a["id"].(int) - b["id"].(int)
}) })
+33
View File
@@ -11330,6 +11330,39 @@ func TestBuildNativeSupportsLoosePlainTableAtTopdataDataRoot(t *testing.T) {
} }
} }
func TestValidateProjectDoesNotRewritePlainDatasetLockfile(t *testing.T) {
root := testProjectRoot(t)
mkdirAll(t, filepath.Join(root, "topdata", "data", "ruleset"))
writeFile(t, filepath.Join(root, "topdata", "base_dialog.json"), "{}\n")
lockPath := filepath.Join(root, "topdata", "data", "ruleset", "lock.json")
writeFile(t, filepath.Join(root, "topdata", "data", "ruleset", "base.json"), `{
"output": "ruleset.2da",
"columns": ["Name", "Value"],
"rows": [
{"id": 0, "key": "ruleset:test_rule", "Name": "TEST_RULE", "Value": "1"}
]
}`+"\n")
writeFile(t, lockPath, "{}\n")
before, err := os.ReadFile(lockPath)
if err != nil {
t.Fatalf("read initial lockfile: %v", err)
}
report := ValidateProject(testProject(root))
if report.HasErrors() {
t.Fatalf("expected validation to succeed, got:\n%s", diagnosticsText(report.Diagnostics))
}
after, err := os.ReadFile(lockPath)
if err != nil {
t.Fatalf("read lockfile after validation: %v", err)
}
if string(after) != string(before) {
t.Fatalf("expected validation to leave plain dataset lockfile unchanged, got:\n%s", string(after))
}
}
func TestValidateProjectErrorsOnTopPackageAssetCollision(t *testing.T) { func TestValidateProjectErrorsOnTopPackageAssetCollision(t *testing.T) {
root := testProjectRoot(t) root := testProjectRoot(t)
mkdirAll(t, filepath.Join(root, "topdata", "data", "repadjust")) mkdirAll(t, filepath.Join(root, "topdata", "data", "repadjust"))