Consolidate the duplicated tarball archivers into one shared utility

Table of Contents

This page is a capture in the inbox bucket of the product backlog — a pre-sprint idea, not yet pulled into a sprint as a story.

1. What

Two libarchive-based archiver classes duplicate each other: ores::storage::filesystem::archiver (projects/ores.storage/src/filesystem/archiver.cpp, include/ores.storage/filesystem/archiver.hpp) and ores::compute::wrapper::filesystem::archiver (projects/ores.compute/wrapper/src/filesystem/archiver.cpp, include/ores.compute.wrapper/filesystem/archiver.hpp). Both expose pack and extract for .tar.gz trees and both link LibArchive privately. Move one canonical implementation to a shared low-level home (e.g. ores.utility/compression/archiver or a new ores.utility/filesystem), link LibArchive there, and have the storage and wrapper archivers delegate to it (or delete them and update the four call sites). Keep the existing wrapper filesystem_archiver_tests and storage tests, relocating them with the code.

2. Why

Future work will create input tarballs on the fly (e.g. repacking a workunit's files before dispatch). A single shared pack/unpack utility gives that work one implementation to call instead of two near-identical copies. The wrapper copy exists because the wrapper cannot depend on ores.storage; moving the archiver to ores.utility (which ores.storage already depends on privately) lets both use it. The shell's dispatch-batch now takes a tarball verbatim (matching the Qt UI), so the shell no longer needs storage_transfer::pack; pack_and_upload remains in use by the report package handler and the Ore import wizard.

3. References

  • ores.storage/include/ores.storage/filesystem/archiver.hpp — pack / extract (libarchive, cross-platform path handling).
  • ores.compute/wrapper/include/ores.compute.wrapper/filesystem/archiver.hpp — duplicate of the above.
  • projects/ores.shell/src/app/commands/compute_commands.cpp — process_dispatch_batch (tarball-only since 2026-08-26).

4. See also

Emacs 29.3 (Org mode 9.6.15)