private ScmUrlParserResult parseScmUrl()

in maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java [183:248]


    private ScmUrlParserResult parseScmUrl(String scmSpecificUrl) {
        ScmUrlParserResult result = new ScmUrlParserResult();

        // ----------------------------------------------------------------------
        // Do some sanity checking of the SVN url
        // ----------------------------------------------------------------------

        if (scmSpecificUrl.startsWith("file")) {
            if (!scmSpecificUrl.startsWith("file://")) {
                result.messages.add("A svn 'file' url must be on the form 'file://[hostname]/'.");

                return result;
            }
        } else if (scmSpecificUrl.startsWith("https")) {
            if (!scmSpecificUrl.startsWith("https://")) {
                result.messages.add("A svn 'http' url must be on the form 'https://'.");

                return result;
            }
        } else if (scmSpecificUrl.startsWith("http")) {
            if (!scmSpecificUrl.startsWith("http://")) {
                result.messages.add("A svn 'http' url must be on the form 'http://'.");

                return result;
            }
        }
        // Support of tunnels: svn+xxx with xxx defined in subversion conf file
        else if (scmSpecificUrl.startsWith("svn+")) {
            if (scmSpecificUrl.indexOf("://") < 0) {
                result.messages.add("A svn 'svn+xxx' url must be on the form 'svn+xxx://'.");

                return result;
            } else {
                String tunnel = scmSpecificUrl.substring("svn+".length(), scmSpecificUrl.indexOf("://"));

                // ssh is always an allowed tunnel
                if (!"ssh".equals(tunnel)) {
                    SvnConfigFileReader reader = new SvnConfigFileReader();
                    if (SvnUtil.getSettings().getConfigDirectory() != null) {
                        reader.setConfigDirectory(new File(SvnUtil.getSettings().getConfigDirectory()));
                    }

                    if (StringUtils.isEmpty(reader.getProperty("tunnels", tunnel))) {
                        result.messages.add(
                                "The tunnel '" + tunnel + "' isn't defined in your subversion configuration file.");

                        return result;
                    }
                }
            }
        } else if (scmSpecificUrl.startsWith("svn")) {
            if (!scmSpecificUrl.startsWith("svn://")) {
                result.messages.add("A svn 'svn' url must be on the form 'svn://'.");

                return result;
            }
        } else {
            result.messages.add(scmSpecificUrl + " url isn't a valid svn URL.");

            return result;
        }

        result.repository = new SvnScmProviderRepository(scmSpecificUrl);

        return result;
    }