Implement monitoring for vdir storages
Implement storage monitoring for VdirStorage. Also update the interface
for the monitoring subsystem, based on needs discovered during this
implementation.
This likely isn't the final design; StorageMonitor::next_event likely
needs to be fallible. The API will continue evolving during upcoming
changes.
Fixes: https://todo.sr.ht/~whynothugo/pimsync/12
See: https://todo.sr.ht/~whynothugo/pimsync/103
Extract parse_interval into function
Use pre-fetched data during conflict resolution
Fetch conflicted items concurrently
Skip uploading if resolved item was unchanged
When resolving conflict resolution, if the item is unchanged on one
side, skip updating it.
Split conflict resolution function
Drop stdin lock
Conflicts are resolved in sequence, with no concurrency.
Only print stale_collections if non-empty
Move non-generic functions out of generic block
Implement missing function for read-only wrapper
Replace storage-locks with file-locks
We mainly use these discretionary lock to avoid concurrent instances
from overstepping on each other when replacing a file. Use per-filepath
locks at a storage level, and drop the higher level locks.
Update migration guide / missing features
Update documentation regarding URL discovery
Prepare changelog for v0.2.0
config: process cmd blocks early
Values specified in cmd blocks are resolved as storages are
instantiated. Some of these instantiations require network IO, so
prompting for credentials is interlined with network IO, which makes the
start-up process seem slow (e.g.: one has to wait for network IO before
being prompted for the next credential).
Process cmd blocks (which usually resolve credentials) early during
start-up, before any network IO happens. Make sure that this is done
only for storages which are actually enabled.
Fixes: https://todo.sr.ht/~whynothugo/pimsync/80