aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_pool.py
diff options
context:
space:
mode:
authorblasty <blasty@local>2026-07-25 11:26:11 +0200
committerblasty <blasty@local>2026-07-25 11:26:11 +0200
commit54e5aab945d6c27edcaf7900c5d328384143fab2 (patch)
treec69046f7af4f93b75ed15c5e24ba969d64a3abdf /tests/test_pool.py
parentsplit: propagate pure scrolls (wheel/scrollbar) to the companion pane (diff)
downloadida-tui-54e5aab945d6c27edcaf7900c5d328384143fab2.tar.gz
ida-tui-54e5aab945d6c27edcaf7900c5d328384143fab2.tar.xz
ida-tui-54e5aab945d6c27edcaf7900c5d328384143fab2.zip
projects: project model + binary staging (phase 1a)
First slice of multi-binary projects (docs/PROJECTS.md): the on-disk model, with no runtime wiring yet. idatui/project.py (stdlib-only, like domain/worker): * Project.load/create/save — an explicit JSON project file listing binaries; paths resolve relative to it, labels default to the basename and are disambiguated on collision (they name files). * A sidecar dir beside the project file (<stem>.idatui.d/) holds bin/ (staged binaries), their .i64 + scratch, and idx/ for phase 2. IDA opens the STAGED file, so nothing lands in the source tree — today targets/ carries ~244MB of IDA litter around ~13MB of binaries, much of it stale wedge files. * stage() copies rather than hardlinks. A hardlink is free but makes source and staged one inode, so an in-place rebuild (cp over the path truncates instead of replacing) would silently swap the bytes under an analysed DB with nothing to detect it. The unit test caught exactly that. A copy also leaves the sidecar self-contained once the sources are gone. * Re-staging a changed source drops its now-stale DB; sweep_scratch() clears the unpacked working files a hard-killed worker leaves behind (never the .i64). tests/test_project.py: 27 checks, pure stdlib (no IDA/textual/worker), <1s. docs/PROJECTS.md: the full design — the one-worker-per-DB constraint with measured costs (bash worker = 126MB RSS/117MB PSS; libcrypto's DB is 72MB, so residency is budgeted by MEMORY, not a worker count), the switch between "switching needs a live worker" and "searching doesn't (cached index)", and phases 1-4.
Diffstat (limited to 'tests/test_pool.py')
0 files changed, 0 insertions, 0 deletions