2 个版本

新版本 0.8.13 2024 年 8 月 18 日

#463 in 文件系统

GPL-3.0-only

59KB
1.5K SLoC

Arkive

这是支撑 Dirtabase 的底层库。最终家族树将看起来像这样

  Arkive   SBox360 (sandbox build tool)
     \      /
     Dirtabase
         |
      Layover
         |
    Layover Linux

提供不可变目录(Arkive)、不可变且可重复的软件构建(Dirtabase)、原子/纯包管理(Layover)和统一的操作系统。

Arkive 存在的意义是

  1. 一个高性能的数据结构,用于在内存中表示目录树,
  2. 并为这个数据结构提供一系列特性,使其变得实用。

因为它可以将任何 Rust 类型作为按文件内容关联,所以它非常灵活,允许您在低功耗硬件上进行极快的目录操作。使用 arkive::Ark 直接可以做的事情几乎没有任何限制。然而,另一方面,与像 Dirtabase 这样的包装库相比,Arkive 中暴露了一些尖锐的边缘和复杂性,这些在包装库中是没有暴露的。

Arkive 并不容易使用,但它在多个方面以非典型的方式表示目录树,有时需要一些时间来理解。基本使用非常简单!

use arkive::*;

// Gets you an Ark<std::path::PathBuf>, where each file is represented by a
// PathBuf pointing to where it lives on disk.
let scanned = Ark::scan("./src").expect("Failed to read directory structure");

// Expands an archive to disk, like `tar x`.
//
// In this case, since the content type is PathBuf, the underlying per-file
// write behavior is std::fs::copy() from the original file to the new destination.
scanned.write("./copy_of_src").expect("Failed to copy files");

// Or that whole example, concisely with ?:
Ark::scan("./src")?.write("./copy_of_src")?;

许可证

Arkive 是一个 GPL-3 代码库。

依赖项

~5–16MB
~213K SLoC