A big missing peice of the assistant is doing something about the content of old versions of files, and deleted files. In direct mode, editing or deleting a file necessarily loses its content from the local repository, but the content can still hang around in other repositories. So, the assistant needs to do something about that to avoid eating up disk space unnecessarily.
I built on recent work, that lets preferred content expressions be matched
against keys with no associated file. This means that I can run unused keys
through all the machinery in the assistant that handles file transfers, and
they'll end being moved to whatever repository wants them. To control which
repositories do want to retain unused files, and which not, I added a
unused
keyword to preferred content expressions. Client repositories and
transfer repositories do not want to retain unused files, but backup etc
repos do.
One nice thing about this unused
preferred content implementation is that
it doesn't slow down normal matching of preferred content expressions at
all. Can you guess why not? See 4b55afe9e92c045d72b78747021e15e8dfc16416
So, the assistant will run git annex unused
on a daily basis, and
cause unused files to flow to repositories that want them. But what if no
repositories do? To guard against filling up the local disk, there's
a annex.expireunused
configuration setting, that can cause old unused
files to be deleted by the assistant after a number of days.
I made the assistant check if there seem to be a lot of unused files piling up. (1000+, or 10% of disk used by them, or more space taken by unused files than is free.) If so, it'll pop up an alert to nudge the user to configure annex.expireunused.
Still need to build the UI to configure that, and test all of this.
Today's work was sponsored by Samuel Tardieu.