You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/05/05 05:37:34 UTC
svn commit: r399938 - in /maven/sandbox/wagon-scm/src:
main/java/org/apache/maven/wagon/providers/scm/
test/java/org/apache/maven/wagon/providers/scm/
Author: carlos
Date: Thu May 4 20:37:33 2006
New Revision: 399938
URL: http://svn.apache.org/viewcvs?rev=399938&view=rev
Log:
Allow put files when remote SCM path doesn't exist
Refactor tests
Removed:
maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmSvnJavaWagonTest.java
Modified:
maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java
maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmSvnWagonTest.java
maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java
maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmCvsExeWagonTest.java
maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmSvnExeWagonTest.java
Modified: maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java
URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java?rev=399938&r1=399937&r2=399938&view=diff
==============================================================================
--- maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java (original)
+++ maven/sandbox/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java Thu May 4 20:37:33 2006
@@ -23,6 +23,8 @@
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmResult;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.command.list.ListScmResult;
import org.apache.maven.scm.manager.NoSuchScmProviderException;
import org.apache.maven.scm.manager.ScmManager;
import org.apache.maven.scm.provider.ScmProvider;
@@ -218,9 +220,7 @@
try
{
- File scmFile = new File( checkoutDirectory, resourceName );
-
- File basedir = scmFile.getParentFile();
+ File basedir = checkoutDirectory;
String msg = "Wagon: Adding " + source.getName() + " to repository";
@@ -230,19 +230,20 @@
String reservedScmFile = scmProvider.getScmSpecificFilename();
+ File newCheckoutDirectory = checkoutDirectory;
+
if ( reservedScmFile != null && new File( basedir, reservedScmFile ).exists() )
{
result = scmProvider.update( scmRepository, new ScmFileSet( basedir ), null );
+
+ checkScmResult( result );
}
else
{
- /*
- * TODO if the scmRepository points to a non existing folder we need to create all
- * the hierarchy of parent folders up to the existing one
- */
- result = scmProvider.checkOut( scmRepository, new ScmFileSet( basedir ), null );
+ newCheckoutDirectory = mkdirs( scmProvider, scmRepository, basedir );
}
- checkScmResult( result );
+
+ File scmFile = new File( newCheckoutDirectory, resourceName );
boolean fileAlreadyInScm = scmFile.exists();
@@ -260,14 +261,14 @@
if ( !fileAlreadyInScm || scmFile.isDirectory() )
{
- int addedFiles = addFiles( scmProvider, scmRepository, basedir, scmFile.getName() );
+ int addedFiles = addFiles( scmProvider, scmRepository, newCheckoutDirectory, scmFile.getName() );
if ( !fileAlreadyInScm && addedFiles == 0 )
{
throw new TransferFailedException( "Unable to add file to SCM: " + scmFile );
}
}
- result = scmProvider.checkIn( scmRepository, new ScmFileSet( basedir, scmFile.getName(), null ), null, msg );
+ result = scmProvider.checkIn( scmRepository, new ScmFileSet( newCheckoutDirectory, scmFile.getName(), null ), null, msg );
checkScmResult( result );
@@ -341,6 +342,82 @@
}
/**
+ * Make the necessary directories in the SCM repository to commit the files in the place asked
+ *
+ * @param scmProvider
+ * @param repository
+ * @param basedir
+ * @return the new checkout directory. Will be <code>null</code> if it does not need to change.
+ * @throws ScmException
+ * @throws TransferFailedException
+ */
+ private File mkdirs( ScmProvider scmProvider, ScmRepository repository, File basedir )
+ throws ScmException, TransferFailedException
+ {
+ ScmProviderRepository baseProviderRepository = repository.getProviderRepository();
+
+ ScmFileSet fileSet = new ScmFileSet( basedir, new File( "." ) );
+
+ ListScmResult listScmResult;
+
+ ScmRepository baseRepository = repository;
+
+ ScmProviderRepository lastBaseProviderRepository = baseProviderRepository;
+
+ while ( baseProviderRepository != null )
+ {
+ listScmResult = scmProvider.list( baseRepository, fileSet, false, null );
+
+ if ( listScmResult.isSuccess() )
+ {
+ break;
+ }
+
+ lastBaseProviderRepository = baseProviderRepository;
+
+ baseProviderRepository = baseProviderRepository.getParent();
+
+ baseRepository = new ScmRepository( repository.getProvider(), baseProviderRepository );
+ }
+
+ if ( baseProviderRepository != null )
+ {
+ String relativePath = repository.getProviderRepository().getRelativePath( baseProviderRepository );
+
+ if ( relativePath != null )
+ {
+ scmProvider.checkOut( baseRepository, new ScmFileSet( basedir ), null );
+
+ File path = new File( basedir, relativePath );
+
+ path.mkdirs();
+
+ String folderNameToCommit = lastBaseProviderRepository.getRelativePath( baseProviderRepository );
+
+ addFiles( scmProvider, baseRepository, basedir, folderNameToCommit );
+
+ scmProvider.checkIn( baseRepository, new ScmFileSet( basedir, new File( folderNameToCommit ) ), null,
+ "Adding required folders for Wagon.put" );
+
+ return path;
+ }
+ else
+ {
+ /* folder already in SCM */
+
+ CheckOutScmResult result = scmProvider.checkOut( repository, new ScmFileSet( basedir ), null );
+
+ checkScmResult( result );
+
+ return basedir;
+ }
+ }
+
+ throw new TransferFailedException( "Unable to create directories in the remote repository: "
+ + repository.getProviderRepository() );
+ }
+
+ /**
* @return true
*/
public boolean supportsDirectoryCopy()
@@ -369,8 +446,8 @@
{
if ( !result.isSuccess() )
{
- throw new TransferFailedException(
- "Unable to commit file. " + result.getProviderMessage() + " " + result.getCommandOutput() );
+ throw new TransferFailedException( "Unable to commit file. " + result.getProviderMessage() + " "
+ + result.getCommandOutput() );
}
}
Modified: maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmSvnWagonTest.java
URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmSvnWagonTest.java?rev=399938&r1=399937&r2=399938&view=diff
==============================================================================
--- maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmSvnWagonTest.java (original)
+++ maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmSvnWagonTest.java Thu May 4 20:37:33 2006
@@ -45,7 +45,7 @@
}
repository = repository.replace( '\\', '/' );
- return "scm:svn:file://" + repository + "/newfolder";
+ return "scm:svn:file://" + repository;
}
}
Modified: maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java
URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java?rev=399938&r1=399937&r2=399938&view=diff
==============================================================================
--- maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java (original)
+++ maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/AbstractScmWagonTest.java Thu May 4 20:37:33 2006
@@ -31,6 +31,8 @@
import org.codehaus.plexus.util.FileUtils;
/**
+ * Test for {@link ScmWagon}. You need a subclass for each SCM provider you want to test.
+ *
* @author <a href="carlos@apache.org">Carlos Sanchez</a>
* @version $Id$
*/
@@ -38,23 +40,46 @@
extends WagonTestCase
{
+ private ScmWagon wagon;
+
+ private String providerClassName;
+
protected void setUp()
throws Exception
{
super.setUp();
FileUtils.deleteDirectory( getCheckoutDirectory() );
+
+ if ( wagon == null )
+ {
+ wagon = (ScmWagon) super.getWagon();
+
+ DefaultScmManager scmManager = (DefaultScmManager) wagon.getScmManager();
+
+ if ( getScmProvider() != null )
+ {
+ scmManager.setScmProvider( getScmId(), getScmProvider() );
+
+ providerClassName = getScmProvider().getClass().getName();
+ }
+ else
+ {
+ providerClassName = scmManager.getProviderByType( getScmId() ).getClass().getName();
+ }
+
+ wagon.setCheckoutDirectory( getCheckoutDirectory() );
+ }
}
/**
- * Allows overriding the ScmProvider injected by default.
- * Useful to force the implementation to use for a particular SCM type.
+ * Allows overriding the {@link ScmProvider} injected by default in the {@link ScmWagon}.
+ * Useful to force the implementation to use for a particular SCM type.
+ * If this method returns <code>null</code> {@link ScmWagon} will use the default {@link ScmProvider}.
*
* @return the {@link ScmProvider} to use in the {@link ScmWagon}
- * @throws Exception
*/
protected ScmProvider getScmProvider()
- throws Exception
{
return null;
}
@@ -62,25 +87,12 @@
protected Wagon getWagon()
throws Exception
{
- ScmWagon wagon = (ScmWagon) super.getWagon();
-
- wagon.setCheckoutDirectory( getCheckoutDirectory() );
-
- if ( getScmProvider() != null )
- {
- DefaultScmManager scmManager = (DefaultScmManager) wagon.getScmManager();
-
- scmManager.setScmProvider( getScmId(), getScmProvider() );
-
- wagon.setScmManager( scmManager );
- }
-
return wagon;
}
private File getCheckoutDirectory()
{
- return new File( FileTestUtils.getTestOutputDir(), "/checkout-" + getScmId() );
+ return new File( FileTestUtils.getTestOutputDir(), "/checkout-" + providerClassName );
}
/**
Modified: maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmCvsExeWagonTest.java
URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmCvsExeWagonTest.java?rev=399938&r1=399937&r2=399938&view=diff
==============================================================================
--- maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmCvsExeWagonTest.java (original)
+++ maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmCvsExeWagonTest.java Thu May 4 20:37:33 2006
@@ -30,9 +30,32 @@
{
protected ScmProvider getScmProvider()
- throws Exception
{
return new CvsExeScmProvider();
+ }
+
+ public void testFailedGet()
+ throws Exception
+ {
+ // Not ready yet
+ }
+
+ public void testWagon()
+ throws Exception
+ {
+ // Not ready yet
+ }
+
+ public void testWagonPutDirectory()
+ throws Exception
+ {
+ // Not ready yet
+ }
+
+ public void testWagonPutDirectoryWhenDirectoryAlreadyExists()
+ throws Exception
+ {
+ // Not ready yet
}
}
Modified: maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmSvnExeWagonTest.java
URL: http://svn.apache.org/viewcvs/maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmSvnExeWagonTest.java?rev=399938&r1=399937&r2=399938&view=diff
==============================================================================
--- maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmSvnExeWagonTest.java (original)
+++ maven/sandbox/wagon-scm/src/test/java/org/apache/maven/wagon/providers/scm/ScmSvnExeWagonTest.java Thu May 4 20:37:33 2006
@@ -30,7 +30,6 @@
{
protected ScmProvider getScmProvider()
- throws Exception
{
return new SvnExeScmProvider();
}