diff options
| author | blasty <blasty@local> | 2026-07-25 11:26:11 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-25 11:26:11 +0200 |
| commit | 54e5aab945d6c27edcaf7900c5d328384143fab2 (patch) | |
| tree | c69046f7af4f93b75ed15c5e24ba969d64a3abdf /tests/test_pool.py | |
| parent | split: propagate pure scrolls (wheel/scrollbar) to the companion pane (diff) | |
| download | ida-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
