package jetbrains.buildServer.buildTriggers.vcs.git;
import jetbrains.buildServer.util.StringUtil;
-import jetbrains.buildServer.vcs.UrlSupport;
-import jetbrains.buildServer.vcs.VcsException;
-import jetbrains.buildServer.vcs.VcsUrl;
+import jetbrains.buildServer.vcs.*;
import org.eclipse.jgit.transport.URIish;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.Collection;
import java.util.HashMap;
private static final String PROVIDER_SCHEMA = "git:ssh";
private static final Collection<String> PROVIDER_SCHEMA_LIST = StringUtil.split(PROVIDER_SCHEMA, ":");
- @NotNull
- public String getProviderSchema() {
- return PROVIDER_SCHEMA;
- }
+ @Nullable
+ public Map<String, String> convertToVcsRootProperties(@NotNull String url) throws VcsException {
+ VcsUrl vcsUrl = parseUrl(url);
+ if (vcsUrl == null) return null;
- @NotNull
- public Map<String, String> convertToVcsRootProperties(@NotNull VcsUrl url) throws VcsException {
- final String providerSchema = url.getProviderSchema();
+ final String providerSchema = vcsUrl.getProviderSchema();
if(!PROVIDER_SCHEMA_LIST.contains(providerSchema))
- throw new VcsException("Unknown provider schema: "+ providerSchema);
+ return null;
URIish uri;
try {
- uri = new URIish(url.getProviderSpecificPart());
+ uri = new URIish(vcsUrl.getProviderSpecificPart());
} catch (URISyntaxException e) {
throw new VcsException(e.getMessage(), e);
}
Map<String, String> result = new HashMap<String, String>();
- result.put(Constants.FETCH_URL, url.getProviderSpecificPart());
- result.put(Constants.USERNAME, url.getUsername());
+ result.put(Constants.FETCH_URL, vcsUrl.getProviderSpecificPart());
+ result.put(Constants.USERNAME, vcsUrl.getUsername());
final boolean scpSyntax = isScpSyntax(uri);
if (scpSyntax || "ssh".equals(uri.getScheme())) {
- if (scpSyntax && url.getUsername() == null) {
+ if (scpSyntax && vcsUrl.getUsername() == null) {
result.put(Constants.USERNAME, uri.getUser());
}
result.put(Constants.AUTH_METHOD, AuthenticationMethod.PRIVATE_KEY_DEFAULT.toString());
result.put(Constants.IGNORE_KNOWN_HOSTS, "true");
- } else if (url.getPassword() != null && !StringUtil.isEmptyOrSpaces(url.getProviderSpecificPart())) {
+ } else if (vcsUrl.getPassword() != null && !StringUtil.isEmptyOrSpaces(vcsUrl.getProviderSpecificPart())) {
result.put(Constants.AUTH_METHOD, AuthenticationMethod.PASSWORD.toString());
- result.put(Constants.PASSWORD, url.getPassword());
+ result.put(Constants.PASSWORD, vcsUrl.getPassword());
}
return result;
}
+ private VcsUrl parseUrl(@NotNull final String url) {
+ try {
+ return new VcsUrl(url);
+ } catch (MalformedURLException e) {
+ return null;
+ }
+ }
private boolean isScpSyntax(URIish uriish) {
return uriish.getScheme() == null;