2个不稳定版本

使用旧的Rust 2015

0.3.0 2017年8月25日
0.2.0 2016年10月23日

#61#file-content


imag-documentation 中使用

LGPL-2.1

215KB
3.5K SLoC

libimagref

此库包含在imag存储中生成引用的功能。

它可以用来引用文件系统中的其他文件(通过文件系统路径访问)。它与libimagentrylink/外部链接不同,因为它专门设计用于文件系统引用,而不是URL。

一个引用可以有多个属性,例如,可以通过对内容使用hashsum(SHA1)来跟踪文件系统路径的内容,并可以检查文件是否已被更改。由于文件可能很大(想想debian.iso),支持部分哈希(想想“哈希文件的前2048字节”)。

该库包含自动通过检查之前存储的内容哈希来重新找到移动文件的功能。

权限更改也可以跟踪。

因此,这个库有助于实现类似符号链接的功能。

限制

请理解这并不是一个版本控制系统或类似的东西。我们也不能使用真实符号链接,因为我们需要imag-store-objects来链接东西。

用例

此库提供引用存储外部内容的功能。它可以很容易地引用几乎静态的内容 - 想想Maildir - 你通过获取新邮件来添加新邮件,但你通常不会删除邮件,如果你删除了邮件,你会在存储中遇到一个“空指针”,然后可以适当地处理它。

由于此库支持自定义哈希(你不必哈希整个文件,你也可以解析文件并仅哈希一些内容),因此它非常灵活。例如,如果你想要实现一个跟踪某种类型文件(这些文件不断变化)的imag模块...但是文件创建后前5行永远不会改变 - 你可以编写一个自定义哈希器,它只使用前5行来生成哈希。

内部机制

在内部存储中,文件被创建在 /ref/<要引用的文件路径的哈希值> 下。如果文件内容被哈希,我们仍然可以通过内容哈希(存储在存储条目头部)重新找到该文件。

在路径被重新找到后,引用对象可以被更新。

长期待办事项

需要在此处完成或尚未正确测试的事情

  • 不同哈希器的测试
  • 重新查找对象的测试,包括
    • 移动的文件能否通过内容哈希自动找到?
    • 如果存储引用被移动,包括链接(如 libimaglink),是否会被自动更新?
    • 如果文件内容发生变化,内容哈希是否会自动更新?

(“自动”在这里是可伸缩的,因为这些事情最终需要由用户触发)

依赖关系

~14MB
~264K SLoC