Skip to content

Commit

Permalink
Fix snapshot checking with up-to-date project info - closes #345
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksandr-m committed May 4, 2022
1 parent 004c156 commit 7f9146b
Show file tree
Hide file tree
Showing 8 changed files with 139 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<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>com.amashchenko.maven.plugin</groupId>
<artifactId>gitflow-maven-test-child1</artifactId>
<packaging>pom</packaging>
<version>0.0.1</version>
</project>
10 changes: 10 additions & 0 deletions src/it/release-start-it-projects-reloading/expected-pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<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>com.amashchenko.maven.plugin</groupId>
<artifactId>gitflow-maven-test</artifactId>
<packaging>pom</packaging>
<version>0.0.1</version>
<!-- <modules>
<module>child1</module>
</modules>-->
</project>
5 changes: 5 additions & 0 deletions src/it/release-start-it-projects-reloading/gitignorefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
build.log
expected-pom.xml
invoker.properties
init.bsh
verify.bsh
44 changes: 44 additions & 0 deletions src/it/release-start-it-projects-reloading/init.bsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import org.codehaus.plexus.util.FileUtils;

try {
new File(basedir, "gitignorefile").renameTo(new File(basedir, ".gitignore"));

Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " init");
p.waitFor();

Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " config user.email 'a@a.aa'");
p.waitFor();
Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " config user.name 'a'");
p.waitFor();

p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " add .");
p.waitFor();

p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " commit -m init");
p.waitFor();

p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " branch develop");
p.waitFor();

p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " checkout master");
p.waitFor();

new File(basedir, "child1/child1-pom.xml").renameTo(new File(basedir, "child1/pom.xml"));

File pomfile = new File(basedir, "pom.xml");
String pomfilestr = FileUtils.fileRead(pomfile, "UTF-8");
pomfilestr = pomfilestr.replace("<!--", "");
pomfilestr = pomfilestr.replace("-->", "");
FileUtils.fileWrite(basedir + "/pom.xml", "UTF-8", pomfilestr);

p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " add .");
p.waitFor();

p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " commit -m add_child_module");
p.waitFor();

} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
3 changes: 3 additions & 0 deletions src/it/release-start-it-projects-reloading/invoker.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:release-start -B

invoker.description=Test projects reloading when new module added in not checkouted branch (https://github.com/aleksandr-m/gitflow-maven-plugin/issues/345).
10 changes: 10 additions & 0 deletions src/it/release-start-it-projects-reloading/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<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>com.amashchenko.maven.plugin</groupId>
<artifactId>gitflow-maven-test</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<!-- <modules>
<module>child1</module>
</modules>-->
</project>
27 changes: 27 additions & 0 deletions src/it/release-start-it-projects-reloading/verify.bsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import org.codehaus.plexus.util.FileUtils;

try {
File gitRef = new File(basedir, ".git/refs/heads/release/0.0.1");
if (!gitRef.exists()) {
System.out.println("release-start .git/refs/heads/release/0.0.1 doesn't exist");
return false;
}

File file = new File(basedir, "pom.xml");
File expectedFile = new File(basedir, "expected-pom.xml");

String actual = FileUtils.fileRead(file, "UTF-8");
String expected = FileUtils.fileRead(expectedFile, "UTF-8");

actual = actual.replaceAll("\\r?\\n", "");
expected = expected.replaceAll("\\r?\\n", "");

if (!expected.equals(actual)) {
System.out.println("release-start expected: " + expected + " actual was:" + actual);
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
Original file line number Diff line number Diff line change
Expand Up @@ -336,32 +336,49 @@ private String getCurrentProjectOutputTimestamp() throws MojoFailureException {
}

/**
* Reloads project info from file
* Reloads projects info from file.
*
* @param project
* @return
* @return Reloaded Maven projects.
* @throws MojoFailureException
* If project loading fails.
*/
private MavenProject reloadProject(final MavenProject project) throws MojoFailureException {
private List<MavenProject> reloadProjects(final MavenProject project) throws MojoFailureException {
try {
List<ProjectBuildingResult> result = projectBuilder.build(
Collections.singletonList(project.getFile()),
true,
mavenSession.getProjectBuildingRequest());

List<MavenProject> projects = new ArrayList<>();
for (ProjectBuildingResult projectBuildingResult : result) {
MavenProject resultProject = projectBuildingResult.getProject();
if (resultProject.isExecutionRoot()) {
return resultProject;
}
projects.add(projectBuildingResult.getProject());
}
throw new NoSuchElementException("No reloaded project appears to be the execution root (" + project.getGroupId() + ":" + project.getArtifactId() + ")");
return projects;
} catch (Exception e) {
throw new MojoFailureException("Error re-loading project info", e);
}
}

/**
* Reloads project info from file.
*
* @param project
* @return Maven project which is the execution root.
* @throws MojoFailureException
* If project loading fails.
*/
private MavenProject reloadProject(final MavenProject project) throws MojoFailureException {
List<MavenProject> projects = reloadProjects(project);
for (MavenProject resultProject : projects) {
if (resultProject.isExecutionRoot()) {
return resultProject;
}
}
throw new NoSuchElementException(
"No reloaded project appears to be the execution root (" + project.getGroupId() + ":" + project.getArtifactId() + ")");
}

/**
* Compares the production branch name with the development branch name.
*
Expand Down Expand Up @@ -396,24 +413,24 @@ protected void checkSnapshotDependencies() throws MojoFailureException {
List<String> snapshots = new ArrayList<>();
Set<String> builtArtifacts = new HashSet<>();

List<MavenProject> projects = mavenSession.getProjects();
List<MavenProject> projects = reloadProjects(mavenSession.getCurrentProject());
for (MavenProject project : projects) {
final MavenProject reloadedProject = reloadProject(project);

builtArtifacts.add(reloadedProject.getGroupId() + ":" + reloadedProject.getArtifactId() + ":" + reloadedProject.getVersion());
builtArtifacts.add(project.getGroupId() + ":" + project.getArtifactId() + ":" + project.getVersion());
}

List<Dependency> dependencies = reloadedProject.getDependencies();
for (MavenProject project : projects) {
List<Dependency> dependencies = project.getDependencies();
for (Dependency d : dependencies) {
String id = d.getGroupId() + ":" + d.getArtifactId() + ":" + d.getVersion();
if (!builtArtifacts.contains(id) && ArtifactUtils.isSnapshot(d.getVersion())) {
snapshots.add(reloadedProject + " -> " + d);
snapshots.add(project + " -> " + d);
}
}
MavenProject parent = reloadedProject.getParent();
MavenProject parent = project.getParent();
if (parent != null) {
String id = parent.getGroupId() + ":" + parent.getArtifactId() + ":" + parent.getVersion();
if (!builtArtifacts.contains(id) && ArtifactUtils.isSnapshot(parent.getVersion())) {
snapshots.add(reloadedProject + " -> " + parent);
snapshots.add(project + " -> " + parent);
}
}
}
Expand Down

0 comments on commit 7f9146b

Please sign in to comment.