Throwing NotSupportedException is probably the only thing we can do right now.

For quite a while now I have wanted to rebuild the way this API works. I want to introduce a TransportType interface that implements canHandle(URIish,FS), and has open(Repository,URIish) to construct the Transport instance. Then we can get rid of the static list of canHandle invocations inside of Transport and instead walk through a list of registered TransportTypes.

EGit's dialog can use that list of TransportType to enumerate what connections are available, rather than hard-coding them all.

"Plugins" to JGit could register their own TransportType instances, allowing us to support other means of transport (e.g. rsync://) that we don't support today because it requires use of software the Eclipse Foundation won't let us redistribute as part of the core JGit library. But if users supply their own plugins from external sources, there is no reason they shouldn't be able to register and "Just Work".

Because I can't think of what else is really critical for me to do today, I might try to sketch this out and post a change for discussion.