make compatible with VCS API change
authorPavel Sher <pavel.sher@gmail.com>
Wed, 20 Nov 2013 20:18:47 +0000 (21:18 +0100)
committerPavel Sher <pavel.sher@gmail.com>
Wed, 20 Nov 2013 20:18:47 +0000 (21:18 +0100)
git-server/src/jetbrains/buildServer/buildTriggers/vcs/git/GitUrlSupport.java

index 8d4d30f59840a9a9d06f7a1bbd82fb98c4424e8b..1668a1c8d8d786b926a2d92fdda32aa7c7bc5b97 100644 (file)
 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;
@@ -36,41 +36,46 @@ public class GitUrlSupport implements UrlSupport {
   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;