Back in [[day_85__more_foundation_work]], I wrote:

> I suspect, but have not proven,
> that the assistant is able to keep repos arranged in any shape of graph in
> sync, as long as it's connected (of course) and each connection is
> bi-directional. [And each node is running the assistant.]

After today's work, many more graph topologies can be kept in sync -- the
assistant now can keep repos in sync that are not directly connected, but
must go through a central transfer point, which does not run the assistant
at all. Major milestone!

To get that working, as well as using XMPP push notifications, it turned
out to need to be more agressive about pushing out changed location log
information. And, it seems, that was the last piece that was missing.
Although I narrowly avoided going down a blind alley involving sending
transfer notifications over XMPP. Luckily, I came to my senses.

----

This month's focus was the cloud, and the month is almost done. And now
the assistant can, indeed be used to sync over the cloud! I would have
liked to have gotten on to implementing Amazon Glacier or Google Drive
support, but at least the cloud fundamentals are there.

Now that I have XMPP support, I'm tending toward going ahead and adding
XMPP pairing, and git push over XMPP. This will open up lots of excellent
use cases.

So, how to tunnel git pushes over XMPP? Well, `GIT_SHELL` can be set to
something that intercepts the output of `git-send-pack` and
`git-receive-pack`, and that data can be tunneled through XMPP to connect
them. Probably using XMPP ping.
(XEP-0047: In-Band Bytestreams would be the right way ...
but of course Google Talk doesn't support that extension.)

XMPP requires ugly encoding that will bloat the data, but the data
quantities are fairly small to sync up a few added or moved files
(of course, we'll not be sending file contents over XMPP). Pairing with
an large git repository over XMPP will need rather more bandwidth,
of course.
