Skip to content

Commit

Permalink
#82 ensure version change affects only the current directory (and chi…
Browse files Browse the repository at this point in the history
…ld directories), not the parent or sibling directories
  • Loading branch information
stefanseifert authored and khmarbaise committed May 21, 2020
1 parent a8d335f commit 783f9ce
Show file tree
Hide file tree
Showing 10 changed files with 242 additions and 51 deletions.
3 changes: 3 additions & 0 deletions src/it/it-set-018-issue-82/invoker.properties
@@ -0,0 +1,3 @@
invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:set -fmodule-a1 -DnewVersion=2.5.0-SNAPSHOT
invoker.nonRecursive=true
invoker.buildResult=success
12 changes: 12 additions & 0 deletions src/it/it-set-018-issue-82/module-a1/module-b1/pom.xml
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>localdomain.localhost</groupId>
<artifactId>module-a1</artifactId>
<version>2.0.7-SNAPSHOT</version>
</parent>
<artifactId>module-b1</artifactId>
<packaging>pom</packaging>
</project>
13 changes: 13 additions & 0 deletions src/it/it-set-018-issue-82/module-a1/module-b2/pom.xml
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>localdomain.localhost</groupId>
<artifactId>module-a1</artifactId>
<version>2.0.7-SNAPSHOT</version>
</parent>
<artifactId>module-b2</artifactId>
<version>2.0.7-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
13 changes: 13 additions & 0 deletions src/it/it-set-018-issue-82/module-a1/module-b3/pom.xml
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>localdomain.localhost</groupId>
<artifactId>module-a1</artifactId>
<version>2.0.7-SNAPSHOT</version>
</parent>
<artifactId>module-b3</artifactId>
<version>2.0.7-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
13 changes: 13 additions & 0 deletions src/it/it-set-018-issue-82/module-a1/pom.xml
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>localdomain.localhost</groupId>
<artifactId>module-a1</artifactId>
<packaging>pom</packaging>
<version>2.0.7-SNAPSHOT</version>
<modules>
<module>module-b1</module>
<module>module-b2</module>
<module>module-b3</module>
</modules>
</project>
17 changes: 17 additions & 0 deletions src/it/it-set-018-issue-82/module-a2/pom.xml
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>localdomain.localhost</groupId>
<artifactId>module-a2</artifactId>
<packaging>pom</packaging>
<version>1.0.3-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>localdomain.localhost</groupId>
<artifactId>module-b1</artifactId>
<version>2.0.7-SNAPSHOT</version>
</dependency>
</dependencies>

</project>
103 changes: 103 additions & 0 deletions src/it/it-set-018-issue-82/pom.xml
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>localdomain.localhost</groupId>
<artifactId>project-a</artifactId>
<packaging>pom</packaging>
<version>1.2.0-SNAPSHOT</version>
<name>mversions-82</name>

<description>
invoking versions:set on child pom - make sure no other child poms are affected
</description>

<modules>
<module>module-a1</module>
<module>module-a2</module>
</modules>

<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
</plugin>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.4.1</version>
</plugin>
<plugin>
<artifactId>maven-rar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-7</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.0.4</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-1</version>
</plugin>
</plugins>
</pluginManagement>
</build>

</project>
67 changes: 67 additions & 0 deletions src/it/it-set-018-issue-82/verify.groovy
@@ -0,0 +1,67 @@
import org.apache.commons.lang.StringUtils

import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.xpath.XPathFactory

class Checker
{
def result = true;

def basedir;

public Checker(File basedir) {
this.basedir = basedir;
}

def readXPath( String pom, String xPathExpression )
{
def stream = new FileInputStream( new File( basedir, pom ) );
try
{
return XPathFactory.newInstance()
.newXPath()
.evaluate( xPathExpression, DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse( stream ).documentElement );
}
finally
{
stream.close();
}
}

Checker check( String message, String pom, String xpath, String expected )
{
if ( result )
{
try
{
def actual = readXPath( pom, xpath )
if ( !StringUtils.equals( expected, actual ) )
{
System.out.println( pom + " [xpath:" + xpath + "] expected '" + expected + "' found '" + actual + "' : " + message );
result = false;
}
}
catch ( Throwable t )
{
t.printStackTrace();
result = false;
}
}
return this;
}
}

