Just barely managed to get the borg special remote fully working by end of day today. I'm still a bit shocked it was possible to do this at all, let alone as neatly as it turned out, with so few changes to git-annex to support such an entirely different thing.

I put in a fair amount of effort to making it fast to keep up-to-date with changes to the borg repo; git-annex sync does need to run borg list to check what archives are in it, but it avoids rescanning archives it already knows the contents of.

There are a slew of new todo items related to this special remote: allow overriding untrust of import remotes, borg special remote add subdir config, sync --content with borg does not get content, borg sync tree not grafted, use same vector clock for content identifier updates in import

And, if this backup-as-a-remote idea does turn out to be useful, there are lots of other backup programs. It would be good to be able to write external special remotes for them, but that would need a protocol extension.

This work was sponsored by Mark Reidenbaach on Patreon.