Files
Sprinter-SDCC/applications/Volkov/docs/p13-group-delete-results.md
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

4.7 KiB

Sprinter Commander: групповое удаление файлов 0.2/P13

Дата: 9 сентября 2026 года.

Статус: PASS в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD D:.

Это исторический контракт P13. Начиная с P17 выбранные каталоги не пропускаются, а удаляются рекурсивно после одного общего подтверждения; новый контракт и актуальные артефакты описаны в p17-tree-delete-results.md. Текущий P13 fixture оставлен как регрессия file-only группы.

Контракт первого группового среза F8

Если в активной панели есть выбранные записи, F8:

  1. Считает выбранные обычные файлы и выбранные каталоги отдельно.
  2. Если выбранных файлов нет, не открывает подтверждение и сообщает, что рекурсивное удаление каталогов ещё не реализовано.
  3. Показывает одно подтверждение для всей группы файлов.
  4. После подтверждения проходит EMM-store в порядке панели и удаляет только выбранные записи без FA_DIREC.
  5. Останавливается на первой ошибке. Уже удалённые файлы не восстанавливаются; итог сообщает deleted/total, число пропущенных каталогов и errno.
  6. После хотя бы одного успешного удаления перечитывает активную панель.

Выбранные каталоги не удаляются и не обходятся рекурсивно. Это согласуется с контрактом групповых +, -, *: групповые файловые команды отделяют файлы от каталогов. При отсутствии выбора сохранён однообъектный F8 из P11: файл удаляется через unlink(), пустой каталог — через rmdir().

Проверка

HDD-fixture содержит два выбранных файла, один невыбранный файл, выбранный пустой каталог и выбранный непустой каталог. Сценарий сначала отменяет групповое подтверждение, затем повторяет операцию с подтверждением. После refresh отдельно выбирается только каталог: F8 обязан отказать без диалога и без изменения носителя.

После чистого выхода MAME дерево извлекается из CHD и проверяется побайтно:

PASS: selected files deleted; selected directories and KEEP preserved.

Контрольные состояния:

Компоновка и размер

Конфигурация --memory big --safe --max-allocs 3000:

Область После P12 После P13 Изменение
_CODE W2 9496 9496 0
данные W2 3256 3256 0
свободная куча W2 2096 2096 0
BANK1 6477 6477 0
BANK2 12256 13267 +1011
SPRCMD.EXE 43073 43073 0

В BANK2 остаётся 3117 байт. HOME и размер EXE не выросли; межбанковый аудит чист.

Воспроизведение

make hdd-p13-group-delete ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p13_group_delete.chd \
  tests/mame_p13_group_delete.lua artifacts/mame-p13/local 58
tests/check_p13_group_delete_hdd.sh build/hdd/p13_group_delete.chd