summaryrefslogtreecommitdiffstats
path: root/doc/src/05100-lib-entryref.md
blob: b54ba102a9a8762f8a49e3e38d7ddb787b3c2083 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
## libimagentryref

This library crate contains functionality to generate _references_ within the
imag store.

A reference is a "pointer" to a file or directory on the filesystem and outside
the store.
It differs from `libimagentrylink`/external linking as
it is designed exclusively for filesystem references, not for URLs.

A reference is created with a unique identifier, like a hash. The implementation
how this hash is calculated can be defined by the user of `libimagentryref`.

So this library helps to resemble something like a _symlink_.

### Usage

Users have to implement the `UniqueRefPathGenerator` trait which should
implement a hashing functionality for pathes.

### Limits

This is _not_ intended to be a version control system or something like that.
We also can not use _real symlinks_ as we need imag-store-objects to be able to
link stuff.

### Usecase

This library offers functionality to refer to content outside of the store.
It can be used to refer to _nearly static stuff_ pretty easily - think of a
Maildir - you add new mails by fetching them, but you mostly do not remove
mails.
If mails get moved, they can be re-found via their hash, because Maildir objects
hardly change. Or because the hash implementation which is used to refer to them
hashes only the `Message-Id` and that does not change.

### Long-term TODO

Not implemented yet:

- [ ] Re-finding of files via their hash.
      This must be implemented with several things in mind
      * The user of the library should be able to provide a way how the
        filesystem is searched. Basically a Functor which yields pathes to
        check based on the original path of the missing file.
        This enables implementations which do only search a certain subset
        of pathes, or does depth-first-search rather than
        breadth-first-search.

### Known problems

The functionality this library provides fails to work when syncing the imag
store between two devices where the data layout is different on each device.