return new Checker(basedir)
.check( "root pom unchanged", "pom.xml", "/project/version", "1.2.0-SNAPSHOT" )
.check( "module-a1 changed", "module-a1/pom.xml", "/project/version", "2.5.0-SNAPSHOT" )
.check( "module-a1/module-b1 parent changed", "module-a1/module-b1/pom.xml", "/project/parent/version", "2.5.0-SNAPSHOT" )
.check( "module-a1/module-b1 remains unspecified", "module-a1/module-b1/pom.xml", "/project/version", "" )
.check( "module-a1/module-b2 parent changed", "module-a1/module-b2/pom.xml", "/project/parent/version", "2.5.0-SNAPSHOT" )
.check( "module-a1/module-b2 version changed", "module-a1/module-b2/pom.xml", "/project/version", "2.5.0-SNAPSHOT" )
.check( "module-a1/module-b3 parent changed", "module-a1/module-b3/pom.xml", "/project/parent/version", "2.5.0-SNAPSHOT" )
.check( "module-a1/module-b3 version changed", "module-a1/module-b3/pom.xml", "/project/version", "2.5.0-SNAPSHOT" )
.check( "module-a2 unchanged", "module-a2/pom.xml", "/project/version", "1.0.3-SNAPSHOT" )
.check( "module-a2 dependency unchanged", "module-a2/pom.xml", "/project/dependencies/dependency/version", "2.0.7-SNAPSHOT" )
.result;
3 changes: 1 addition & 2 deletions src/main/java/org/codehaus/mojo/versions/SetMojo.java
Expand Up @@ -281,8 +281,7 @@ public void execute()

try
{
final MavenProject project =
PomHelper.getLocalRoot( projectBuilder, getProject(), localRepository, null, getLog() );
final MavenProject project = getProject();

getLog().info( "Local aggregation root: " + project.getBasedir() );
Map<String, Model> reactorModels = PomHelper.getReactorModels( project, getLog() );
Expand Down
49 changes: 0 additions & 49 deletions src/main/java/org/codehaus/mojo/versions/api/PomHelper.java
Expand Up @@ -1376,55 +1376,6 @@ public static String getGroupId( Model model )
return targetGroupId;
}

/**
* Finds the local root of the specified project.
*
* @param project The project to find the local root for.
* @param localRepository the local repo.
* @param globalProfileManager the global profile manager.
* @param logger The logger to log to.
* @return The local root (note this may be the project passed as an argument).
*/
public static MavenProject getLocalRoot( MavenProjectBuilder builder, MavenProject project,
ArtifactRepository localRepository, ProfileManager globalProfileManager,
Log logger )
{
logger.info( "Searching for local aggregator root..." );
while ( true )
{
final File parentDir = project.getBasedir().getParentFile();
if ( parentDir != null && parentDir.isDirectory() )
{
logger.debug( "Checking to see if " + parentDir + " is an aggregator parent" );
File parent = new File( parentDir, "pom.xml" );
if ( parent.isFile() )
{
try
{
final MavenProject parentProject =
builder.build( parent, localRepository, globalProfileManager );
if ( getAllChildModules( parentProject, logger ).contains( project.getBasedir().getName() ) )
{
logger.debug( parentDir + " is an aggregator parent" );
project = parentProject;
continue;
}
else
{
logger.debug( parentDir + " is not an aggregator parent" );
}
}
catch ( ProjectBuildingException e )
{
logger.warn( e );
}
}
}
logger.debug( "Local aggregation root is " + project.getBasedir() );
return project;
}
}

/**
* Builds a map of raw models keyed by module path.
*
Expand Down

0 comments on commit 783f9ce

Please sign in to comment.