In the context of exploring solution for drawing a map of the clones I was reminded about annex map
which I actually forgot about even if knew.
I think that if there was a --json
flag with help of which I could obtain a more readily machine accessible data (not graphviz custom format) -- I, or someone else, could provide alternative renderings (e.g. mermaid) or extend upon.
Please let me know on how feasible that would be, and any other thoughts you have in relation to the aforementioned idea so I would know how to proceed.
Adding --json to
map
would be a useful thing to do.Conceptually, we have here a directed graph (cyclic) with named edges (remote names) and nodes (repository uuids or urls). Fitting a cyclic graph into json probably needs something not unlike the graphviz output, and also as implemented
map
doesn't actually build the graph internally.So I envision a json output something like a list of nodes, where each node has a field for uuid (omitted for non-annex git repos), a field for url, and a field containing a list of its remotes. With each json object in the remotes list having a remote name, a uuid (for annex repos), and an url.
As for how well it might fit the needs of your project, some thoughts:
map
is able to spider out to remotes of remotes, but that's as far as it can go, since it only queries thegit config
of remote repositories, and does not run itself recursively on other hosts. Which can only get so far, but is a reasonable limitation for it. Often sshing into a remote host to run map recursively would be blocked for security reasons anyway. With --json output, you could runmap
on several hosts and combine them easily enough.map
does not currently show connections to special remotes, which maybe you would need. This would be easy to do for special remotes of the local repository, but it seems like it would actually be pretty hard to do for special remotes of a remote repository.I went ahead and implemented
git-annx map --json
.Example output, after being passed through
jq
to pretty-print it:BTW, my first comment incorrectly described map's spidering capabilities slightly. Suppose you have a remote on host foo, and that repository has its own remote on host bar. Then map will ssh to foo to dump the git config, find the additional urls on bar, and try to ssh to bar to get the git config of the remote of the remote. And this can continue artibtarily far, but limited of course by what hosts you can ssh to. Whether that will be enough for your needs, I don't know.