Laying the groundwork for git push over XMPP. BTW, the motivation for doing this now is that if the assistant can push git data peer-to-peer, users who are entirely using the cloud don't need to set up a git repo in the cloud somewhere. Instead, a single special remote in the cloud will be all they need. So this is a keystone in the assistant's cloud support.

I'm building the following pipeline:

git push <--> git-annex xmppgit <--> xmppPush <-------> xmpp
git receive-pack <--> xmppReceivePack <---------------> xmpp

A tricky part of this is git-annex xmppgit, which is run by git push rather than the usual ssh. Rather than speak XMPP itself, that feeds the data through the assistant daemon, using some special FDs that are set up by the assistant when it runs git push, and communicated via environment variables. I hoped to set up a pipe and not need it to do any work on its own, but short of using the linux-specific splice(2), that doesn't seem possible. It also will receive the exit status of git receive-pack and propigate it to git push.

Also built the IO sides of xmppPush and xmppReceivePack although these are not tested. The XMPP sides of them come next.

Stuffing lots of git-annex branded USB keys into envelopes tonight, while watching the election coverage.