Skip to content

Commit

Permalink
Follow indentation in target POM (#113)
Browse files Browse the repository at this point in the history
* Add indent test (failing)

* Fix indentation issues

* Filter out shaded content

* Remove unused method

* Fix assertion

---------

Co-authored-by: George Gastaldi <[email protected]>
  • Loading branch information
ia3andy and gastaldi authored Feb 16, 2024
1 parent 1139d44 commit 28368f4
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 17 deletions.
13 changes: 13 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,19 @@
<mainClass>io.fabric8.maven.cmd.Main</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/LICENSE</exclude>
<exclude>META-INF/NOTICE</exclude>
<exclude>META-INF/MANIFEST.MF</exclude>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/io/fabric8/maven/Maven.java
Original file line number Diff line number Diff line change
Expand Up @@ -125,15 +125,39 @@ public static void writeModel(Model model, Path pom) {
} catch (IOException e) {
throw new UncheckedIOException("Could not read POM file: " + pom, e);
}
String indentation = findIndentation(pom);
try (OutputStream os = Files.newOutputStream(pom);
OutputStreamWriter ow = new OutputStreamWriter(os)) {
MavenJDOMWriter writer = new MavenJDOMWriter();
Format format = Format.getPrettyFormat();
format.setIndent(indentation);
format.setLineSeparator(System.lineSeparator());
writer.write(model, document, ow, format);
} catch (IOException e) {
throw new UncheckedIOException("Could not write POM file: " + pom, e);
}
}
}

/**
* Find the indentation used in the POM file
*
* @param pom the path to the POM file
* @return the indentation used in the POM file
*/
private static String findIndentation(Path pom) {
try (BufferedReader br = Files.newBufferedReader(pom)) {
String line;
while ((line = br.readLine()) != null) {
int idx = line.indexOf("<");
// We don't care about the first line or unindented lines
if (idx > 0) {
return line.substring(0, idx);
}
}
} catch (IOException e) {
throw new UncheckedIOException("Could not read POM file: " + pom, e);
}
return " ";
}
}
16 changes: 0 additions & 16 deletions src/main/java/io/fabric8/maven/MavenJDOMWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package io.fabric8.maven;

import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collection;
Expand Down Expand Up @@ -88,8 +87,6 @@ class MavenJDOMWriter {
*/
private String lineSeparator;

private static final String LS = System.lineSeparator();

// ----------------/
// - Constructors -/
// ----------------/
Expand All @@ -99,19 +96,6 @@ public MavenJDOMWriter() {
lineSeparator = "\n";
} // -- org.apache.maven.model.io.jdom.MavenJDOMWriter()

/**
* Method write.
*
* @param project
* @param writer
* @param document
*/
public void write(Model project, Document document, String encoding, OutputStreamWriter writer)
throws java.io.IOException {
Format format = Format.getRawFormat().setEncoding(encoding).setLineSeparator(LS);
write(project, document, writer, format);
} // -- void write(Model, Document, OutputStreamWriter)

/**
* Method write.
*
Expand Down
29 changes: 28 additions & 1 deletion src/test/java/io/fabric8/maven/merge/SmartModelMergerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import static org.assertj.core.api.Assertions.assertThat;

import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

import org.apache.maven.model.Dependency;
Expand All @@ -10,6 +13,8 @@
import org.apache.maven.model.merge.ModelMerger;
import org.junit.jupiter.api.Test;

import io.fabric8.maven.Maven;

/**
* @author <a href="mailto:[email protected]">George Gastaldi</a>
*/
Expand Down Expand Up @@ -58,7 +63,7 @@ public void should_copy_profiles() {

merger.merge(target, source, false, null);

assertThat(target.getProfiles().contains(profile));
assertThat(target.getProfiles()).contains(profile);
}

@Test
Expand Down Expand Up @@ -89,4 +94,26 @@ public void should_merge_profiles() {
assertThat(target.getProfiles().get(0).getModules()).containsExactly("A", "B", "C", "D", "E", "F");
}

@Test
void should_keep_target_indent_2() throws URISyntaxException {
ModelMerger merger = new SmartModelMerger();
final Model source = Maven.readModel(Paths.get(getClass().getResource("indent/source-pom.xml").toURI()));
final Path targetFile = Paths.get(getClass().getResource("indent/pom-2.xml").toURI());
final Model target = Maven.readModel(targetFile);
merger.merge(target, source, false, null);
Maven.writeModel(target, targetFile);
assertThat(targetFile).hasSameTextualContentAs(Paths.get(getClass().getResource("indent/result-pom-2.xml").toURI()));
}

@Test
void should_keep_target_indent_4() throws URISyntaxException {
ModelMerger merger = new SmartModelMerger();
final Model source = Maven.readModel(Paths.get(getClass().getResource("indent/source-pom.xml").toURI()));
final Path targetFile = Paths.get(getClass().getResource("indent/pom-4.xml").toURI());
final Model target = Maven.readModel(targetFile);
merger.merge(target, source, true, null);
Maven.writeModel(target, targetFile);
assertThat(targetFile).hasSameTextualContentAs(Paths.get(getClass().getResource("indent/result-pom-4.xml").toURI()));
}

}
20 changes: 20 additions & 0 deletions src/test/resources/io/fabric8/maven/merge/indent/pom-2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?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>
<parent>
<groupId>org.jboss</groupId>
<artifactId>jboss-parent</artifactId>
<version>29</version>
</parent>
<groupId>io.fabric8</groupId>
<artifactId>maven-model-interpreter</artifactId>
<version>2-SNAPSHOT</version>
<dependencies>
<!-- Maven model -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
</project>
20 changes: 20 additions & 0 deletions src/test/resources/io/fabric8/maven/merge/indent/pom-4.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?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>
<parent>
<groupId>org.jboss</groupId>
<artifactId>jboss-parent</artifactId>
<version>29</version>
</parent>
<groupId>io.fabric8</groupId>
<artifactId>maven-model-interpreter</artifactId>
<version>2-SNAPSHOT</version>
<dependencies>
<!-- Maven model -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
</project>
25 changes: 25 additions & 0 deletions src/test/resources/io/fabric8/maven/merge/indent/result-pom-2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?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>
<parent>
<groupId>org.jboss</groupId>
<artifactId>jboss-parent</artifactId>
<version>29</version>
</parent>
<groupId>io.fabric8</groupId>
<artifactId>maven-model-interpreter</artifactId>
<version>2-SNAPSHOT</version>
<dependencies>
<!-- Maven model -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model-builder</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
</project>
25 changes: 25 additions & 0 deletions src/test/resources/io/fabric8/maven/merge/indent/result-pom-4.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?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>
<parent>
<groupId>org.jboss</groupId>
<artifactId>jboss-parent</artifactId>
<version>29</version>
</parent>
<groupId>io.fabric8</groupId>
<artifactId>maven-model-interpreter</artifactId>
<version>2-SNAPSHOT</version>
<dependencies>
<!-- Maven model -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model-builder</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
</project>
15 changes: 15 additions & 0 deletions src/test/resources/io/fabric8/maven/merge/indent/source-pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?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">
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model-builder</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
</project>

0 comments on commit 28368f4

Please sign in to comment.