# ZipDirFs

Linux FUSE exposing zip file content under a specified source path.

When mounting a file system with this program, you will find in your mount point:

* Same permissions and owners as in the source (TODO);
* Access too all existing extended attributes (TODO);
* System folders shown as-is;
* Zip file as directory, keeping the file extension;
* Zip content in the zip file directory;
* Other files and nodes as symbolink link to their original location;

The mounted file system is always read-only.

## Requirements

Following development packages are required:

* libfuse-dev
* libfusekit-dev (<https://github.com/multicast/fusekit/>)
* libzip-dev
* pkg-config

## Installation

This project uses CMake for building.

Standard procedure from source:

```shell
cmake -S . -B out/build
cmake --build out/build
sudo cmake --install out/build
```

## Debian packages

Package building has been tested under debian buster.

To build the package, run `dpkg-buildpackage -B`.

## Testing

Tests are written using [Google Test Framework](https://github.com/google/googletest).

Tentative Debian or Ubuntu packages:

* googletest
* google-mock

To run tests, make sure googletest sources are available in `./googletest` (or `/usr/src/googletest`), then run:

```shell
cmake -S . -B out/build
cmake --build out/build --target check
ctest --test-dir out/build --output-on-failure
```

## Development environment

Development containers are provided for bullseye and trixie. Other development
environments can be created using the provided Dockerfiles.

## Coverage

Coverage is generated through the CMake `coverage` target.

```shell
cmake -S . -B out/build
cmake --build out/build --target coverage
```

Coverage artifacts are produced under `out/build/coverage/`.
