This repository was archived by the owner on May 14, 2026. It is now read-only.
Commit 481c571
committed
#4 (cmd-shim — chmod target swallowed all errors): the post-write
\`ensure_executable_bits\` call used \`let _ = ...\` which dropped
\`PermissionDenied\`, \`EROFS\`, AppArmor deny and other real failures
alongside the intentionally-ignored \`NotFound\`. Match \`NotFound\`
explicitly and propagate everything else as \`LinkBinsError::Chmod\`,
mirroring pnpm's \`fixBin\` ENOENT guard. Adds two DI-driven
regression tests:
- \`link_bins_propagates_target_chmod_error_via_di\` — \`PermissionDenied\`
must surface as \`Chmod\`.
- \`link_bins_swallows_target_chmod_not_found_via_di\` — \`NotFound\`
must remain swallowed.
#5 (package-manager — peer-resolved slot name parsing): \`find_slot_
own_package_dir\` used \`slot_name.rfind('@')\` to strip the version
tail. That works for \`parent@1.0.0\` and \`@scope+parent@1.0.0\` but
breaks for peer-resolved slots: \`to_virtual_store_name\` produces
shapes like \`ts-node@10.9.1_@types+node@18.7.19_typescript@5.1.6\`
where the last \`@\` is inside a peer's version, not at the
package-name boundary. \`rfind\` then split inside the peer spec, the
slot's own package wasn't found, and the slot was silently skipped —
bins of children of every peer-resolved slot were never linked.
Parse from the left instead, skipping a single leading \`@\` that
belongs to a scoped package. The package-name half can never contain
\`@\` after \`to_virtual_store_name\`'s scope normalization (\`/\` →
\`+\`), so the first non-leading \`@\` is the right boundary. Adds
\`link_virtual_store_bins_handles_peer_resolved_slot_name\` using the
exact \`ts-node@10.9.1_@types+node@18.7.19_typescript@5.1.6\` shape
verified by \`pacquet_lockfile::pkg_name_ver_peer::tests::to_virtual_
store_name\`.
Both fixes verified by re-breaking the relevant code path and
confirming the regression tests fail, then reverting.
Drive-by from #9 (style nit on the chain split in
\`SymlinkDirectDependencies::run\`): the chain was broken in the
earlier \`feat(cmd-shim): port directories.bin discovery and Windows
shim formats\` commit (dfdd33a) because \`direct_deps\` is consumed
twice — once by \`symlink_direct_deps_into_node_modules\`, once by
\`link_direct_dep_bins\`'s \`dep_names\` derivation. That can't sit
inside a single chain. Documenting it here in lieu of amending the
earlier commit.
Test count: cmd-shim 70 → 72, package-manager (lib) 38 → 39.
1 parent 9ad2112 commit 481c571
4 files changed
Lines changed: 204 additions & 13 deletions
File tree
- crates
- cmd-shim/src
- link_bins
- package-manager/src
- link_bins
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
296 | 296 | | |
297 | 297 | | |
298 | 298 | | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
304 | 312 | | |
305 | 313 | | |
306 | 314 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
449 | 449 | | |
450 | 450 | | |
451 | 451 | | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
452 | 576 | | |
453 | 577 | | |
454 | 578 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
159 | 164 | | |
160 | 165 | | |
161 | | - | |
162 | | - | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
163 | 174 | | |
164 | | - | |
165 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
166 | 178 | | |
167 | 179 | | |
168 | 180 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
147 | 147 | | |
148 | 148 | | |
149 | 149 | | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 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 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
150 | 197 | | |
151 | 198 | | |
152 | 199 | | |
| |||
0 commit comments