You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by ev...@apache.org on 2005/12/06 13:49:24 UTC
svn commit: r354417 - in
/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src:
main/java/org/apache/maven/scm/provider/clearcase/command/checkout/
main/java/org/apache/maven/scm/provider/clearcase/command/update/
main/java/org/apache/m...
Author: evenisse
Date: Tue Dec 6 04:48:57 2005
New Revision: 354417
URL: http://svn.apache.org/viewcvs?rev=354417&view=rev
Log:
PR: SCM-100
Submitted by: Wim Deblauwe
Implements the checkout and update commands for ClearCase. Note that currently checkout from a label is not supported (as done by the maven-release-plugin), but the checkout should work in combination with Continuum.
Added:
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt (with props)
Modified:
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutConsumer.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkin/ClearCaseCheckInCommandTest.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommandTest.java
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java?rev=354417&r1=354416&r2=354417&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java Tue Dec 6 04:48:57 2005
@@ -18,19 +18,27 @@
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.providers.clearcase.settings.io.xpp3.ClearcaseXpp3Reader;
+import org.apache.maven.scm.providers.clearcase.settings.Settings;
import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.apache.maven.scm.provider.clearcase.command.ClearCaseCommand;
+import org.apache.maven.scm.provider.clearcase.repository.ClearCaseScmProviderRepository;
import org.codehaus.plexus.util.cli.CommandLineException;
import org.codehaus.plexus.util.cli.CommandLineUtils;
import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
+import java.io.IOException;
+import java.io.FileReader;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
/**
- * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- * @version $Id$
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
*/
public class ClearCaseCheckOutCommand
extends AbstractCheckOutCommand
@@ -44,7 +52,11 @@
String tag )
throws ScmException
{
- Commandline cl = createCommandLine( fileSet.getBasedir(), tag );
+ ClearCaseScmProviderRepository repo = (ClearCaseScmProviderRepository) repository;
+ File workingDirectory = fileSet.getBasedir();
+ getLogger().info( "basedir: " + workingDirectory );
+ getLogger().info( "tag: " + tag );
+ //Commandline cl = createCommandLine( fileSet.getBasedir(), tag );
ClearCaseCheckOutConsumer consumer = new ClearCaseCheckOutConsumer( getLogger() );
@@ -52,14 +64,53 @@
int exitCode;
+ Commandline cl;
try
{
- exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+ // Since clearcase only wants to checkout to a non-existent directory, first delete the working dir if it already exists
+ FileUtils.deleteDirectory( workingDirectory );
+ // First create the view
+ String viewName = getUniqueViewName( repo, workingDirectory.getAbsolutePath() );
+ cl = createCreateViewCommandLine( workingDirectory, viewName );
+ getLogger().info( "create view: " + cl.toString() );
+ exitCode = CommandLineUtils.executeCommandLine( cl, new CommandLineUtils.StringStreamConsumer(), stderr );
+
+ if ( exitCode == 0 )
+ {
+ File configSpecLocation;
+
+ if ( tag == null )
+ {
+ configSpecLocation = repo.getConfigSpec();
+ }
+ else
+ {
+ // TODO We are building on a label
+ throw new UnsupportedOperationException( "Building on a label not supported yet" );
+// configSpecLocation = new File( "configspec.txt" );
+// FileWriter writer = new FileWriter( configSpecLocation );
+// writer.append( "ELEMENT * " + tag );
+// // If we did not tag the directories leading to the root directory
+// // of this module, then we need the following line also (otherwise, we will
+// // not be able to access our module in the given view
+// writer.append( "element * /main/LATEST" );
+// writer.close();
+ }
+ cl = createUpdateConfigSpecCommandLine( workingDirectory, configSpecLocation,
+ viewName );
+
+ getLogger().info( "update config spec: " + cl.toString() );
+ exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+ }
}
catch ( CommandLineException ex )
{
throw new ScmException( "Error while executing clearcase command.", ex );
}
+ catch ( IOException ex )
+ {
+ throw new ScmException( "Error while deleting working directory.", ex );
+ }
if ( exitCode != 0 )
{
@@ -73,7 +124,48 @@
//
// ----------------------------------------------------------------------
- public static Commandline createCommandLine( File workingDirectory, String branch )
+ private static Commandline createDeleteViewCommandLine( ClearCaseScmProviderRepository repository, File workingDirectory )
+ {
+ Commandline command = new Commandline();
+
+ command.setWorkingDirectory( workingDirectory.getAbsolutePath() );
+
+ command.setExecutable( "cleartool" );
+
+ command.createArgument().setValue( "rmview" );
+ command.createArgument().setValue( "-force" );
+ command.createArgument().setValue( "-tag" );
+ command.createArgument().setValue( getUniqueViewName( repository, workingDirectory.getAbsolutePath() ) );
+
+ return command;
+ }
+
+ protected static Commandline createCreateViewCommandLine( File workingDirectory, String viewName )
+ throws IOException
+ {
+ Commandline command = new Commandline();
+
+ // We have to execute from 1 level up from the working dir, since we had to delete the working dir
+ command.setWorkingDirectory( new File( workingDirectory, ".." ).getAbsolutePath() );
+
+ command.setExecutable( "cleartool" );
+
+ command.createArgument().setValue( "mkview" );
+ command.createArgument().setValue( "-snapshot" );
+ command.createArgument().setValue( "-tag" );
+ command.createArgument().setValue( viewName );
+
+ command.createArgument().setValue( "-vws" );
+ command.createArgument().setValue( getViewStore() + viewName + ".vws" );
+
+ command.createArgument().setValue( workingDirectory.getCanonicalPath() );
+
+
+ return command;
+ }
+
+ protected static Commandline createUpdateConfigSpecCommandLine( File workingDirectory, File configSpecLocation,
+ String viewName )
{
Commandline command = new Commandline();
@@ -81,15 +173,75 @@
command.setExecutable( "cleartool" );
- command.createArgument().setValue( "co" );
+ command.createArgument().setValue( "setcs" );
+ command.createArgument().setValue( "-tag" );
+ command.createArgument().setValue( viewName );
+ command.createArgument().setValue( configSpecLocation.getAbsolutePath() );
+
+ return command;
- if ( branch != null )
+ }
+
+ private static String getUniqueViewName( ClearCaseScmProviderRepository repository, String absolutePath )
+ {
+ String uniqueId;
+ int lastIndexBack = absolutePath.lastIndexOf( '\\' );
+ int lastIndexForward = absolutePath.lastIndexOf( '/' );
+ if( lastIndexBack != -1 )
{
- command.createArgument().setValue( "-branch" );
+ uniqueId = absolutePath.substring( lastIndexBack + 1 );
+ }
+ else
+ {
+ uniqueId = absolutePath.substring( lastIndexForward + 1 );
+ }
+ return repository.getViewName(uniqueId);
+ }
- command.createArgument().setValue( branch );
+ protected static String getViewStore()
+ {
+ String result = null;
+
+ File scmUserDir = new File( System.getProperty( "user.dir" ), ".scm" );
+ File settingsFile = new File( scmUserDir, "clearcase-settings.xml" );
+ if( settingsFile.exists() )
+ {
+ try
+ {
+ ClearcaseXpp3Reader reader = new ClearcaseXpp3Reader();
+ Settings settings = reader.read( new FileReader( settingsFile ) );
+ result = settings.getViewstore();
+ }
+ catch ( IOException e )
+ {
+ result = null;
+ }
+ catch ( XmlPullParserException e )
+ {
+ result = null;
+ }
}
- return command;
+ if( result == null )
+ {
+ result = "\\\\" + getHostName() + "\\viewstore\\";
+ }
+ return result;
+ }
+
+ private static String getHostName()
+ {
+ String hostname;
+ try
+ {
+ hostname = InetAddress.getLocalHost().getHostName();
+ }
+ catch ( UnknownHostException e )
+ {
+ // Should never happen
+ throw new RuntimeException( e );
+ }
+ return hostname;
}
+
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutConsumer.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutConsumer.java?rev=354417&r1=354416&r2=354417&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutConsumer.java Tue Dec 6 04:48:57 2005
@@ -16,6 +16,8 @@
* limitations under the License.
*/
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
import org.apache.maven.scm.log.ScmLogger;
import org.codehaus.plexus.util.cli.StreamConsumer;
@@ -23,8 +25,7 @@
import java.util.List;
/**
- * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
- * @version $Id$
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
*/
public class ClearCaseCheckOutConsumer
implements StreamConsumer
@@ -48,6 +49,7 @@
public void consumeLine( String line )
{
+ checkedOutFiles.add( new ScmFile( line, ScmFileStatus.CHECKED_OUT ) );
}
// ----------------------------------------------------------------------
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java?rev=354417&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java Tue Dec 6 04:48:57 2005
@@ -0,0 +1,92 @@
+package org.apache.maven.scm.provider.clearcase.command.update;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.changelog.ChangeLogCommand;
+import org.apache.maven.scm.command.update.AbstractUpdateCommand;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.clearcase.command.ClearCaseCommand;
+import org.apache.maven.scm.provider.clearcase.command.changelog.ClearCaseChangeLogCommand;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
+ */
+public class ClearCaseUpdateCommand
+ extends AbstractUpdateCommand
+ implements ClearCaseCommand
+{
+ protected UpdateScmResult executeUpdateCommand( ScmProviderRepository repository, ScmFileSet fileSet, String tag )
+ throws ScmException
+ {
+ getLogger().info( "executing update command..." );
+ Commandline cl = createCommandLine( fileSet );
+
+ ClearCaseUpdateConsumer consumer = new ClearCaseUpdateConsumer( getLogger() );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ try
+ {
+ exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+ }
+ catch (CommandLineException ex)
+ {
+ throw new ScmException( "Error while executing clearcase command.", ex );
+ }
+
+ if (exitCode != 0)
+ {
+ return new UpdateScmResult( cl.toString(), "The cleartool command failed.", stderr.getOutput(), false );
+ }
+
+ return new UpdateScmResult( cl.toString(), consumer.getUpdatedFiles() );
+ }
+
+ protected ChangeLogCommand getChangeLogCommand()
+ {
+ return new ClearCaseChangeLogCommand();
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( ScmFileSet scmFileSet )
+ {
+ Commandline command = new Commandline();
+
+ File workingDirectory = scmFileSet.getBasedir();
+
+ command.setWorkingDirectory( workingDirectory.getAbsolutePath() );
+
+ command.setExecutable( "cleartool" );
+
+ command.createArgument().setValue( "update" );
+
+ return command;
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java?rev=354417&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java Tue Dec 6 04:48:57 2005
@@ -0,0 +1,69 @@
+package org.apache.maven.scm.provider.clearcase.command.update;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.log.ScmLogger;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
+ */
+public class ClearCaseUpdateConsumer
+ implements StreamConsumer
+{
+ private ScmLogger logger;
+
+ private List updatedFiles = new ArrayList();
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public ClearCaseUpdateConsumer( ScmLogger logger )
+ {
+ this.logger = logger;
+ }
+
+ // ----------------------------------------------------------------------
+ // Stream Consumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ logger.debug( line );
+ if( line.indexOf( "Loading" ) > -1 )
+ {
+ int beginIndex = line.indexOf( '"' );
+ String fileName = line.substring( beginIndex + 1, line.indexOf( '"', beginIndex + 1 ) );
+ updatedFiles.add( new ScmFile( fileName, ScmFileStatus.UPDATED ) );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public List getUpdatedFiles()
+ {
+ return updatedFiles;
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java?rev=354417&r1=354416&r2=354417&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java Tue Dec 6 04:48:57 2005
@@ -17,6 +17,15 @@
*/
import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.StringTokenizer;
/**
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
@@ -25,12 +34,128 @@
public class ClearCaseScmProviderRepository
extends ScmProviderRepository
{
- public ClearCaseScmProviderRepository()
+ private boolean viewNameGivenByUser = false;
+ private String viewName;
+ private File configSpec;
+
+ /**
+ *
+ * @param url format is [view_name]:[url_to_configspec] or [view_name]|[url_to_configspec]
+ */
+ public ClearCaseScmProviderRepository( String url )
+ throws ScmRepositoryException
+ {
+ try
+ {
+ parseUrl( url );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new ScmRepositoryException( "Illegal URL: " + url + "(" + e.getMessage() + ")" );
+ }
+ catch ( URISyntaxException e )
+ {
+ throw new ScmRepositoryException( "Illegal URL: " + url + "(" + e.getMessage() + ")" );
+ }
+ catch ( UnknownHostException e )
+ {
+ throw new ScmRepositoryException( "Illegal URL: " + url + "(" + e.getMessage() + ")" );
+ }
+ }
+
+ private void parseUrl( String url )
+ throws MalformedURLException, URISyntaxException, UnknownHostException
+ {
+ if( url.indexOf( '|' ) != -1 )
+ {
+ StringTokenizer tokenizer = new StringTokenizer( url, "|" );
+ fillInProperties( tokenizer );
+ }
+ else
+ {
+ StringTokenizer tokenizer = new StringTokenizer( url, ":" );
+ fillInProperties( tokenizer );
+ }
+ }
+
+ private void fillInProperties( StringTokenizer tokenizer )
+ throws UnknownHostException, URISyntaxException, MalformedURLException
+ {
+ if( tokenizer.countTokens() == 1 )
+ {
+ //No view name was given
+ viewName = getDefaultViewName();
+ String spec = tokenizer.nextToken();
+ System.out.println( "spec = " + spec );
+ configSpec = createConfigSpecFile( spec );
+ }
+ else
+ {
+ viewName = tokenizer.nextToken();
+ viewNameGivenByUser = true;
+ System.out.println( "viewName = " + viewName );
+ String pathname = tokenizer.nextToken();
+ System.out.println( "pathname = " + pathname );
+ configSpec = createConfigSpecFile( pathname );
+ }
+ }
+
+ private File createConfigSpecFile( String spec )
+ throws URISyntaxException, MalformedURLException
{
+ File result;
+ if( spec.indexOf( ':' ) == -1 )
+ {
+ result = new File( spec );
+ }
+ else
+ {
+ result = new File( new URL( spec ).toURI() );
+ }
+ return result;
+ }
+
+ /**
+ * Default: ${hostname}-{user.name}-maven
+ * @return
+ */
+ private String getDefaultViewName()
+ throws UnknownHostException
+ {
+ String username = System.getProperty( "user.name", "nouser" );
+ String hostname = getHostName();
+ return username + "-" + hostname + "-maven";
+ }
+
+ private String getHostName()
+ throws UnknownHostException
+ {
+ return InetAddress.getLocalHost().getHostName();
+ }
+
+ /**
+ * Returns the name of the view. If it is defined in the scm url, then it is returned as defined there.
+ * If it is the default name, then the uniqueId is added
+ * @param uniqueId
+ * @return the name of the view
+ */
+ public String getViewName( String uniqueId )
+ {
+ String result;
+ if( viewNameGivenByUser )
+ {
+ result = viewName;
+ }
+ else
+ {
+ result = viewName + "-" + uniqueId;
+ }
+
+ return result;
}
- public String getModule()
+ public File getConfigSpec()
{
- return null;
+ return configSpec;
}
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkin/ClearCaseCheckInCommandTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkin/ClearCaseCheckInCommandTest.java?rev=354417&r1=354416&r2=354417&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkin/ClearCaseCheckInCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkin/ClearCaseCheckInCommandTest.java Tue Dec 6 04:48:57 2005
@@ -18,6 +18,7 @@
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.ScmException;
import org.codehaus.plexus.util.cli.Commandline;
import java.io.File;
@@ -28,6 +29,7 @@
public class ClearCaseCheckInCommandTest extends ScmTestCase
{
public void testCommand()
+ throws ScmException
{
File file = new File( "test.java" );
ScmFileSet scmFileSet = new ScmFileSet( getWorkingDirectory(), file );
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommandTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommandTest.java?rev=354417&r1=354416&r2=354417&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommandTest.java Tue Dec 6 04:48:57 2005
@@ -19,45 +19,26 @@
import org.apache.maven.scm.ScmTestCase;
import org.codehaus.plexus.util.cli.Commandline;
+import java.io.IOException;
import java.io.File;
/**
- * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- * @version $Id$
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
*/
public class ClearCaseCheckOutCommandTest
extends ScmTestCase
{
- public void testGetCommandLine()
- throws Exception
+ public void testCreateViewCommandLine()
+ throws IOException
{
- String branch = null;
-
- testCommandLine( branch,
- "cleartool co" );
+ Commandline commandLine = ClearCaseCheckOutCommand.createCreateViewCommandLine( getWorkingDirectory(), "testView" );
+ assertEquals( "cleartool mkview -snapshot -tag testView -vws " + ClearCaseCheckOutCommand.getViewStore() + "testView.vws " + getWorkingDirectory(), commandLine.toString() );
}
- public void testGetCommandLineWithBranch()
- throws Exception
+ public void testUpdateConfigSpec()
{
- String branch = "myBranch";
-
- testCommandLine( branch,
- "cleartool co -branch myBranch" );
- }
-
-
- // ----------------------------------------------------------------------
- //
- // ----------------------------------------------------------------------
-
- private void testCommandLine( String branch, String commandLine )
- throws Exception
- {
- File workingDirectory = getTestFile( "target/clearcase-checkout-command-test" );
-
- Commandline cl = ClearCaseCheckOutCommand.createCommandLine( workingDirectory, branch );
-
- assertEquals( commandLine, cl.toString() );
+ File configSpecLocation = new File( "\\\\myserver\\configspecs\\testconfigspec.txt" );
+ Commandline commandLine = ClearCaseCheckOutCommand.createUpdateConfigSpecCommandLine( getWorkingDirectory(), configSpecLocation, "testView" );
+ assertEquals( "cleartool setcs -tag testView " + configSpecLocation, commandLine.toString() );
}
}
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java?rev=354417&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java Tue Dec 6 04:48:57 2005
@@ -0,0 +1,34 @@
+package org.apache.maven.scm.provider.clearcase.command.update;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.ScmFileSet;
+import org.apache.maven.scm.ScmTestCase;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
+ */
+public class ClearCaseUpdateCommandTest extends ScmTestCase
+{
+ public void testCommand()
+ {
+ ScmFileSet scmFileSet = new ScmFileSet( getWorkingDirectory() );
+ Commandline commandLine = ClearCaseUpdateCommand.createCommandLine( scmFileSet );
+ assertEquals( "cleartool update", commandLine.toString() );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateCommandTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java?rev=354417&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java Tue Dec 6 04:48:57 2005
@@ -0,0 +1,60 @@
+package org.apache.maven.scm.provider.clearcase.command.update;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.log.DefaultLog;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Collection;
+
+/**
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
+ */
+public class ClearCaseUpdateConsumerTest extends ScmTestCase
+{
+ public void testConsumer() throws IOException
+ {
+ InputStream inputStream = getResourceAsStream( "/clearcase/update/update.txt" );
+
+ BufferedReader in = new BufferedReader( new InputStreamReader( inputStream ) );
+
+ String s = in.readLine();
+
+ ClearCaseUpdateConsumer consumer = new ClearCaseUpdateConsumer( new DefaultLog() );
+
+ while (s != null)
+ {
+ consumer.consumeLine( s );
+
+ s = in.readLine();
+ }
+
+ Collection entries = consumer.getUpdatedFiles();
+
+ assertEquals( "Wrong number of entries returned", 1, entries.size() );
+
+ ScmFile scmFile = (ScmFile)entries.iterator().next();
+ assertEquals( "my_vob\\modules\\utils\\utils-logging-jar\\testfile.txt", scmFile.getPath() );
+ assertEquals( ScmFileStatus.UPDATED, scmFile.getStatus() );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/command/update/ClearCaseUpdateConsumerTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java?rev=354417&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java Tue Dec 6 04:48:57 2005
@@ -0,0 +1,66 @@
+package org.apache.maven.scm.provider.clearcase.repository;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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 junit.framework.TestCase;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+
+import java.io.IOException;
+import java.io.File;
+
+/**
+ * @author <a href="mailto:wim.deblauwe@gmail.com">Wim Deblauwe</a>
+ */
+public class ClearCaseScmProviderRepositoryTest extends TestCase
+{
+ public ClearCaseScmProviderRepositoryTest()
+ {
+ }
+
+ public void testParsingUrlWithPipe()
+ throws ScmRepositoryException, IOException
+ {
+ String viewName = "my_module_view";
+ String configSpecPath = "//myserver/ClearCase/ConfigSpecs/mymodule.txt";
+ String url = viewName + "|" + configSpecPath;
+ ClearCaseScmProviderRepository repository = new ClearCaseScmProviderRepository( url );
+ assertEquals( new File( configSpecPath ).getPath(), repository.getConfigSpec().getPath() );
+ assertEquals( viewName, repository.getViewName( "bla" ) );
+ }
+
+ public void testParsingUrlWithColon()
+ throws ScmRepositoryException
+ {
+ String viewName = "my_module_view";
+ String configSpecPath = "//myserver/ClearCase/ConfigSpecs/mymodule.txt";
+ String url = viewName + ":" + configSpecPath;
+ ClearCaseScmProviderRepository repository = new ClearCaseScmProviderRepository( url );
+ assertEquals( new File( configSpecPath ).getPath(), repository.getConfigSpec().getPath() );
+ assertEquals( viewName, repository.getViewName( "bla" ) );
+ }
+
+ public void testParsingUrlWithoutViewName()
+ throws ScmRepositoryException
+ {
+ String configSpecPath = "//myserver/ClearCase/ConfigSpecs/mymodule.txt";
+ String url = configSpecPath;
+ ClearCaseScmProviderRepository repository = new ClearCaseScmProviderRepository( url );
+ assertEquals( new File( configSpecPath ).getPath(), repository.getConfigSpec().getPath() );
+ assertNotNull( repository.getViewName( "15" ) );
+ assertTrue( repository.getViewName( "15" ).indexOf( "15" ) != -1 );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt?rev=354417&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt Tue Dec 6 04:48:57 2005
@@ -0,0 +1,51 @@
+Processing dir "my_vob\modules\utils".
+Making dir "my_vob\modules\utils\utils-logging-jar".
+Processing dir "my_vob\modules\utils\utils-logging-jar".
+.
+Processing dir "my_vob\modules\utils\utils-logging-jar\src".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\main".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\main\com".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp\mis".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp\mis\utils".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp\mis\utils\logging".
+...
+End dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp\mis\utils\logging".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp\mis\utils".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp\mis".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\main\com\mycomp".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\main\com".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\main".
+.
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\test".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\test\com".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp\mis".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp\mis\utils".
+Processing dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp\mis\utils\logging".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp\mis\utils\logging".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp\mis\utils".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp\mis".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\test\com\mycomp".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\test\com".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src\test".
+.
+End dir "my_vob\modules\utils\utils-logging-jar\src".
+.
+Loading "my_vob\modules\utils\utils-logging-jar\testfile.txt" (50 bytes).
+End dir "my_vob\modules\utils\utils-logging-jar".
+End dir "my_vob\modules\utils".
+.
+Done loading "\my_vob\modules\utils" (21 objects, copied 0 KB).
+Log has been written to "C:\Program Files\Apache Software Foundation\continuum-1.0.1\apps\continuum\working-directory\32\update.01-dec-05.16.11.18.updt".
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/resources/clearcase/update/update.txt
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"