1 个不稳定版本

新功能 0.8.21 2024 年 8 月 22 日

#70缓存

GPL-3.0-only

52KB
1.5K SLoC

dirtabase

dirtabase 是一个使用 Arkive 的构建系统,但它提供了一个更高层次的动词(操作)列表,包括下载和命令执行,并具有缓存功能。它将成为 layover 软件包管理器的核心。

# Run this command in this repo!
$ dirtabase \
  --import . src fixture \
  --merge \
  --prefix misc \
  --cmd-impure 'find misc -type f | xargs md5sum > sums' \
  --filter '^sums' \
  --export out

以下是它输出的内容(未来可能更加简洁)

================================================================
Import
================================================================
 + Can cache? false
 + Is in cache? false
dd45aedac81fb5e08f594bee978c9c6bd74b758f4f458ccd4fe250d271dcf171
8c958951d9f61be6a7b1ec48611710efc3d12ee71f3dc6ac34251afe4a95378e
================================================================
Merge
================================================================
 + Can cache? true
 + Is in cache? true
fe4462adb040549b5e632c4962e9ddfd98cd7f710949a50c137a351547eb170d
================================================================
Prefix
================================================================
 + Can cache? true
 + Is in cache? true
f5587f960dc28e8753f8558f61567cef5ed820ba9a87792d64162aed5fe9f4e0
================================================================
CmdImpure
================================================================
 + Can cache? false
 + Is in cache? false
--- [find misc -type f | xargs md5sum > sums] ---
20b1c125cbbc550603a3bbf5e6dec21802a656bf1f2d23b11011430d94f86b3b
================================================================
Filter
================================================================
 + Can cache? true
 + Is in cache? true
56b34c726418366b10db4cffe4285e04d47fd6f8161b1cda7a4bdc1a302c83e5
================================================================
Export
================================================================
 + Can cache? false
 + Is in cache? false

您还可以探索您刚刚创建的目录!

$ ls out
sums

$ cat out
c2333d995e4dbacab98f9fa37a1201a9  misc/fixture/file_at_root.txt
9d358d667fe119ed3a8a98faeb0de40b  misc/fixture/dir1/dir2/nested.txt
1dba60d0147ca0771b3e2553de7fb2f2  misc/src/context.rs
9156988bafe609194d7aca6adf8a3e70  misc/src/doc.rs
cc255b333228984a0bbccbcf1a16f1d0  misc/src/cli.rs
f18205c6a9877b2e6cb757cfeb266dfc  misc/src/test_tools.rs
9c8a8227ccef3ec678df0723e7621bd8  misc/src/op.rs
74d1290949aca1cd5bc4d3b4128ae99d  misc/src/prelude.rs
b330c35e6816a7895e0d202458d591c0  misc/src/behavior.rs
799a951d84acaad174313a340c730dc6  misc/src/lib.rs
5d6c6c5d29506c037eecc4611afb18ec  misc/src/main.rs
f1bbacd456d6e7695ed60d7c0d6d1901  misc/src/logger.rs

在每一步中,界面是流式传输的存档,从处理的一个阶段传递到下一个阶段。这是 dirtabase 操作符的输入和输出流格式。缓存实际上可以在无法缓存的步骤之后恢复,因为每个存档都有其内容的完整哈希值 - 我们可以识别何时我们回到了熟悉的领域。

目前最大的缺失部分是沙箱(纯)命令,以及 Layover 在此技术之上构建。

贡献

此仓库已配置为使用 devenv.sh,它 设置起来相当简单。它还很好地与 direnv 集成。

# These commands should work after setup!
direnv test
direnv shell

我还会在稍后设置将其作为 Nix 软件包/flake 构建。

依赖关系

~8–22MB
~350K SLoC