svn commit: r1031678 - in /maven/surefire/trunk: surefire-api/src/main/java/org/apache/maven/surefire/report/ surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ sur

2010-11-05 Thread krosenvold
Author: krosenvold
Date: Fri Nov  5 17:43:24 2010
New Revision: 1031678

URL: http://svn.apache.org/viewvc?rev=1031678view=rev
Log:
[SUREFIRE-658] Removed synchronization on ReporterManager

 - TestNG provider retains existing synchronization through wrapper class.
 - JUnit4/3 lose synchronization on the reporter manager.
 - Junit4.7 run with per-thread instance of ReporterManager.

Added:

maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ClassesParallelRunListener.java
   (with props)

maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/MethodsParallelRunListener.java
   (with props)

maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/SynchronizedReporterManager.java
   (with props)
Modified:

maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java

maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ConcurrentReportingRunListener.java

maven/surefire/trunk/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/ConcurrentReportingRunListenerTest.java

maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java

maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java

Modified: 
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java?rev=1031678r1=1031677r2=1031678view=diff
==
--- 
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
 (original)
+++ 
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
 Fri Nov  5 17:43:24 2010
@@ -27,28 +27,14 @@ import java.util.List;
  * p/
  * Synchronization/Threading note:
  * p/
- * This design is really only good for single-threaded test execution. 
Although it is currently
- * used by multi-threaded providers too, the design does not really make sense 
(and is probably buggy).
+ * This design is really only good for single-threaded test execution. With 
the use of the additional
+ * SynchronizedReporterManager you can get a buggy version that sort-of 
supports multithreading.
  * p/
- * This is because to get correct results, the client basically needs to do 
something like this:
- * synchronized( ReporterManger.getClass()){
- * reporterManager.runStarted()
- * reporterManager.testSetStarting()
- * reporterManager.testStarting()
- * reporterManager.testSucceeded()
- * reporterManager.testSetCompleted()
- * reporterManager.runCompleted()
- * }
- * p/
- * This is because the underlying providers are singletons and keep state, if 
you remove the outer synchronized
- * block, you may get mixups between results from different tests; although 
the end result (total test count etc)
- * should probably be correct.
+ * The underlying providers are singletons and keep state per ReporterManager 
instance
  * p/
  * The solution to this problem involves making a clearer separation between 
test-result collection and reporting,
  * preferably removing singleton state approach out of the reporting interface.
  * p/
