TransportProtocol: Allow null Repository in canHandle()
This allows callers to determine if a URI is supported, before worrying about the local repository. Suggested-by: Dariusz Luksza <dariusz@luksza.org> Change-Id: Ifc76a4ba841f2e2e7354bd51306b87b3b9d7f6ab Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
This commit is contained in:
parent
dffc50267e
commit
f18e1fd1d1
|
@ -549,6 +549,6 @@ public void testFileProtocol() throws IllegalArgumentException,
|
|||
public void testMissingPort() throws URISyntaxException {
|
||||
final String incorrectSshUrl = "ssh://some-host:/path/to/repository.git";
|
||||
URIish u = new URIish(incorrectSshUrl);
|
||||
assertFalse(TransportGitSsh.PROTO_SSH.canHandle(null, u, null));
|
||||
assertFalse(TransportGitSsh.PROTO_SSH.canHandle(u));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -542,8 +542,8 @@ public static Transport open(Repository local, URIish uri, String remoteName)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (proto.canHandle(local, uri, remoteName))
|
||||
return proto.open(local, uri, remoteName);
|
||||
if (proto.canHandle(uri, local, remoteName))
|
||||
return proto.open(uri, local, remoteName);
|
||||
}
|
||||
|
||||
throw new NotSupportedException(MessageFormat.format(JGitText.get().URINotSupported, uri));
|
||||
|
|
|
@ -118,7 +118,7 @@ public Set<URIishField> getOptionalFields() {
|
|||
return Collections.unmodifiableSet(EnumSet.of(URIishField.PASS));
|
||||
}
|
||||
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException {
|
||||
return new TransportAmazonS3(local, uri);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ public Set<String> getSchemes() {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
||||
public boolean canHandle(URIish uri, Repository local, String remoteName) {
|
||||
if (uri.getPath() == null
|
||||
|| uri.getPort() > 0
|
||||
|| uri.getUser() != null
|
||||
|
@ -90,7 +90,7 @@ public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException, TransportException {
|
||||
if ("bundle".equals(uri.getScheme())) {
|
||||
File path = local.getFS().resolve(new File("."), uri.getPath());
|
||||
|
@ -102,7 +102,7 @@ public Transport open(Repository local, URIish uri, String remoteName)
|
|||
// resolve the path and figure out which type it is by testing
|
||||
// the target.
|
||||
//
|
||||
return TransportLocal.PROTO_LOCAL.open(local, uri, remoteName);
|
||||
return TransportLocal.PROTO_LOCAL.open(uri, local, remoteName);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ public int getDefaultPort() {
|
|||
return GIT_PORT;
|
||||
}
|
||||
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException {
|
||||
return new TransportGitAnon(local, uri);
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ public int getDefaultPort() {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
||||
public boolean canHandle(URIish uri, Repository local, String remoteName) {
|
||||
if (uri.getScheme() == null) {
|
||||
// scp-style URI "host:path" does not have scheme.
|
||||
return uri.getHost() != null
|
||||
|
@ -124,10 +124,10 @@ public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
|||
&& uri.getHost().length() != 0
|
||||
&& uri.getPath().length() != 0;
|
||||
}
|
||||
return super.canHandle(local, uri, remoteName);
|
||||
return super.canHandle(uri, local, remoteName);
|
||||
}
|
||||
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException {
|
||||
return new TransportGitSsh(local, uri);
|
||||
}
|
||||
|
|
|
@ -163,7 +163,7 @@ public int getDefaultPort() {
|
|||
return 80;
|
||||
}
|
||||
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException {
|
||||
return new TransportHttp(local, uri);
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ public int getDefaultPort() {
|
|||
return 21;
|
||||
}
|
||||
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException {
|
||||
return new TransportHttp(local, uri);
|
||||
}
|
||||
|
|
|
@ -104,7 +104,7 @@ public Set<String> getSchemes() {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
||||
public boolean canHandle(URIish uri, Repository local, String remoteName) {
|
||||
if (uri.getPath() == null
|
||||
|| uri.getPort() > 0
|
||||
|| uri.getUser() != null
|
||||
|
@ -116,7 +116,7 @@ public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NoRemoteRepositoryException {
|
||||
// If the reference is to a local file, C Git behavior says
|
||||
// assume this is a bundle, since repositories are directories.
|
||||
|
|
|
@ -138,17 +138,40 @@ public int getDefaultPort() {
|
|||
* {@link #getOptionalFields()}, returning true only if all of the fields
|
||||
* match the specification.
|
||||
*
|
||||
* @param local
|
||||
* the local repository that will communicate with the other Git
|
||||
* repository.
|
||||
* @param uri
|
||||
* address of the Git repository; never null.
|
||||
* @return true if this protocol can handle this URI; false otherwise.
|
||||
*/
|
||||
public boolean canHandle(URIish uri) {
|
||||
return canHandle(uri, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this protocol can handle a particular URI.
|
||||
* <p>
|
||||
* Implementations should try to avoid looking at the local filesystem, but
|
||||
* may look at implementation specific configuration options in the remote
|
||||
* block of {@code local.getConfig()} using {@code remoteName} if the name
|
||||
* is non-null.
|
||||
* <p>
|
||||
* The default implementation of this method matches the scheme against
|
||||
* {@link #getSchemes()}, required fields against
|
||||
* {@link #getRequiredFields()}, and optional fields against
|
||||
* {@link #getOptionalFields()}, returning true only if all of the fields
|
||||
* match the specification.
|
||||
*
|
||||
* @param uri
|
||||
* address of the Git repository; never null.
|
||||
* @param local
|
||||
* the local repository that will communicate with the other Git
|
||||
* repository. May be null if the caller is only asking about a
|
||||
* specific URI and does not have a local Repository.
|
||||
* @param remoteName
|
||||
* name of the remote, if the remote as configured in
|
||||
* {@code local}; otherwise null.
|
||||
* @return true if this protocol can handle this URI; false otherwise.
|
||||
*/
|
||||
public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
||||
public boolean canHandle(URIish uri, Repository local, String remoteName) {
|
||||
if (!getSchemes().isEmpty() && !getSchemes().contains(uri.getScheme()))
|
||||
return false;
|
||||
|
||||
|
@ -213,11 +236,11 @@ public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
|||
* within {@code local.getConfig()} using the remote block named by the
|
||||
* {@code remoteName}, if the name is non-null.
|
||||
*
|
||||
* @param uri
|
||||
* address of the Git repository.
|
||||
* @param local
|
||||
* the local repository that will communicate with the other Git
|
||||
* repository.
|
||||
* @param uri
|
||||
* address of the Git repository.
|
||||
* @param remoteName
|
||||
* name of the remote, if the remote as configured in
|
||||
* {@code local}; otherwise null.
|
||||
|
@ -227,7 +250,7 @@ public boolean canHandle(Repository local, URIish uri, String remoteName) {
|
|||
* @throws TransportException
|
||||
* the transport cannot open this URI.
|
||||
*/
|
||||
public abstract Transport open(Repository local, URIish uri,
|
||||
public abstract Transport open(URIish uri, Repository local,
|
||||
String remoteName)
|
||||
throws NotSupportedException, TransportException;
|
||||
}
|
||||
|
|
|
@ -120,7 +120,7 @@ public int getDefaultPort() {
|
|||
return 22;
|
||||
}
|
||||
|
||||
public Transport open(Repository local, URIish uri, String remoteName)
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws NotSupportedException {
|
||||
return new TransportSftp(local, uri);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue