Well, sometimes you just have to go for the hack. Trying to find a way to add additional options to git-annex-shell without breaking backwards compatibility, I noticed that it ignores all options after `--`, because those tend to be random rsync options due to the way rsync runs it. So, I've added a new class of options, that come in between, like `-- opt=val opt=val ... --` The parser for these will not choke on unknown options, unlike normal getopt. So this let me add the additional info I needed to pass to git-annex-shell to make it record transfer information. And if I need to pass more info in the future, that's covered too. It's ugly, but since only git-annex runs git-annex-shell, this is an ugliness only I (and now you, dear reader) have to put up with. Note to self: Command-line programs are sometimes an API, particularly if designed to be called remotely, and so it makes sense consider whether they are, and design expandability into them from day 1. --- Anyway, we now have full transfer tracking in git-annex! Both sides of a transfer know what's being transferred, and from where, and have the info necessary to interrupt the transfer. --- Also did some basic groundwork, adding a queue of transfers to perform, and adding to the daemon's status information a map of currently running transfers. Next up: The daemon will use inotify to notice new and deleted transfer info files, and update its status info.