- * Please also note that the synchronization requirements of this interface 
severely limit the concurrency
- * potential of all the parallel surefire providers, especially when runnning 
non-io bound tests,
  */
 public class ReporterManager
 {
@@ -56,20 +42,28 @@ public class ReporterManager
 
 private final MulticastingReporter multicastingReporter;
 
-private final SystemStreamCapturer consoleCapturer = new 
SystemStreamCapturer();
+private final SystemStreamCapturer consoleCapturer;
 
 public ReporterManager( List reports, RunStatistics runStatisticsForThis )
 {
+this.consoleCapturer =  new SystemStreamCapturer();
 multicastingReporter = new MulticastingReporter( reports );
 this.runStatisticsForThis = runStatisticsForThis;
 }
 
-public synchronized void writeMessage( String message )
+protected ReporterManager( ReporterManager other )
+{
+this.multicastingReporter = other.multicastingReporter;
+this.runStatisticsForThis = other.runStatisticsForThis;
+this.consoleCapturer =  other.consoleCapturer;
+}
+
+public void writeMessage( String message )
 {
 multicastingReporter.writeMessage( message );
 }
-
-public synchronized void writeConsoleMessage( String message )
+
+public void writeConsoleMessage( String message )
   

svn commit: r1031611 - in /maven/plugins/trunk/maven-dependency-plugin: pom.xml src/main/java/org/apache/maven/plugin/dependency/AbstractAnalyzeMojo.java

2010-11-05 Thread brianf
Author: brianf
Date: Fri Nov  5 15:02:16 2010
New Revision: 1031611

URL: http://svn.apache.org/viewvc?rev=1031611view=rev
Log:
MDEP-262 patch from Tobias Glerke

Modified:
maven/plugins/trunk/maven-dependency-plugin/pom.xml

maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractAnalyzeMojo.java

Modified: maven/plugins/trunk/maven-dependency-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/pom.xml?rev=1031611r1=1031610r2=1031611view=diff
==
--- maven/plugins/trunk/maven-dependency-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-dependency-plugin/pom.xml Fri Nov  5 15:02:16 2010
@@ -282,6 +282,9 @@ under the License.
   pomIncludes
 pomInclude*/pom.xml/pomInclude
   /pomIncludes
+  setupIncludes
+setupIncludesetup-custom-analyzer/pom.xml/setupInclude
+  /setupIncludes
   preBuildHookScriptsetup/preBuildHookScript
   postBuildHookScriptvalidate/postBuildHookScript
   
localRepositoryPath${project.build.directory}/local-repo/localRepositoryPath

Modified: 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractAnalyzeMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractAnalyzeMojo.java?rev=1031611r1=1031610r2=1031611view=diff
==
--- 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractAnalyzeMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractAnalyzeMojo.java
 Fri Nov  5 15:02:16 2010
@@ -34,6 +34,12 @@ import org.apache.maven.project.MavenPro
 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalysis;
 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer;
 import 
org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzerException;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
 
 /**
@@ -46,10 +52,17 @@ import org.codehaus.plexus.util.xml.Pret
  */
 public abstract class AbstractAnalyzeMojo
 extends AbstractMojo
+implements Contextualizable
 {
 // fields -
 
 /**
+ * The plexus context to look-up the right {...@link 
ProjectDependencyAnalyzer} implementation depending on the mojo
+ * configuration.
+ */
+private Context context;
+
+/**
  * The Maven project to analyze.
  *
  * @parameter expression=${project}
@@ -59,13 +72,12 @@ public abstract class AbstractAnalyzeMoj
 private MavenProject project;
 
 /**
- * The Maven project dependency analyzer to use.
+ * Project dependency analyzer to use (plexus component role-hint).
  *
- * @component
- * @required
- * @readonly
+ * @parameter expression=${analyzer} default-value=default
+ * @since 2.2
  */
-private ProjectDependencyAnalyzer analyzer;
+private String analyzer;
 
 /**
  * Whether to fail the build if a dependency warning is found.
@@ -158,6 +170,32 @@ public abstract class AbstractAnalyzeMoj
 }
 }
 
+protected ProjectDependencyAnalyzer createProjectDependencyAnalyzer()
+throws MojoExecutionException
+{
+
+final String role = ProjectDependencyAnalyzer.ROLE;
+final String roleHint = analyzer;
+
+try
+{
+final PlexusContainer container = (PlexusContainer) context.get( 
PlexusConstants.PLEXUS_KEY );
+
+return (ProjectDependencyAnalyzer) container.lookup( role, 
roleHint );
+}
+catch ( Exception exception )
+{
+throw new MojoExecutionException( Failed to instantiate  + 
ProjectDependencyAnalyser with role  + role
++  / role-hint  + roleHint,exception );
+}
+}
+
+public void contextualize( Context context )
+throws ContextException
+{
+this.context = context;
+}
+
 // private methods 
 
 private boolean checkDependencies()
@@ -166,7 +204,7 @@ public abstract class AbstractAnalyzeMoj
 ProjectDependencyAnalysis analysis;
 try
 {
-analysis = analyzer.analyze( project );
+   

svn commit: r1031612 - in /maven/shared/trunk/maven-dependency-analyzer: pom.xml src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java

2010-11-05 Thread brianf
Author: brianf
Date: Fri Nov  5 15:02:34 2010
New Revision: 1031612

URL: http://svn.apache.org/viewvc?rev=1031612view=rev
Log:
MDEP-262 patch from Tobias Glerke

Modified:
maven/shared/trunk/maven-dependency-analyzer/pom.xml

maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java

Modified: maven/shared/trunk/maven-dependency-analyzer/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/pom.xml?rev=1031612r1=1031611r2=1031612view=diff
==
--- maven/shared/trunk/maven-dependency-analyzer/pom.xml (original)
+++ maven/shared/trunk/maven-dependency-analyzer/pom.xml Fri Nov  5 15:02:34 
2010
@@ -24,7 +24,7 @@
   parent
 groupIdorg.apache.maven.shared/groupId
 artifactIdmaven-shared-components/artifactId
-version12/version
+version16-SNAPSHOT/version
   /parent
 
   groupIdorg.apache.maven.shared/groupId

Modified: 
maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java?rev=1031612r1=1031611r2=1031612view=diff
==
--- 
maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
 (original)
+++ 
maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
 Fri Nov  5 15:02:34 2010
@@ -38,7 +38,7 @@ import org.apache.maven.project.MavenPro
  * 
  * @author a href=mailto:markhob...@gmail.com;Mark Hobson/a
  * @version $Id$
- * @plexus.component 
role=org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer
+ * @plexus.component 
role=org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer 
role-hint=default
  */
 public class DefaultProjectDependencyAnalyzer
 implements ProjectDependencyAnalyzer
@@ -71,7 +71,7 @@ public class DefaultProjectDependencyAna
 {
 Map artifactClassMap = buildArtifactClassMap( project );
 
-Set dependencyClasses = buildDependencyClasses( project );
+Set dependencyClasses = buildDependencyClasses( project , 
artifactClassMap );
 
 Set declaredArtifacts = buildDeclaredArtifacts( project );
 
@@ -159,7 +159,7 @@ public class DefaultProjectDependencyAna
 return artifactClassMap;
 }
 
-private Set buildDependencyClasses( MavenProject project )
+protected Set buildDependencyClasses( MavenProject project , Map 
artifactClassMap )
 throws IOException
 {
 Set dependencyClasses = new HashSet();
@@ -212,7 +212,7 @@ public class DefaultProjectDependencyAna
 return usedArtifacts;
 }
 
-private Artifact findArtifactForClassName( Map artifactClassMap, String 
className )
+protected Artifact findArtifactForClassName( Map artifactClassMap, String 
className )
 {
 for ( Iterator artifactIterator = 
artifactClassMap.keySet().iterator(); artifactIterator.hasNext(); )
 {




svn commit: r1031684 - in /maven/plugins/trunk/maven-dependency-plugin/src: main/java/org/apache/maven/plugin/dependency/ main/java/org/apache/maven/plugin/dependency/utils/ test/java/org/apache/maven

2010-11-05 Thread brianf
Author: brianf
Date: Fri Nov  5 18:00:17 2010
New Revision: 1031684

URL: http://svn.apache.org/viewvc?rev=1031684view=rev
Log:
MDEP-211 patch from Oumar Aziz OUATTARA

Modified:

maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyFilterMojo.java

maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractFromDependenciesMojo.java

maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/BuildClasspathMojo.java

maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/CopyDependenciesMojo.java

maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/utils/DependencyUtil.java

maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestBuildClasspathMojo.java

maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestCopyDependenciesMojo.java

Modified: 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyFilterMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyFilterMojo.java?rev=1031684r1=1031683r2=1031684view=diff
==
--- 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyFilterMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractDependencyFilterMojo.java
 Fri Nov  5 18:00:17 2010
@@ -206,6 +206,16 @@ public abstract class AbstractDependency
  * @parameter expression=${overWriteIfNewer} default-value=true
  */
 protected boolean overWriteIfNewer;
+
+/**
+ * Prepend the groupId during copy.
+ * 
+ * @optional
+ * @since 2.2
+ * @parameter expression=${mdep.prependGroupId} default-value=false
+ * @parameter
+ */
+protected boolean prependGroupId = false;
 
 protected abstract ArtifactsFilter getMarkedArtifactFilter();
 
@@ -383,4 +393,19 @@ public abstract class AbstractDependency
 }
 
 // TODO: Set marker files.
+
+/**
+ * @return true, if the groupId should be prepended to the filename. 
+ */
+public boolean isPrependGroupId() {
+return prependGroupId;
+}
+
+/**
+ * @param prependGroupId - 
+ *true if the groupId must be prepended during the copy.
+ */
+public void setPrependGroupId(boolean prependGroupId) {
+this.prependGroupId = prependGroupId;
+}
 }

Modified: 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractFromDependenciesMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractFromDependenciesMojo.java?rev=1031684r1=1031683r2=1031684view=diff
==
--- 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractFromDependenciesMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/AbstractFromDependenciesMojo.java
 Fri Nov  5 18:00:17 2010
@@ -40,7 +40,7 @@ public abstract class AbstractFromDepend
  * @parameter
  */
 protected boolean stripVersion = false;
-
+
 /**
  * Default location used for mojo unless overridden in ArtifactItem
  *
@@ -233,4 +233,5 @@ public abstract class AbstractFromDepend
 {
 this.copyPom = copyPom;
 }
+
 }

Modified: 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/BuildClasspathMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/BuildClasspathMojo.java?rev=1031684r1=1031683r2=1031684view=diff
==
--- 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/BuildClasspathMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/BuildClasspathMojo.java
 Fri Nov  5 18:00:17 2010
@@ -288,7 +288,7 @@ public class BuildClasspathMojo
 // TODO: add param for prepending groupId and version.
 sb.append( prefix );
 sb.append( File.separator );
-sb.append( DependencyUtil.getFormattedFileName( art, 
this.stripVersion ) );
+sb.append( DependencyUtil.getFormattedFileName( art, 
this.stripVersion, this.prependGroupId) );
 }
 }
 

Modified: 

svn commit: r1031688 - /maven/plugins/trunk/maven-dependency-plugin/src/it/build-classpath/validate.bsh

2010-11-05 Thread brianf
Author: brianf
Date: Fri Nov  5 18:16:01 2010
New Revision: 1031688

URL: http://svn.apache.org/viewvc?rev=1031688view=rev
Log:
fixing the IT broken by MDEP-192. The classpath order was changed on purpose

Modified:

maven/plugins/trunk/maven-dependency-plugin/src/it/build-classpath/validate.bsh

Modified: 
maven/plugins/trunk/maven-dependency-plugin/src/it/build-classpath/validate.bsh
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/it/build-classpath/validate.bsh?rev=1031688r1=1031687r2=1031688view=diff
==
--- 
maven/plugins/trunk/maven-dependency-plugin/src/it/build-classpath/validate.bsh 
(original)
+++ 
maven/plugins/trunk/maven-dependency-plugin/src/it/build-classpath/validate.bsh 
Fri Nov  5 18:16:01 2010
@@ -10,18 +10,18 @@ classpath = StringUtils.replace( classpa
 List actual = Arrays.asList( classpath.split( : ) );
 
 List expected = new ArrayList();
-expected.add( junit-3.8.1.jar );
-expected.add( maven-artifact-2.0.6.jar );
-expected.add( maven-artifact-manager-2.0.6.jar );
+expected.add( maven-project-2.0.6.jar );
+expected.add( maven-settings-2.0.6.jar );
 expected.add( maven-model-2.0.6.jar );
-expected.add( maven-plugin-registry-2.0.6.jar );
+expected.add( plexus-utils-1.4.1.jar );
+expected.add( plexus-container-default-1.0-alpha-9-stable-1.jar );
+expected.add( junit-3.8.1.jar );
 expected.add( maven-profile-2.0.6.jar );
-expected.add( maven-project-2.0.6.jar );
+expected.add( maven-artifact-manager-2.0.6.jar );
 expected.add( maven-repository-metadata-2.0.6.jar );
-expected.add( maven-settings-2.0.6.jar );
+expected.add( maven-artifact-2.0.6.jar );
 expected.add( wagon-provider-api-1.0-beta-2.jar );
-expected.add( plexus-container-default-1.0-alpha-9-stable-1.jar );
-expected.add( plexus-utils-1.4.1.jar );
+expected.add( maven-plugin-registry-2.0.6.jar );
 
 System.out.println( Checking classpath...  );
 System.out.println( Actual  :  + actual );




svn commit: r1031718 - /maven/sandbox/trunk/shared/scm-changes-maven-extension/

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Fri Nov  5 19:06:01 2010
New Revision: 1031718

URL: http://svn.apache.org/viewvc?rev=1031718view=rev
Log:
Creating scm-changes-maven-extension

Added:
maven/sandbox/trunk/shared/scm-changes-maven-extension/



svn commit: r1031727 - in /maven/sandbox/trunk/shared/scm-changes-maven-extension: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/maven/ src/mai

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Fri Nov  5 19:15:58 2010
New Revision: 1031727

URL: http://svn.apache.org/viewvc?rev=1031727view=rev
Log:
scm-changes-maven-extension

Added:
maven/sandbox/trunk/shared/scm-changes-maven-extension/README.txt
maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java

Added: maven/sandbox/trunk/shared/scm-changes-maven-extension/README.txt
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/README.txt?rev=1031727view=auto
==
--- maven/sandbox/trunk/shared/scm-changes-maven-extension/README.txt (added)
+++ maven/sandbox/trunk/shared/scm-changes-maven-extension/README.txt Fri Nov  
5 19:15:58 2010
@@ -0,0 +1,37 @@
+SCM Changes Maven Extension
+---
+
+Build only projects containing files that that you personally have changed 
(according to SCM), and projects that
+depend on those projects (downstream).
+
+To use, add this to your parent POM:
+
+build
+  extensions
+extension
+  groupIdorg.apache.maven.examples/groupId
+  artifactIdretro-maven-extension/artifactId
+  version1.0-SNAPSHOT/version
+/extension
+  /extensions
+/build
+
+Be sure to also specify an SCM connection:
+
+scm
+  
connectionscm:svn:http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-reactor-plugin//connection
+  
developerConnectionscm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-reactor-plugin//developerConnection
+  
urlhttp://svn.apache.org/viewvc/maven/plugins/trunk/maven-reactor-plugin//url
+/scm
+
+Then run your build like this:
+
+  mvn install -Dmake.scmChanges
+
+That will build only those projects that you changed, and projects that depend 
on those projects (downstream).
+
+IF IT DOESN'T APPEAR TO BE WORKING:  Try running mvn with -X to get debug logs.
+
+Note that if you modify the root POM (to add this extension) without checking 
it in, then EVERYTHING is downstream of
+the root POM, so -Dmake.scmChanges will cause a full rebuild; it will appear 
as if it's not working. You can use
+-Dmake.ignoreRootPom to ignore changes in the root POM while testing this 
extension.
\ No newline at end of file

Added: maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml?rev=1031727view=auto
==
--- maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml (added)
+++ maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml Fri Nov  5 
19:15:58 2010
@@ -0,0 +1,48 @@
+project xmlns=http://maven.apache.org/POM/4.0.0; 
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;
+  xsi:schemaLocation=http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd;
+  modelVersion4.0.0/modelVersion
+  groupIdorg.apache.maven.shared/groupId
+  artifactIdscm-changes-maven-extension/artifactId
+  version1.0-SNAPSHOT/version
+  nameSCM Changes Extension/name
+  dependencies
+dependency
+  groupIdorg.apache.maven/groupId
+  artifactIdmaven-compat/artifactId
+  version3.0/version
+/dependency
+dependency
+  groupIdorg.apache.maven/groupId
+  artifactIdmaven-core/artifactId
+  version3.0/version
+/dependency
+dependency
+groupIdorg.apache.maven.scm/groupId
+artifactIdmaven-scm-providers-standard/artifactId
+version1.4/version
+typepom/type
+/dependency
+dependency
+groupIdorg.apache.maven.scm/groupId
+artifactIdmaven-scm-manager-plexus/artifactId
+version1.4/version
+/dependency
+  /dependencies
+  build
+plugins
+  plugin
+groupIdorg.codehaus.plexus/groupId
+artifactIdplexus-component-metadata/artifactId
+version1.5.5/version
+executions
+  execution
+goals
+  goalgenerate-metadata/goal
+  goalgenerate-test-metadata/goal
+/goals
+  /execution
+/executions
+  /plugin
+/plugins
+  /build
+/project

Added: 

svn commit: r1031734 - in /maven/sandbox/trunk/shared/scm-changes-maven-extension: pom.xml src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Fri Nov  5 19:24:52 2010
New Revision: 1031734

URL: http://svn.apache.org/viewvc?rev=1031734view=rev
Log:
License headers

Modified:
maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java

Modified: maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml?rev=1031734r1=1031733r2=1031734view=diff
==
--- maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml (original)
+++ maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml Fri Nov  5 
19:24:52 2010
@@ -1,3 +1,23 @@
+?xml version='1.0' encoding='UTF-8'?
+!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+License); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+--
+
 project xmlns=http://maven.apache.org/POM/4.0.0; 
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;
   xsi:schemaLocation=http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd;
   modelVersion4.0.0/modelVersion

Modified: 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java?rev=1031734r1=1031733r2=1031734view=diff
==
--- 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 (original)
+++ 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 Fri Nov  5 19:24:52 2010
@@ -1,5 +1,25 @@
 package org.apache.maven.shared.scmchanges;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * License); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;




svn commit: r1031957 - in /maven/sandbox/trunk/shared/scm-changes-maven-extension: ./ src/main/java/org/apache/maven/shared/scmchanges/ src/test/ src/test/java/ src/test/java/org/ src/test/java/org/ap

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Sat Nov  6 04:37:37 2010
New Revision: 1031957

URL: http://svn.apache.org/viewvc?rev=1031957view=rev
Log:
Add test, parent POM

Added:
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
Modified:
maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java

Modified: maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml?rev=1031957r1=1031956r2=1031957view=diff
==
--- maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml (original)
+++ maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml Sat Nov  6 
04:37:37 2010
@@ -21,6 +21,13 @@ under the License.
 project xmlns=http://maven.apache.org/POM/4.0.0; 
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;
   xsi:schemaLocation=http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd;
   modelVersion4.0.0/modelVersion
+  
+  parent
+artifactIdmaven-parent/artifactId
+groupIdorg.apache.maven/groupId
+version16/version
+  /parent
+  
   groupIdorg.apache.maven.shared/groupId
   artifactIdscm-changes-maven-extension/artifactId
   version1.0-SNAPSHOT/version
@@ -47,10 +54,41 @@ under the License.
 artifactIdmaven-scm-manager-plexus/artifactId
 version1.4/version
 /dependency
+dependency
+  groupIdjunit/groupId
+  artifactIdjunit/artifactId
+  version4.8.2/version
+  scopetest/scope
+/dependency
+dependency
+  groupIdorg.mockito/groupId
+  artifactIdmockito-all/artifactId
+  version1.8.5/version
+  scopetest/scope
+/dependency
+dependency
+  groupIdorg.powermock/groupId
+  artifactIdpowermock-module-junit4/artifactId
+  version1.4.6/version
+  scopetest/scope
+/dependency
+dependency
+  groupIdorg.powermock/groupId
+  artifactIdpowermock-api-mockito/artifactId
+  version1.4.6/version
+  scopetest/scope
+/dependency
   /dependencies
   build
 plugins
   plugin
+artifactIdmaven-compiler-plugin/artifactId
+configuration
+  source1.5/source
+  target1.5/target
+/configuration
+  /plugin
+  plugin
 groupIdorg.codehaus.plexus/groupId
 artifactIdplexus-component-metadata/artifactId
 version1.5.5/version

Modified: 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java?rev=1031957r1=1031956r2=1031957view=diff
==
--- 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 (original)
+++ 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 Sat Nov  6 04:37:37 2010
@@ -29,7 +29,6 @@ import org.apache.maven.AbstractMavenLif
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.execution.RuntimeInformation;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
@@ -51,7 +50,7 @@ public class MakeScmChanges
 extends AbstractMavenLifecycleParticipant
 {
 @Requirement
-private Logger logger;
+Logger logger;
 
 @Requirement
 ScmManager scmManager;
@@ -68,6 +67,9 @@ public class MakeScmChanges
 /** Disabled by default; activate via -Dmake.scmChanges=true */
 boolean enabled = false;
 
+// TODO configurable baseDir
+// TODO Don't just build from the root because we can't figure out what to 
do
+
 public void afterProjectsRead( MavenSession session )
 throws MavenExecutionException
 {
@@ -147,7 +149,7 @@ public class MakeScmChanges
 

svn commit: r1031958 - /maven/sandbox/trunk/shared/scm-changes-maven-extension/

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Sat Nov  6 04:38:15 2010
New Revision: 1031958

URL: http://svn.apache.org/viewvc?rev=1031958view=rev
Log:
svn:ignore

Modified:
maven/sandbox/trunk/shared/scm-changes-maven-extension/   (props changed)

Propchange: maven/sandbox/trunk/shared/scm-changes-maven-extension/
--
--- svn:ignore (added)
+++ svn:ignore Sat Nov  6 04:38:15 2010
@@ -0,0 +1,4 @@
+.classpath
+.project
+target
+.settings




svn commit: r1031961 - in /maven/sandbox/trunk/shared/scm-changes-maven-extension/src: main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java test/java/org/apache/maven/shared/scmchanges/Mak

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Sat Nov  6 05:24:16 2010
New Revision: 1031961

URL: http://svn.apache.org/viewvc?rev=1031961view=rev
Log:
Ignore changes in random subdirectory; allow configurable baseDir

Modified:

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java

Modified: 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java?rev=1031961r1=1031960r2=1031961view=diff
==
--- 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 (original)
+++ 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 Sat Nov  6 05:24:16 2010
@@ -66,9 +66,9 @@ public class MakeScmChanges
 
 /** Disabled by default; activate via -Dmake.scmChanges=true */
 boolean enabled = false;
-
-// TODO configurable baseDir
-// TODO Don't just build from the root because we can't figure out what to 
do
+
+/** make.baseDir: Search SCM for modified files in this directory.  
Defaults to ${project.baseDir} for the root project. */
+File baseDir;
 
 public void afterProjectsRead( MavenSession session )
 throws MavenExecutionException
@@ -82,10 +82,11 @@ public class MakeScmChanges
 }
 
 
-ListScmFile changedFiles = getChangedFilesFromScm( 
session.getTopLevelProject().getBasedir() );
+ListScmFile changedFiles = getChangedFilesFromScm( baseDir );
 
 ListString includedProjects = new ArrayListString();
 
+MavenProject topLevelProject = session.getTopLevelProject();
 for ( ScmFile changedScmFile : changedFiles )
 {
 logger.debug( changedScmFile.toString() );
@@ -101,9 +102,9 @@ public class MakeScmChanges
 continue;
 }
 
-File changedFile = new File( changedScmFile.getPath() );
+File changedFile = new File( changedScmFile.getPath() 
).getAbsoluteFile();
 
-if ( ignoreRootPom  
session.getTopLevelProject().getFile().getAbsoluteFile().equals( 
changedFile.getAbsoluteFile() ) )
+if ( ignoreRootPom  
topLevelProject.getFile().getAbsoluteFile().equals( changedFile) )
 {
 continue;
 }
@@ -115,6 +116,31 @@ public class MakeScmChanges
 File projectDirectory = project.getFile().getParentFile();
 if ( changedFile.getAbsolutePath().startsWith( 
projectDirectory.getAbsolutePath() + File.separator ) )
 {
+if (topLevelProject.equals( project )) {
+// If we include the top level project, then we'll 
build everything.
+// We have to be very careful before allowing that to 
happen.
+
+// In particular, if the modified file is in a 
subdirectory X that is not itself
+// a Maven project, we don't want that one file to 
cause a full build. 
+// i.e. we ignore changes that are in a random 
subdirectory.
+
+// Is the top level project actually in the baseDir?
+// Sometimes people have sibling child projects, e.g.
+// module../child-project/module
+// If the top level project isn't the baseDir, then 
running the whole build may be rational.
+if 
(baseDir.equals(projectDirectory.getAbsoluteFile())) {
+
+// is the changed file the baseDir or one of its 
immediate descendants?
+// That should probably provoke a rebuild.
+if (!(baseDir.equals( changedFile ) || 
baseDir.equals( changedFile.getParentFile() ))) {
+// OK, so the changed file is in some random 
subdirectory of the baseDir.
+// Skip it.
+logger.debug( Not considering top level 
project for  + changedFile +
+   because that would trigger a 
full rebuild. );
+continue;
+}
+}
+}
 if ( !includedProjects.contains( project ) )
 {
 logger.debug( Including  + project );

svn commit: r1031962 - /maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java

2010-11-05 Thread dfabulich
Author: dfabulich
Date: Sat Nov  6 05:36:03 2010
New Revision: 1031962

URL: http://svn.apache.org/viewvc?rev=1031962view=rev
Log:
Test cleanup

Modified:

maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java

Modified: 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java?rev=1031962r1=1031961r2=1031962view=diff
==
--- 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
 (original)
+++ 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
 Sat Nov  6 05:36:03 2010
@@ -19,7 +19,6 @@ package org.apache.maven.shared.scmchang
  * under the License.
  */
 
-
 import static org.hamcrest.core.Is.*;
 import static org.junit.Assert.*;
 import static org.mockito.Matchers.*;
@@ -48,7 +47,6 @@ import org.junit.Before;
 import org.junit.Test;
 import org.powermock.api.mockito.PowerMockito;
 
-
 public class MakeScmChangesTest
 {
 
@@ -58,8 +56,9 @@ public class MakeScmChangesTest
 public void setUp()
 {
 msc = new MakeScmChanges();
-msc.baseDir = new File().getAbsoluteFile();
-msc.logger = mock(Logger.class);
+msc.enabled = true;
+msc.baseDir = new File(  ).getAbsoluteFile();
+msc.logger = mock( Logger.class );
 }
 
 @Test( expected = MavenExecutionException.class )
@@ -87,7 +86,7 @@ public class MakeScmChangesTest
 
 MavenProject project = new MavenProject();
 project.setScm( scm );
-project.setFile( new File().getAbsoluteFile() );
+project.setFile( new File(  ).getAbsoluteFile() );
 
 when( session.getTopLevelProject() ).thenReturn( project );
 
@@ -118,220 +117,238 @@ public class MakeScmChangesTest
 {
 msc.getChangedFilesFromScm( new File(  ) );
 }
-
+
 @Test
-public void disabled() throws MavenExecutionException {
-MavenSession session = mock(MavenSession.class);
-
+public void disabled()
+throws MavenExecutionException
+{
+MavenSession session = mock( MavenSession.class );
+MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+when( session.getRequest() ).thenReturn( request );
+
+msc.enabled = false;
+
 msc = PowerMockito.spy( msc );
-
+
 PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
-
+
 msc.afterProjectsRead( session );
+assertTrue( request.getSelectedProjects().isEmpty() );
+
 }
-
-@Test(expected = MavenExecutionException.class)
-public void nothingToDo() throws MavenExecutionException {
-MavenSession session = mock(MavenSession.class);
-
-msc.enabled = true;
-
+
+@Test( expected = MavenExecutionException.class )
+public void nothingToDo()
+throws MavenExecutionException
+{
+MavenSession session = mock( MavenSession.class );
+
 msc = PowerMockito.spy( msc );
-
+
+// use default parameters
 PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
-
+
+// SCM returns an empty list of changed files
 ListScmFile changedFiles = new ArrayListScmFile();
-
+
 PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( null );
-
-MavenProject project = mock(MavenProject.class);
-
-when ( session.getTopLevelProject() ).thenReturn( project);
-
+
+MavenProject project = mock( MavenProject.class );
+
+when( session.getTopLevelProject() ).thenReturn( project );
+
 msc.afterProjectsRead( session );
 }
-
+
 @Test
-public void normalFlow() throws MavenExecutionException {
-MavenSession session = mock(MavenSession.class);
-
-msc.enabled = true;
-
+public void normalFlow()
+throws MavenExecutionException
+{
+MavenSession session = mock( MavenSession.class );
+
 msc = PowerMockito.spy( msc );
-
+
+// use default parameters
 PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
-
-ScmFile changedFile = new ScmFile(pom.xml, ScmFileStatus.MODIFIED);
-
+
+ScmFile changedFile = new ScmFile( pom.xml, ScmFileStatus.MODIFIED );
+
 ListScmFile changedFiles = Arrays.asList( changedFile );
-
+
 PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( (File) any() );
-