You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@continuum.apache.org by Emmanuel Venisse <em...@gmail.com> on 2008/04/21 15:32:53 UTC
Re: svn commit: r649749 - in /continuum/trunk/continuum-core/src: main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
Is it work on windows??? chroot/sudo aren't DOS commands.
Emmanuel
On Sat, Apr 19, 2008 at 5:17 AM, <ca...@apache.org> wrote:
> Author: carlos
> Date: Fri Apr 18 20:17:07 2008
> New Revision: 649749
>
> URL: http://svn.apache.org/viewvc?rev=649749&view=rev
> Log:
> [CONTINUUM-1731] Add some commands to use a chroot jail in the build
> executor, keeping previous functionality unmodified
>
> Added:
>
> continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> (with props)
> Modified:
>
> continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
>
> Modified:
> continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> URL:
> http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java?rev=649749&r1=649748&r2=649749&view=diff
>
> ==============================================================================
> ---
> continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> (original)
> +++
> continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> Fri Apr 18 20:17:07 2008
> @@ -19,6 +19,7 @@
> * under the License.
> */
>
> +import org.apache.maven.continuum.configuration.ConfigurationService;
> import org.apache.maven.continuum.installation.InstallationService;
> import org.apache.maven.continuum.model.project.BuildDefinition;
> import org.apache.maven.continuum.model.project.Project;
> @@ -51,6 +52,9 @@
> extends AbstractLogEnabled
> implements ContinuumBuildExecutor, Initializable
> {
> + private static final String SUDO_EXECUTABLE = "sudo";
> + private static final String CHROOT_EXECUTABLE = "chroot";
> +
> //
> ----------------------------------------------------------------------
> //
> //
> ----------------------------------------------------------------------
> @@ -78,6 +82,11 @@
> /**
> * @plexus.configuration
> */
> + private File chrootJailDirectory;
> +
> + /**
> + * @plexus.configuration
> + */
> private String defaultExecutable;
>
> //
> ----------------------------------------------------------------------
> @@ -232,6 +241,26 @@
>
> try
> {
> + File chrootJailDirectory = getChrootJailDirectory();
> + if ( chrootJailDirectory != null )
> + {
> + StringBuilder sb = new StringBuilder();
> + sb.append( CHROOT_EXECUTABLE );
> + sb.append( " " );
> + sb.append( new File( chrootJailDirectory,
> project.getGroupId() ) );
> + sb.append( " " );
> + sb.append( " cd " );
> + sb.append( getRelativePath( chrootJailDirectory,
> workingDirectory, project.getGroupId() ) );
> + sb.append( " && " );
> + sb.append( actualExecutable );
> + sb.append( " " );
> + sb.append( arguments );
> +
> + arguments = sb.toString();
> + actualExecutable = SUDO_EXECUTABLE;
> + workingDirectory = chrootJailDirectory; // not really
> used but must exist
> + }
> +
> ExecutionResult result =
> getShellCommandHelper().executeShellCommand(
> workingDirectory, actualExecutable, arguments, output,
>
> project.getId(), environments );
> @@ -260,6 +289,21 @@
> }
> }
>
> + private String getRelativePath( File chrootDir, File
> workingDirectory, String groupId )
> + {
> + String path = workingDirectory.getPath();
> + String chrootBase = new File( chrootDir, groupId ).getPath();
> + if ( path.startsWith( chrootBase ) )
> + {
> + return path.substring( chrootBase.length(), path.length() );
> + }
> + else
> + {
> + throw new IllegalArgumentException( "Working directory is not
> inside the chroot jail " + chrootBase +
> + " , " + path );
> + }
> + }
> +
> protected abstract Map<String, String> getEnvironments(
> BuildDefinition buildDefinition );
>
> protected String getJavaHomeValue( BuildDefinition buildDefinition )
> @@ -374,5 +418,15 @@
> public void setExecutableResolver( ExecutableResolver
> executableResolver )
> {
> this.executableResolver = executableResolver;
> + }
> +
> + public void setChrootJailDirectory( File chrootJailDirectory )
> + {
> + this.chrootJailDirectory = chrootJailDirectory;
> + }
> +
> + public File getChrootJailDirectory()
> + {
> + return chrootJailDirectory;
> }
> }
>
> Added:
> continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> URL:
> http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java?rev=649749&view=auto
>
> ==============================================================================
> ---
> continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> (added)
> +++
> continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> Fri Apr 18 20:17:07 2008
> @@ -0,0 +1,141 @@
> +package org.apache.maven.continuum.execution;
> +
> +import java.io.File;
> +import java.util.HashMap;
> +import java.util.Map;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.maven.continuum.configuration.ConfigurationService;
> +import
> org.apache.maven.continuum.configuration.DefaultConfigurationService;
> +import org.apache.maven.continuum.model.project.BuildDefinition;
> +import org.apache.maven.continuum.model.project.Project;
> +import org.apache.maven.continuum.model.project.ProjectGroup;
> +import
> org.apache.maven.continuum.utils.ChrootJailWorkingDirectoryService;
> +import org.apache.maven.continuum.utils.shell.ExecutionResult;
> +import org.apache.maven.continuum.utils.shell.ShellCommandHelper;
> +import org.codehaus.plexus.logging.Logger;
> +import org.codehaus.plexus.logging.console.ConsoleLogger;
> +import org.jmock.Expectations;
> +import org.jmock.Mock;
> +import org.jmock.Mockery;
> +import org.jmock.core.Constraint;
> +
> +public class AbstractContinuumBuildExecutorTest
> + extends TestCase
> +{
> + protected AbstractBuildExecutor executor = new BuildExecutorStub();
> +
> + private Mockery context = new Mockery();
> +
> + private String toSystemPath( String path )
> + {
> + if ( File.separator.equals( "\\" ) )
> + {
> + return path.replaceAll( "/", "\\" + File.separator );
> + }
> + return path;
> + }
> +
> + public void testExecuteShellCommand()
> + throws Exception
> + {
> + final File chrootJailFile = new File( toSystemPath( "/home" ) );
> + final File workingDirectory = new File( toSystemPath(
> "/dir1/dir2/workingdir" ) );
> +
> + final ShellCommandHelper helper = context.mock(
> ShellCommandHelper.class );
> +
> + ConfigurationService configurationService = new
> DefaultConfigurationService()
> + {
> + @Override
> + public File getWorkingDirectory()
> + {
> + return workingDirectory;
> + }
> + };
> +
> + ChrootJailWorkingDirectoryService directoryService = new
> ChrootJailWorkingDirectoryService();
> + directoryService.setConfigurationService( configurationService );
> + directoryService.setChrootJailDirectory( chrootJailFile );
> +
> + executor.setChrootJailDirectory( chrootJailFile );
> + executor.setShellCommandHelper( helper );
> + executor.setWorkingDirectoryService( directoryService );
> + executor.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, ""
> ) );
> +
> + final Project project = new Project();
> + project.setId( 7 );
> + project.setGroupId( "xx" );
> + ProjectGroup projectGroup = new ProjectGroup();
> + projectGroup.setGroupId( project.getGroupId() );
> + project.setProjectGroup( projectGroup );
> +
> + assertEquals( toSystemPath( chrootJailFile.getPath() + "/" +
> project.getGroupId() + workingDirectory.getPath() +
> + "/" + project.getId() ),
> directoryService.getWorkingDirectory( project ).getPath() );
> +
> + String executable = "mvn";
> + final String arguments = "-o clean install";
> + final File output = new File( "target/tmp" );
> + final Map<String, String> environments = new HashMap<String,
> String>();
> +
> + final String cmd =
> + "chroot /home/xx " + " cd /dir1/dir2/workingdir/" +
> project.getId() + " && " + executable + " " + arguments;
> + // Constraint[] args =
> + // new Constraint[] { eq( chrootJailFile ), eq( "sudo" ), eq(
> toSystemPath( cmd ) ), eq( output ),
> + // eq( project.getId() ), eq( environments ) };
> + final ExecutionResult result = new ExecutionResult( 0 );
> +
> + context.checking( new Expectations()
> + {
> + {
> + one( helper ).executeShellCommand( chrootJailFile,
> "sudo", toSystemPath( cmd ), output,
> + project.getId(),
> environments );
> + will( returnValue( result ) );
> + }
> + } );
> +
> + // helperMock.expects( once() ).method( "executeShellCommand"
> ).with( args ).will( returnValue( result ) );
> +
> + executor.executeShellCommand( project, executable, arguments,
> output, environments );
> +
> + context.assertIsSatisfied();
> + // super.verify();
> + }
> +
> + class BuildExecutorStub
> + extends AbstractBuildExecutor
> + {
> +
> + protected BuildExecutorStub()
> + {
> + super( "stub", true );
> + }
> +
> + protected String findExecutable( Project project, String
> executable, String defaultExecutable,
> + boolean resolveExecutable, File
> workingDirectory )
> + {
> + return executable;
> + }
> +
> + @Override
> + protected Map<String, String> getEnvironments( BuildDefinition
> buildDefinition )
> + {
> + // TODO Auto-generated method stub
> + return null;
> + }
> +
> + public ContinuumBuildExecutionResult build( Project project,
> BuildDefinition buildDefinition, File buildOutput )
> + throws ContinuumBuildExecutorException
> + {
> + // TODO Auto-generated method stub
> + return null;
> + }
> +
> + public void updateProjectFromCheckOut( File workingDirectory,
> Project project, BuildDefinition buildDefinition )
> + throws ContinuumBuildExecutorException
> + {
> + // TODO Auto-generated method stub
> +
> + }
> + }
> +}
>
> Propchange:
> continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
>
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange:
> continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
>
> ------------------------------------------------------------------------------
> svn:keywords = "Author Date Id Revision"
>
>
>
Re: svn commit: r649749 - in /continuum/trunk/continuum-core/src: main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
Posted by Emmanuel Venisse <em...@gmail.com>.
On Thu, Apr 24, 2008 at 9:39 AM, Wendy Smoak <ws...@gmail.com> wrote:
> On Mon, Apr 21, 2008 at 9:32 PM, Emmanuel Venisse
> <em...@gmail.com> wrote:
>
> > Is it work on windows??? chroot/sudo aren't DOS commands.
>
> My guess is no, but as long as it's an optional thing I don't see a
> problem with it. Emm, are you thinking it will be a problem for
> Windows users?
oh, if it is optional and not used by default, it is ok.
Emmanuel
Re: svn commit: r649749 - in /continuum/trunk/continuum-core/src: main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
Posted by Wendy Smoak <ws...@gmail.com>.
On Mon, Apr 21, 2008 at 9:32 PM, Emmanuel Venisse
<em...@gmail.com> wrote:
> Is it work on windows??? chroot/sudo aren't DOS commands.
My guess is no, but as long as it's an optional thing I don't see a
problem with it. Emm, are you thinking it will be a problem for
Windows users?
--
Wendy
Re: svn commit: r649749 - in /continuum/trunk/continuum-core/src: main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
Posted by Emmanuel Venisse <em...@gmail.com>.
ping
On Mon, Apr 21, 2008 at 3:32 PM, Emmanuel Venisse <
emmanuel.venisse@gmail.com> wrote:
> Is it work on windows??? chroot/sudo aren't DOS commands.
>
> Emmanuel
>
>
> On Sat, Apr 19, 2008 at 5:17 AM, <ca...@apache.org> wrote:
>
> > Author: carlos
> > Date: Fri Apr 18 20:17:07 2008
> > New Revision: 649749
> >
> > URL: http://svn.apache.org/viewvc?rev=649749&view=rev
> > Log:
> > [CONTINUUM-1731] Add some commands to use a chroot jail in the build
> > executor, keeping previous functionality unmodified
> >
> > Added:
> >
> > continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> > (with props)
> > Modified:
> >
> > continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> >
> > Modified:
> > continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> > URL:
> > http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java?rev=649749&r1=649748&r2=649749&view=diff
> >
> > ==============================================================================
> > ---
> > continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> > (original)
> > +++
> > continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/execution/AbstractBuildExecutor.java
> > Fri Apr 18 20:17:07 2008
> > @@ -19,6 +19,7 @@
> > * under the License.
> > */
> >
> > +import org.apache.maven.continuum.configuration.ConfigurationService;
> > import org.apache.maven.continuum.installation.InstallationService;
> > import org.apache.maven.continuum.model.project.BuildDefinition;
> > import org.apache.maven.continuum.model.project.Project;
> > @@ -51,6 +52,9 @@
> > extends AbstractLogEnabled
> > implements ContinuumBuildExecutor, Initializable
> > {
> > + private static final String SUDO_EXECUTABLE = "sudo";
> > + private static final String CHROOT_EXECUTABLE = "chroot";
> > +
> > //
> > ----------------------------------------------------------------------
> > //
> > //
> > ----------------------------------------------------------------------
> > @@ -78,6 +82,11 @@
> > /**
> > * @plexus.configuration
> > */
> > + private File chrootJailDirectory;
> > +
> > + /**
> > + * @plexus.configuration
> > + */
> > private String defaultExecutable;
> >
> > //
> > ----------------------------------------------------------------------
> > @@ -232,6 +241,26 @@
> >
> > try
> > {
> > + File chrootJailDirectory = getChrootJailDirectory();
> > + if ( chrootJailDirectory != null )
> > + {
> > + StringBuilder sb = new StringBuilder();
> > + sb.append( CHROOT_EXECUTABLE );
> > + sb.append( " " );
> > + sb.append( new File( chrootJailDirectory,
> > project.getGroupId() ) );
> > + sb.append( " " );
> > + sb.append( " cd " );
> > + sb.append( getRelativePath( chrootJailDirectory,
> > workingDirectory, project.getGroupId() ) );
> > + sb.append( " && " );
> > + sb.append( actualExecutable );
> > + sb.append( " " );
> > + sb.append( arguments );
> > +
> > + arguments = sb.toString();
> > + actualExecutable = SUDO_EXECUTABLE;
> > + workingDirectory = chrootJailDirectory; // not really
> > used but must exist
> > + }
> > +
> > ExecutionResult result =
> > getShellCommandHelper().executeShellCommand(
> > workingDirectory, actualExecutable, arguments, output,
> >
> > project.getId(), environments );
> > @@ -260,6 +289,21 @@
> > }
> > }
> >
> > + private String getRelativePath( File chrootDir, File
> > workingDirectory, String groupId )
> > + {
> > + String path = workingDirectory.getPath();
> > + String chrootBase = new File( chrootDir, groupId ).getPath();
> > + if ( path.startsWith( chrootBase ) )
> > + {
> > + return path.substring( chrootBase.length(), path.length()
> > );
> > + }
> > + else
> > + {
> > + throw new IllegalArgumentException( "Working directory is
> > not inside the chroot jail " + chrootBase +
> > + " , " + path );
> > + }
> > + }
> > +
> > protected abstract Map<String, String> getEnvironments(
> > BuildDefinition buildDefinition );
> >
> > protected String getJavaHomeValue( BuildDefinition buildDefinition )
> > @@ -374,5 +418,15 @@
> > public void setExecutableResolver( ExecutableResolver
> > executableResolver )
> > {
> > this.executableResolver = executableResolver;
> > + }
> > +
> > + public void setChrootJailDirectory( File chrootJailDirectory )
> > + {
> > + this.chrootJailDirectory = chrootJailDirectory;
> > + }
> > +
> > + public File getChrootJailDirectory()
> > + {
> > + return chrootJailDirectory;
> > }
> > }
> >
> > Added:
> > continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> > URL:
> > http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java?rev=649749&view=auto
> >
> > ==============================================================================
> > ---
> > continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> > (added)
> > +++
> > continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> > Fri Apr 18 20:17:07 2008
> > @@ -0,0 +1,141 @@
> > +package org.apache.maven.continuum.execution;
> > +
> > +import java.io.File;
> > +import java.util.HashMap;
> > +import java.util.Map;
> > +
> > +import junit.framework.TestCase;
> > +
> > +import org.apache.maven.continuum.configuration.ConfigurationService;
> > +import
> > org.apache.maven.continuum.configuration.DefaultConfigurationService;
> > +import org.apache.maven.continuum.model.project.BuildDefinition;
> > +import org.apache.maven.continuum.model.project.Project;
> > +import org.apache.maven.continuum.model.project.ProjectGroup;
> > +import
> > org.apache.maven.continuum.utils.ChrootJailWorkingDirectoryService;
> > +import org.apache.maven.continuum.utils.shell.ExecutionResult;
> > +import org.apache.maven.continuum.utils.shell.ShellCommandHelper;
> > +import org.codehaus.plexus.logging.Logger;
> > +import org.codehaus.plexus.logging.console.ConsoleLogger;
> > +import org.jmock.Expectations;
> > +import org.jmock.Mock;
> > +import org.jmock.Mockery;
> > +import org.jmock.core.Constraint;
> > +
> > +public class AbstractContinuumBuildExecutorTest
> > + extends TestCase
> > +{
> > + protected AbstractBuildExecutor executor = new BuildExecutorStub();
> > +
> > + private Mockery context = new Mockery();
> > +
> > + private String toSystemPath( String path )
> > + {
> > + if ( File.separator.equals( "\\" ) )
> > + {
> > + return path.replaceAll( "/", "\\" + File.separator );
> > + }
> > + return path;
> > + }
> > +
> > + public void testExecuteShellCommand()
> > + throws Exception
> > + {
> > + final File chrootJailFile = new File( toSystemPath( "/home" )
> > );
> > + final File workingDirectory = new File( toSystemPath(
> > "/dir1/dir2/workingdir" ) );
> > +
> > + final ShellCommandHelper helper = context.mock(
> > ShellCommandHelper.class );
> > +
> > + ConfigurationService configurationService = new
> > DefaultConfigurationService()
> > + {
> > + @Override
> > + public File getWorkingDirectory()
> > + {
> > + return workingDirectory;
> > + }
> > + };
> > +
> > + ChrootJailWorkingDirectoryService directoryService = new
> > ChrootJailWorkingDirectoryService();
> > + directoryService.setConfigurationService( configurationService
> > );
> > + directoryService.setChrootJailDirectory( chrootJailFile );
> > +
> > + executor.setChrootJailDirectory( chrootJailFile );
> > + executor.setShellCommandHelper( helper );
> > + executor.setWorkingDirectoryService( directoryService );
> > + executor.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG,
> > "" ) );
> > +
> > + final Project project = new Project();
> > + project.setId( 7 );
> > + project.setGroupId( "xx" );
> > + ProjectGroup projectGroup = new ProjectGroup();
> > + projectGroup.setGroupId( project.getGroupId() );
> > + project.setProjectGroup( projectGroup );
> > +
> > + assertEquals( toSystemPath( chrootJailFile.getPath() + "/" +
> > project.getGroupId() + workingDirectory.getPath() +
> > + "/" + project.getId() ),
> > directoryService.getWorkingDirectory( project ).getPath() );
> > +
> > + String executable = "mvn";
> > + final String arguments = "-o clean install";
> > + final File output = new File( "target/tmp" );
> > + final Map<String, String> environments = new HashMap<String,
> > String>();
> > +
> > + final String cmd =
> > + "chroot /home/xx " + " cd /dir1/dir2/workingdir/" +
> > project.getId() + " && " + executable + " " + arguments;
> > + // Constraint[] args =
> > + // new Constraint[] { eq( chrootJailFile ), eq( "sudo" ), eq(
> > toSystemPath( cmd ) ), eq( output ),
> > + // eq( project.getId() ), eq( environments ) };
> > + final ExecutionResult result = new ExecutionResult( 0 );
> > +
> > + context.checking( new Expectations()
> > + {
> > + {
> > + one( helper ).executeShellCommand( chrootJailFile,
> > "sudo", toSystemPath( cmd ), output,
> > + project.getId(),
> > environments );
> > + will( returnValue( result ) );
> > + }
> > + } );
> > +
> > + // helperMock.expects( once() ).method( "executeShellCommand"
> > ).with( args ).will( returnValue( result ) );
> > +
> > + executor.executeShellCommand( project, executable, arguments,
> > output, environments );
> > +
> > + context.assertIsSatisfied();
> > + // super.verify();
> > + }
> > +
> > + class BuildExecutorStub
> > + extends AbstractBuildExecutor
> > + {
> > +
> > + protected BuildExecutorStub()
> > + {
> > + super( "stub", true );
> > + }
> > +
> > + protected String findExecutable( Project project, String
> > executable, String defaultExecutable,
> > + boolean resolveExecutable,
> > File workingDirectory )
> > + {
> > + return executable;
> > + }
> > +
> > + @Override
> > + protected Map<String, String> getEnvironments( BuildDefinition
> > buildDefinition )
> > + {
> > + // TODO Auto-generated method stub
> > + return null;
> > + }
> > +
> > + public ContinuumBuildExecutionResult build( Project project,
> > BuildDefinition buildDefinition, File buildOutput )
> > + throws ContinuumBuildExecutorException
> > + {
> > + // TODO Auto-generated method stub
> > + return null;
> > + }
> > +
> > + public void updateProjectFromCheckOut( File workingDirectory,
> > Project project, BuildDefinition buildDefinition )
> > + throws ContinuumBuildExecutorException
> > + {
> > + // TODO Auto-generated method stub
> > +
> > + }
> > + }
> > +}
> >
> > Propchange:
> > continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> >
> > ------------------------------------------------------------------------------
> > svn:eol-style = native
> >
> > Propchange:
> > continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/execution/AbstractContinuumBuildExecutorTest.java
> >
> > ------------------------------------------------------------------------------
> > svn:keywords = "Author Date Id Revision"
> >
> >
> >
>