2012-09-23 19:15:01 +00:00
|
|
|
Some remotes are too small to sync everything to them.
|
|
|
|
|
|
|
|
The case of a small remote on a gadget that the user interacts with,
|
|
|
|
such as a phone, where they may want to request it get content
|
|
|
|
it doesn't currently have, is covered by the [[partial_content]] page.
|
|
|
|
|
|
|
|
But often the remote is just a removable drive or a cloud remote,
|
|
|
|
that has a limited size. This page is about making the assistant do
|
|
|
|
something smart with such remotes.
|
|
|
|
|
2012-10-08 17:39:18 +00:00
|
|
|
## specifying what data a remote prefers to contain **done**
|
2012-09-23 19:15:01 +00:00
|
|
|
|
2012-10-08 17:39:18 +00:00
|
|
|
Imagine a per-remote preferred content setting, that matches things that
|
2012-09-23 19:15:01 +00:00
|
|
|
should be stored on the remote.
|
|
|
|
|
|
|
|
For example, a MP3 player might use:
|
|
|
|
`smallerthan(10mb) and filename(*.mp3) and (not filename(junk/*))`
|
|
|
|
|
|
|
|
Adding that as a filter to files sent to a remote should be
|
|
|
|
straightforward.
|
|
|
|
|
|
|
|
A USB drive that is carried between three laptops and used to sync data
|
|
|
|
between them might use: `not (in=laptop1 and in=laptop2 and in=laptop3)`
|
|
|
|
|
|
|
|
In this case, transferring data from the usb repo should
|
2012-10-08 17:39:18 +00:00
|
|
|
check if preferred content settings rejects the data, and if so, drop it
|
2012-09-23 19:15:01 +00:00
|
|
|
from the repo. So once all three laptops have the data, it is
|
|
|
|
pruned from the transfer drive.
|
|
|
|
|
2012-10-01 22:26:47 +00:00
|
|
|
## repo groups
|
2012-09-23 19:15:01 +00:00
|
|
|
|
2012-10-01 22:26:47 +00:00
|
|
|
Seems like git-annex needs a way to know the groups of repos. Some
|
|
|
|
groups:
|
2012-09-23 19:15:01 +00:00
|
|
|
|
|
|
|
* enduser: The user interacts with this repo directly.
|
|
|
|
* archival: This repo accumulates stuff, and once it's in enough archives,
|
|
|
|
it tends to get removed from other places.
|
|
|
|
* transfer: This repo is used to transfer data between enduser repos,
|
|
|
|
it does not hold data for long periods of time, and tends to have a
|
|
|
|
limited size.
|
|
|
|
|
2012-10-01 22:26:47 +00:00
|
|
|
Add a group.log that can assign repos to these or other groups. **done**
|
2012-09-23 19:15:01 +00:00
|
|
|
|
2012-10-01 22:26:47 +00:00
|
|
|
Some examples of using groups:
|
2012-09-23 19:15:01 +00:00
|
|
|
|
|
|
|
* Want to remove content from a repo, if it's not an archival repo,
|
|
|
|
and the content has reached at least one archival repo:
|
|
|
|
|
2012-10-01 22:26:47 +00:00
|
|
|
`(not group=archival) and (not copies=archival:1)`
|
2012-09-23 19:15:01 +00:00
|
|
|
|
|
|
|
That would make send to configure on all repos, or even set
|
2012-10-01 22:26:47 +00:00
|
|
|
a global `annex.accept` to it. **done**
|
2012-09-23 19:15:01 +00:00
|
|
|
|
|
|
|
* Make a cloud repo only hold data until all known clients have a copy:
|
|
|
|
|
|
|
|
`not inall(enduser)`
|
|
|
|
|
|
|
|
## configuration
|
|
|
|
|
|
|
|
The above is all well and good for those who enjoy boolean algebra, but
|
|
|
|
how to configure these sorts of expressions in the webapp?
|
2012-10-04 20:55:50 +00:00
|
|
|
|
|
|
|
## the state change problem
|
|
|
|
|
|
|
|
Imagine that a trusted repo has setting like `not copies=trusted:2`
|
|
|
|
This means that `git annex get --auto` should get files not in 2 trusted
|
|
|
|
repos. But once it has, the file is in 3 trusted repos, and so `git annex
|
|
|
|
drop --auto` should drop it again!
|
|
|
|
|
|
|
|
How to fix? Can it even be fixed? Maybe care has to be taken when
|
|
|
|
writing expressions, to avoid this problem. One that avoids it:
|
|
|
|
`not (copies=trusted:2 or (in=here and trusted=here and copies=trusted:3))`
|
|
|
|
|
|
|
|
Or, expressions could be automatically rewritten to avoid the problem.
|
|
|
|
|
|
|
|
Or, perhaps simulation could be used to detect the problem. Before
|
|
|
|
dropping, check the expression. Then simulate that the drop has happened.
|
|
|
|
Does the expression now make it want to add it? Then don't drop it!
|
|
|
|
How to implement this simulation?
|