Parent Issue
Part of #118 (FUSE-based Archive & Remote Browsing Feature)
Summary
Implement archive mounting, unmounting, and cleanup operations in MountManager.
Dependencies
Requires #119 (MountManager core infrastructure)
Tasks
Mount Operations
Unmount Operations
Cleanup Operations
Utility Methods
Testing
- Test
mount_archive() creates mount point directory
- Test
mount_archive() calls archivemount with correct args
- Test
mount_archive() tracks mount in active_mounts
- Test
mount_archive() returns None on subprocess failure
- Test
mount_archive() reuses existing mount for same archive
- Test
mount_archive() uses fuse-archive as fallback
- Test
unmount() calls fusermount/umount
- Test
unmount() removes from active_mounts
- Test
unmount() removes mount point directory
- Test
unmount() returns False for unknown mount
- Test
unmount_all() unmounts all active mounts
- Test
is_in_mount() for paths inside/outside mounts
- Test
get_mount_for_path() returns correct MountInfo
Files
- Modify:
tnc/mount.py
- Modify:
tests/test_mount.py
Parent Issue
Part of #118 (FUSE-based Archive & Remote Browsing Feature)
Summary
Implement archive mounting, unmounting, and cleanup operations in MountManager.
Dependencies
Requires #119 (MountManager core infrastructure)
Tasks
Mount Operations
mount_archive(archive_path)- Mount archive using archivemount or fuse-archiveactive_mountsUnmount Operations
Implement
unmount(mount_point)- Unmount a single mountfusermount -uon Linux orumounton macOSactive_mountsImplement
unmount_all()- Unmount all active mountsactive_mountskeysunmount()for eachCleanup Operations
Implement
_cleanup_stale_mounts()- Clean crashed session leftoversMOUNT_BASEexistsImplement
_try_unmount(mount_point)- Best-effort unmount without trackingUtility Methods
is_in_mount(path)- Check if path is inside any active mountget_mount_for_path(path)- Get MountInfo for path if in mountTesting
mount_archive()creates mount point directorymount_archive()calls archivemount with correct argsmount_archive()tracks mount inactive_mountsmount_archive()returns None on subprocess failuremount_archive()reuses existing mount for same archivemount_archive()uses fuse-archive as fallbackunmount()calls fusermount/umountunmount()removes fromactive_mountsunmount()removes mount point directoryunmount()returns False for unknown mountunmount_all()unmounts all active mountsis_in_mount()for paths inside/outside mountsget_mount_for_path()returns correct MountInfoFiles
tnc/mount.pytests/test_mount.py