Bug #6605

Updated by Brett Smith over 4 years ago

Functional requirements:

* When reading Git repositories from the source cluster, it should try to read it through all the channels specified in the repository object's @clone_urls@ field, in the order they're given.
* When pushing Git repositories to the destination cluster, it should try pushing by both SSH and HTTPS, unless it has good reason to believe that one of these mechanisms won't work (see below).
* If arv-copy tries one copying method that fails, and then the second copying method succeeds, the user should only see errors from the first method if debug output is enabled.

Nonfunctional requirements to be addressed:

* Is there anything arv-copy can do to detect whether or not arv-git-httpd is available on the destination cluster? If so, should it do that detection, or simply assume that arv-git-httpd is always available and cope with failure?
** One possibility: get a list of one repository, any repository, and check its clone_urls. Assume that the same push mechanisms are available for all repositories on the cluster (currently a good assumption). If clone_urls aren't available, fall back on whatever push_url advertises.
* Should arv-copy use heuristics to determine which copying method is preferable or more likely to work before trying one or the other? (e.g., prefer arv-git-httpd if the user has no AuthorizedKeys?)
* If both channels seem equally likely (or equally unlikely) to work, which should arv-copy try first?
* How should errors and warnings be handled so they can be shown to the user in failure cases, but suppressed if another copy method succeeds?