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 br...@apache.org on 2005/01/03 04:19:56 UTC
cvs commit: maven-scm/maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkin CvsCheckInCommand.java
brett 2005/01/02 19:19:56
Modified: maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/add
SvnAddCommand.java
maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/checkin
SvnCheckInCommand.java
maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/checkin
SvnCheckInCommandTest.java
maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin
CheckInCommandTckTest.java
maven-scm-api/src/main/java/org/apache/maven/scm
ScmFileSet.java
maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/add
LocalAddCommand.java
maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/checkin
LocalCheckInCommand.java
maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkin
CvsCheckInCommand.java
Log:
check in command now supports partial file sets, and is tested in the TCK
Revision Changes Path
1.2 +2 -2 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/add/SvnAddCommand.java
Index: SvnAddCommand.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/add/SvnAddCommand.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SvnAddCommand.java 30 Dec 2004 10:05:29 -0000 1.1
+++ SvnAddCommand.java 3 Jan 2005 03:19:56 -0000 1.2
@@ -49,7 +49,7 @@
if ( fileSet.getFiles().length == 0 )
{
- throw new ScmException( "You must provide at leaast one file/directory to add" );
+ throw new ScmException( "You must provide at least one file/directory to add" );
}
Commandline cl = createCommandLine( fileSet.getBasedir(), fileSet.getFiles() );
1.4 +10 -10 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/checkin/SvnCheckInCommand.java
Index: SvnCheckInCommand.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/checkin/SvnCheckInCommand.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SvnCheckInCommand.java 3 Jan 2005 02:04:08 -0000 1.3
+++ SvnCheckInCommand.java 3 Jan 2005 03:19:56 -0000 1.4
@@ -42,12 +42,6 @@
String tag )
throws ScmException
{
- // TODO: it should
- if ( fileSet.getFiles().length != 0 )
- {
- throw new ScmException( "This command can only commit entire working directories." );
- }
-
if ( !StringUtils.isEmpty( tag ) )
{
throw new ScmException( "This provider can't handle tags." );
@@ -64,7 +58,7 @@
return new CheckInScmResult( "Error while making a temporary file for the commit message: " + ex.getMessage(), null, false );
}
- Commandline cl = createCommandLine( (SvnScmProviderRepository) repo, fileSet.getBasedir(), messageFile );
+ Commandline cl = createCommandLine( (SvnScmProviderRepository) repo, fileSet, messageFile );
SvnCheckInConsumer consumer = new SvnCheckInConsumer( getLogger(), fileSet.getBasedir() );
@@ -107,13 +101,13 @@
//
// ----------------------------------------------------------------------
- public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory, File messageFile )
+ public static Commandline createCommandLine( SvnScmProviderRepository repository, ScmFileSet fileSet, File messageFile )
{
Commandline cl = new Commandline();
cl.setExecutable( "svn" );
- cl.setWorkingDirectory( workingDirectory.getAbsolutePath() );
+ cl.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );
cl.createArgument().setValue( "commit" );
@@ -136,6 +130,12 @@
cl.createArgument().setValue( "--file" );
cl.createArgument().setValue( messageFile.getAbsolutePath() );
+
+ File[] files = fileSet.getFiles();
+ for ( int i = 0; i < files.length; i++ )
+ {
+ cl.createArgument().setValue( files[i].getPath().replace( '\\', '/' ) );
+ }
return cl;
}
1.4 +4 -2 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/checkin/SvnCheckInCommandTest.java
Index: SvnCheckInCommandTest.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/checkin/SvnCheckInCommandTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SvnCheckInCommandTest.java 24 Dec 2004 03:04:47 -0000 1.3
+++ SvnCheckInCommandTest.java 3 Jan 2005 03:19:56 -0000 1.4
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTestCase;
import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepository;
@@ -89,7 +90,8 @@
SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) repository.getProviderRepository();
- Commandline cl = SvnCheckInCommand.createCommandLine( svnRepository, workingDirectory, messageFile );
+ Commandline cl = SvnCheckInCommand.createCommandLine( svnRepository, new ScmFileSet( workingDirectory ),
+ messageFile );
assertEquals( commandLine, cl.toString() );
}
1.2 +77 -3 maven-scm/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
Index: CheckInCommandTckTest.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CheckInCommandTckTest.java 3 Jan 2005 00:49:39 -0000 1.1
+++ CheckInCommandTckTest.java 3 Jan 2005 03:19:56 -0000 1.2
@@ -91,7 +91,7 @@
{
super.setUp();
- File repositoryRoot = getTestFile( "target/checkin-tck-test/repository" );
+ File repositoryRoot = getRepositoryRoot();
if ( repositoryRoot.exists() )
{
@@ -101,7 +101,7 @@
assertTrue( "Could not make the repository root directory: " + repositoryRoot.getAbsolutePath(),
repositoryRoot.mkdirs() );
- workingDirectory = getTestFile( "target/checkin-tck-test/working-copy" );
+ workingDirectory = getWorkingCopy();
if ( workingDirectory.exists() )
{
@@ -111,6 +111,7 @@
assertTrue( "Could not make the working directory: " + workingDirectory.getAbsolutePath(),
workingDirectory.mkdirs() );
+ // TODO: have assertion directory globally, and cleanup -tck-test stuff
assertionDirectory = getTestFile( "target/checkin-tck-test/assertion-copy" );
if ( assertionDirectory.exists() )
@@ -208,6 +209,79 @@
assertTrue( "check can read readme.txt", readmeTxt.canRead() );
assertEquals( "check readme.txt contents", "changed file", FileUtils.fileRead( readmeTxt ) );
+ }
+
+ public void testCheckInCommandPartialFileset()
+ throws Exception
+ {
+ // Make sure that the correct files was checked out
+ File fooJava = new File( workingDirectory, "src/main/java/Foo.java" );
+
+ File barJava = new File( workingDirectory, "src/main/java/Bar.java" );
+
+ File readmeTxt = new File( workingDirectory, "readme.txt" );
+
+ assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() );
+
+ assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() );
+
+ assertTrue( "check can read readme.txt", readmeTxt.canRead() );
+
+ // Change the files
+ createFooJava( fooJava );
+
+ createBarJava( barJava );
+
+ changeReadmeTxt( readmeTxt );
+
+ AddScmResult addResult = scmManager.add( repository,
+ new ScmFileSet( workingDirectory, "src/main/java/Foo.java", null ) );
+
+ assertResultIsSuccess( addResult );
+
+ CheckInScmResult result = scmManager.checkIn( repository,
+ new ScmFileSet( workingDirectory, "**/Foo.java", null ), null,
+ "Commit message" );
+
+ assertResultIsSuccess( result );
+
+ assertNull( "The provider message wasn't null", result.getProviderMessage() );
+
+ assertNull( "The command output wasn't null", result.getCommandOutput() );
+
+ List files = result.getCheckedInFiles();
+
+ assertNotNull( files );
+
+ assertEquals( 1, files.size() );
+
+ ScmFile file1 = (ScmFile) files.get( 0 );
+
+ assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() );
+
+ assertPath( "/test-repo/check-in/Foo.java", file1.getPath() );
+
+ assertNull( result.getProviderMessage() );
+
+ assertNull( result.getCommandOutput() );
+
+ CheckOutScmResult checkoutResult = scmManager.checkOut( repository, new ScmFileSet( assertionDirectory ), null );
+
+ assertResultIsSuccess( checkoutResult );
+
+ fooJava = new File( assertionDirectory, "src/main/java/Foo.java" );
+
+ barJava = new File( assertionDirectory, "src/main/java/Bar.java" );
+
+ readmeTxt = new File( assertionDirectory, "readme.txt" );
+
+ assertTrue( "check can read Foo.java", fooJava.canRead() );
+
+ assertFalse( "check Bar.java doesn't exist", barJava.canRead() );
+
+ assertTrue( "check can read readme.txt", readmeTxt.canRead() );
+
+ assertEquals( "check readme.txt contents", "/readme.txt", FileUtils.fileRead( readmeTxt ) );
}
private void createFooJava( File fooJava )
1.5 +3 -2 maven-scm/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java
Index: ScmFileSet.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ScmFileSet.java 30 Dec 2004 10:05:29 -0000 1.4
+++ ScmFileSet.java 3 Jan 2005 03:19:56 -0000 1.5
@@ -30,6 +30,7 @@
{
private File basedir;
+ /** List of files, all relative to the basedir. */
private File[] files;
private static final File[] EMPTY_FILE_ARRAY = new File[0];
@@ -49,7 +50,7 @@
this.basedir = basedir;
// TODO: just use a list instead?
- files = (File[]) FileUtils.getFiles( basedir, includes, excludes ).toArray( EMPTY_FILE_ARRAY );
+ files = (File[]) FileUtils.getFiles( basedir, includes, excludes, false ).toArray( EMPTY_FILE_ARRAY );
}
public ScmFileSet( File basedir, File[] files )
1.3 +9 -17 maven-scm/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/add/LocalAddCommand.java
Index: LocalAddCommand.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/add/LocalAddCommand.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LocalAddCommand.java 3 Jan 2005 01:33:58 -0000 1.2
+++ LocalAddCommand.java 3 Jan 2005 03:19:56 -0000 1.3
@@ -17,7 +17,9 @@
*/
import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
import org.apache.maven.scm.ScmResult;
import org.apache.maven.scm.command.add.AbstractAddCommand;
import org.apache.maven.scm.command.add.AddScmResult;
@@ -26,7 +28,8 @@
import org.apache.maven.scm.provider.local.repository.LocalScmProviderRepository;
import java.io.File;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.List;
/**
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
@@ -43,26 +46,15 @@
LocalScmProviderRepository localRepo = (LocalScmProviderRepository) repository;
File[] files = fileSet.getFiles();
+ List fileList = new ArrayList();
for ( int i = 0; i < files.length; i++ )
{
- // TODO: better to standardise on relative paths inside fileset
-
- String path = files[i].getPath();
- if ( path.startsWith( fileSet.getBasedir().getPath() ) )
- {
- path = path.substring( fileSet.getBasedir().getPath().length() );
- }
- path = path.replace( '\\', '/' );
-
- if ( path.startsWith( "/" ) )
- {
- path = path.substring( 1 );
- }
-
+ String path = files[i].getPath().replace( '\\', '/' );
localRepo.addFile( path );
+ fileList.add( new ScmFile( path, ScmFileStatus.ADDED ) );
}
// TODO: Also, ensure it is tested from the update test
- return new AddScmResult( Collections.EMPTY_LIST );
+ return new AddScmResult( fileList );
}
}
1.4 +10 -8 maven-scm/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/checkin/LocalCheckInCommand.java
Index: LocalCheckInCommand.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/checkin/LocalCheckInCommand.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LocalCheckInCommand.java 3 Jan 2005 01:33:58 -0000 1.3
+++ LocalCheckInCommand.java 3 Jan 2005 03:19:56 -0000 1.4
@@ -31,6 +31,7 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@@ -83,19 +84,20 @@
// Only copy files newer than in the repo
File repoRoot = new File( repository.getRoot(), repository.getModule() );
- Iterator it = FileUtils.getFiles( baseDestination, "**", null ).iterator();
+ List files = Arrays.asList( fileSet.getFiles() );
+ if ( files.isEmpty() )
+ {
+ files = FileUtils.getFiles( baseDestination, "**", null, false );
+ }
+ Iterator it = files.iterator();
while ( it.hasNext() )
{
File file = (File) it.next();
- String path = file.getAbsolutePath().substring( baseDestination.getAbsolutePath().length() ).replace( '\\', '/' );
- if ( path.startsWith( "/" ) )
- {
- path = path.substring( 1 );
- }
-
+ String path = file.getPath().replace( '\\', '/' );
File repoFile = new File( repoRoot, path );
+ file = new File( baseDestination, path );
ScmFileStatus status;
1.6 +6 -3 maven-scm/maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkin/CvsCheckInCommand.java
Index: CvsCheckInCommand.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkin/CvsCheckInCommand.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- CvsCheckInCommand.java 24 Dec 2004 03:04:45 -0000 1.5
+++ CvsCheckInCommand.java 3 Jan 2005 03:19:56 -0000 1.6
@@ -85,8 +85,11 @@
cl.createArgument().setValue( messageFile.getAbsolutePath() );
- // TODO: should be committing files here instead - for now check in everything
- // cl.createArgument().setValue( repository.getModule() );
+ File[] files = fileSet.getFiles();
+ for ( int i = 0; i < files.length; i++ )
+ {
+ cl.createArgument().setValue( files[i].getPath().replace( '\\', '/' ) );
+ }
CvsCheckInConsumer consumer = new CvsCheckInConsumer( repository.getPath() );