blob: 7133ed1bc09d7e305ed996f252963314b6eca8e2 [file] [log] [blame]
package org.apache.maven.scm.provider.cvslib.cvsexe;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.maven.scm.command.Command;
import org.apache.maven.scm.provider.cvslib.AbstractCvsScmProvider;
import org.apache.maven.scm.provider.cvslib.command.login.CvsLoginCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.add.CvsExeAddCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.blame.CvsExeBlameCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.branch.CvsExeBranchCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.changelog.CvsExeChangeLogCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.checkin.CvsExeCheckInCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.checkout.CvsExeCheckOutCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.diff.CvsExeDiffCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.export.CvsExeExportCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.list.CvsExeListCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.mkdir.CvsExeMkdirCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.remove.CvsExeRemoveCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.status.CvsExeStatusCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.tag.CvsExeTagCommand;
import org.apache.maven.scm.provider.cvslib.cvsexe.command.update.CvsExeUpdateCommand;
import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
import org.codehaus.plexus.util.StringUtils;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
* @version $Id$
* @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="cvs_native"
*/
public class CvsExeScmProvider
extends AbstractCvsScmProvider
{
/** sserver transport method */
public static final String TRANSPORT_SSERVER = "sserver";
/** {@inheritDoc} */
protected Command getAddCommand()
{
return new CvsExeAddCommand();
}
/** {@inheritDoc} */
protected Command getBranchCommand()
{
return new CvsExeBranchCommand();
}
/** {@inheritDoc} */
protected Command getBlameCommand()
{
return new CvsExeBlameCommand();
}
/** {@inheritDoc} */
protected Command getChangeLogCommand()
{
return new CvsExeChangeLogCommand();
}
/** {@inheritDoc} */
protected Command getCheckInCommand()
{
return new CvsExeCheckInCommand();
}
/** {@inheritDoc} */
protected Command getCheckOutCommand()
{
return new CvsExeCheckOutCommand();
}
/** {@inheritDoc} */
protected Command getDiffCommand()
{
return new CvsExeDiffCommand();
}
/** {@inheritDoc} */
protected Command getExportCommand()
{
return new CvsExeExportCommand();
}
/** {@inheritDoc} */
protected Command getListCommand()
{
return new CvsExeListCommand();
}
/** {@inheritDoc} */
protected Command getLoginCommand()
{
return new CvsLoginCommand();
}
/** {@inheritDoc} */
protected Command getRemoveCommand()
{
return new CvsExeRemoveCommand();
}
/** {@inheritDoc} */
protected Command getStatusCommand()
{
return new CvsExeStatusCommand();
}
/** {@inheritDoc} */
protected Command getTagCommand()
{
return new CvsExeTagCommand();
}
/** {@inheritDoc} */
protected Command getUpdateCommand()
{
return new CvsExeUpdateCommand();
}
/** {@inheritDoc} */
protected Command getMkdirCommand()
{
return new CvsExeMkdirCommand();
}
/** {@inheritDoc} */
protected ScmUrlParserResult parseScmUrl( String scmSpecificUrl, char delimiter )
{
ScmUrlParserResult result = super.parseScmUrl( scmSpecificUrl, delimiter );
if ( result.getMessages().isEmpty() )
{
return result;
}
result.resetMessages();
String[] tokens = StringUtils.split( scmSpecificUrl, Character.toString( delimiter ) );
String cvsroot;
String transport = tokens[0];
// support sserver
if ( transport.equalsIgnoreCase( TRANSPORT_SSERVER ) )
{
if ( tokens.length < 4 || tokens.length > 5 && transport.equalsIgnoreCase( TRANSPORT_SSERVER ) )
{
result.getMessages().add( "The connection string contains too few tokens." );
return result;
}
//create the cvsroot as the remote cvsroot
if ( tokens.length == 4 )
{
cvsroot = ":" + transport + ":" + tokens[1] + ":" + tokens[2];
}
else
{
cvsroot = ":" + transport + ":" + tokens[1] + ":" + tokens[2] + ":" + tokens[3];
}
}
else
{
result.getMessages().add( "Unknown transport: " + transport );
return result;
}
String user = null;
String password = null;
String host = null;
String path = null;
String module = null;
int port = -1;
if ( transport.equalsIgnoreCase( TRANSPORT_SSERVER ) )
{
//sspi:[username@]host:[port]path:module
String userhost = tokens[1];
int index = userhost.indexOf( '@' );
if ( index == -1 )
{
user = "";
host = userhost;
}
else
{
user = userhost.substring( 0, index );
host = userhost.substring( index + 1 );
}
// no port specified
if ( tokens.length == 4 )
{
path = tokens[2];
module = tokens[3];
}
else
{
// getting port
try
{
port = new Integer( tokens[2] ).intValue();
path = tokens[3];
module = tokens[4];
}
catch ( Exception e )
{
//incorrect
result.getMessages().add( "Your scm url is invalid, could not get port value." );
return result;
}
}
// cvsroot format is :sspi:host:path
cvsroot = ":" + transport + ":" + host + ":";
if ( port != -1 )
{
cvsroot += port;
}
cvsroot += path;
}
if ( port == -1 )
{
result.setRepository( new CvsScmProviderRepository( cvsroot, transport, user, password, host, path,
module ) );
}
else
{
result.setRepository( new CvsScmProviderRepository( cvsroot, transport, user, password, host, port,
path, module ) );
}
return result;
}
}