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
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
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
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
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
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/
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
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
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
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/
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
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
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() ); -