1 个不稳定版本
新功能 0.8.21 | 2024 年 8 月 22 日 |
---|
#70 在 缓存
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