Fix bare library deletion with a private index-info input file

This commit is contained in:
jason.woltje committed 2026-10-24 23:31:19 -05:00
1 parent 8a47c462a4
commit 7932c979ab
2 files changed
+21 -1

No files matched your search

+15
View File
@@ -420,3 +420,18 @@ The eleven nonliteral import expression sites were rechecked; whole parent tests
Generated programs/runtime plugin discovery remain documented static limitations.
Artifacts and chain witnesses: /mnt/storage/scratch/bubba-row288/static-r3/.
No Node, npm, test, syntax check, build, mutant or gate run. Pending Sage CLEAR.
## 2026-10-25 first CLEAR and delete-path RED/GREEN (sage-4396/4398)
Own root npm ci rc0; own webui npm ci rc0; editor build rc0. Fresh TMPDIR from mktemp
under /mnt/storage/scratch/tmp. All Node whole-file runs nice19, timeout600 kill-after10.
Initial own write.test.mjs rc1,10 pass/2 fail: delete and revert-to-absent hit library-git.
Isolated bare Git confirms update-index --force-remove rc128 (requires worktree), while
--index-info rc0. First replacement and two delimiter-investigation reruns still rc1,
10/2: runGit's stdin argument names an input FILE, not input text. No pre-existing test
ran or was edited. Final correction writes a private NUL-delimited removal record in the
already-cleaned staging dir and supplies that file to update-index -z --index-info.
Whole write.test.mjs now rc0,12/12,0 skipped/cancelled. Source-only fix in owned write.mjs.
Logs remain /mnt/storage/scratch/bubba-row288/gate-r3/ (write-fixed through write-fixed4).
Sage4398 authorizes this fix and requires committed new candidate + driver restart from
first whole file. Focused green is not the complete gate; remaining acceptance pending.
+6 -1
View File
@@ -74,7 +74,12 @@ async function plumbing(mirror, tip, path, content, identity, message, stage) {
};
rmSync(env.GIT_INDEX_FILE, { force: true });
await run(['read-tree', tip]);
if (content === null) await run(['update-index', '--force-remove', '--', path]);
// --force-remove requires a worktree. Feed a NUL-delimited removal to the bare index.
if (content === null) {
const removal = join(stage, 'removal');
writeFileSync(removal, `0 ${'0'.repeat(40)}\t${path}\0`, { mode: 0o600 });
await run(['update-index', '-z', '--index-info'], removal);
}
else {
const file = join(stage, 'content'); writeFileSync(file, content, { mode: 0o600 });
const blob = await run(['hash-object', '-w', '--no-filters', file]);