Commit 8aa782d
committed
Fix Backpack CInst planning for installed signatures
Backpack packages can be indefinite. An indefinite package contains signature modules, such as Str.hsig, that describe required modules but do not provide their implementations. When another package uses a Backpack mixin, Stack must build a concrete instantiation, a CInst, where those holes are filled by real modules from implementation packages.
Stack represents dependency resolution with AddDepRes. ADRFound means the package is already installed and can be used as-is. ADRToInstall means Stack must build a Task for that package before dependents can use it. That distinction matters because only ADRToInstall entries become normal build-plan tasks.
The previous implementation needed Package metadata for already-installed indefinite packages so it could create CInst tasks. It got that metadata by upgrading selected ADRFound entries to ADRToInstall. That made CInst creation possible, but it also changed the meaning of the plan: clean installed signature libraries started looking like normal packages that needed to be built. That was too broad and could trigger incorrect rebuild and unregister behavior.
Replace that upgrade step with a separate Backpack template-loading pass. Installed indefinite packages now remain ADRFound in the normal build plan. When Backpack instantiation needs metadata, Stack loads a source-backed Task template for the signature package and keeps it in a side map. These templates are blueprints, not ordinary build-plan tasks. They are only used to construct CInst tasks with the right package description, configure options, dependency information, and source location.
This keeps normal CLib planning unchanged. Clean installed signature packages remain installed dependencies, metadata lookup no longer implies a rebuild, and non-Backpack builds stay outside the new path.
Also keep CInst-only tasks out of local unregister selection. A CInst registers an instantiated unit for the same package name, but its configure step still needs the indefinite CLib registration to exist. If Stack treats a CInst-only package as the representative local rebuild task, it can unregister the indefinite unit immediately before the CInst configure step needs it. Filtering CInst keys there preserves the installed indefinite unit while still allowing the CInst action itself to run.
The normal ConstructPlan dependency resolver and the Backpack template resolver serve different purposes. The normal resolver recursively decides the real build plan: which packages are found, which packages must be installed, and which dependencies are missing or present. The Backpack resolver does not decide the main build plan. It only reconstructs enough dependency information for template tasks, because clean installed indefinite packages intentionally remain ADRFound and therefore do not have normal Tasks in the plan.
While loading templates, follow only Backpack mixin dependencies. This discovers inherited holes without walking ordinary dependencies as Backpack targets. That keeps the extra work scoped to Backpack plans and avoids unnecessary lookups for packages like base.
Also support source-backed snapshot packages in the template loader. Some already-installed signature packages can come from a snapshot while still having source metadata available. Loading that metadata is needed when inherited holes come through a snapshot-installed signature package.
Share the AddDepRes-to-MissingPresentDeps conversion between the normal ConstructPlan dependency path and the Backpack template path. This avoids parallel logic and keeps ADRFound and ADRToInstall dependencies represented consistently in both places.
Add focused integration coverage for stale CInst planning when the implementation package changes, the deepest signature package is dirty, an intermediate signature changes, an intermediate signature package source file changes, the final consumer changes, a required hole is inherited through another signature package, and an inherited signature package comes from a snapshot archive. Keep the existing transitive Backpack test as the clean rebuild baseline.1 parent 9b7984b commit 8aa782d
104 files changed
Lines changed: 1469 additions & 156 deletions
File tree
- src/Stack
- Build
- Types/Build
- tests
- integration/tests
- backpack-stale-cinst-consumer-change
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- backpack-stale-cinst-dirty-str-sig
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- backpack-stale-cinst-hsig-change
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- backpack-stale-cinst-impl-change
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- backpack-stale-cinst-inherited-hole
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- backpack-stale-cinst-sig-source-change
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- backpack-stale-cinst-snapshot-inherited-hole
- files
- consumer-pkg
- app
- src
- impl-pkg
- src
- logger-sig
- src
- str-sig
- src
- unit/Stack/Build
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | | - | |
| 59 | + | |
| 60 | + | |
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
| |||
95 | 96 | | |
96 | 97 | | |
97 | 98 | | |
98 | | - | |
99 | | - | |
| 99 | + | |
| 100 | + | |
100 | 101 | | |
101 | 102 | | |
102 | 103 | | |
103 | 104 | | |
104 | 105 | | |
105 | | - | |
| 106 | + | |
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
| |||
226 | 227 | | |
227 | 228 | | |
228 | 229 | | |
229 | | - | |
230 | | - | |
231 | | - | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
232 | 233 | | |
233 | 234 | | |
234 | 235 | | |
| |||
239 | 240 | | |
240 | 241 | | |
241 | 242 | | |
242 | | - | |
243 | | - | |
244 | | - | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
245 | 246 | | |
246 | | - | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
247 | 252 | | |
248 | 253 | | |
249 | 254 | | |
| |||
416 | 421 | | |
417 | 422 | | |
418 | 423 | | |
419 | | - | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
420 | 429 | | |
421 | 430 | | |
422 | | - | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
423 | 435 | | |
424 | 436 | | |
425 | 437 | | |
| |||
505 | 517 | | |
506 | 518 | | |
507 | 519 | | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
508 | 524 | | |
509 | 525 | | |
510 | 526 | | |
| |||
1154 | 1170 | | |
1155 | 1171 | | |
1156 | 1172 | | |
1157 | | - | |
1158 | | - | |
1159 | | - | |
1160 | | - | |
1161 | | - | |
1162 | | - | |
1163 | | - | |
1164 | | - | |
1165 | | - | |
1166 | | - | |
1167 | | - | |
1168 | | - | |
1169 | | - | |
1170 | | - | |
1171 | | - | |
1172 | | - | |
1173 | | - | |
1174 | | - | |
1175 | | - | |
1176 | | - | |
1177 | | - | |
1178 | | - | |
1179 | | - | |
1180 | | - | |
1181 | | - | |
1182 | 1173 | | |
1183 | 1174 | | |
1184 | 1175 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
| 34 | + | |
32 | 35 | | |
33 | 36 | | |
34 | 37 | | |
| |||
52 | 55 | | |
53 | 56 | | |
54 | 57 | | |
55 | | - | |
| 58 | + | |
56 | 59 | | |
57 | 60 | | |
58 | 61 | | |
59 | | - | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
60 | 66 | | |
61 | 67 | | |
62 | 68 | | |
| |||
152 | 158 | | |
153 | 159 | | |
154 | 160 | | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
155 | 187 | | |
156 | 188 | | |
157 | 189 | | |
| |||
Lines changed: 63 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
Lines changed: 24 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
Lines changed: 9 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
0 commit comments