fixed fileset handling

This commit is contained in:
Brian Long 2021-05-17 11:02:32 -04:00
parent f3f8f1d3a4
commit abf7eeee75
4 changed files with 72 additions and 11 deletions

View File

@ -84,9 +84,9 @@
<configuration> <configuration>
<filesets> <filesets>
<fileset> <fileset>
<directory>${basedir}</directory> <directory>${basedir}/folder1</directory>
<includes> <includes>
<include>folder1/file12.txt</include> <include>file12.txt</include>
</includes> </includes>
<outputDirectory>${project.build.directory}/replace-linestart</outputDirectory> <outputDirectory>${project.build.directory}/replace-linestart</outputDirectory>
</fileset> </fileset>
@ -139,7 +139,7 @@
<type>md5</type> <type>md5</type>
</requireFileChecksum> </requireFileChecksum>
<requireFileChecksum> <requireFileChecksum>
<file>${project.build.directory}/replace-linestart/folder1/file12.txt</file> <file>${project.build.directory}/replace-linestart/file12.txt</file>
<checksum>fb1f2b040970526fc99b1339f22465f1</checksum> <checksum>fb1f2b040970526fc99b1339f22465f1</checksum>
<type>md5</type> <type>md5</type>
</requireFileChecksum> </requireFileChecksum>

View File

@ -14,6 +14,7 @@
*/ */
package com.inteligr8.maven.regex; package com.inteligr8.maven.regex;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -57,9 +58,11 @@ public class MatchFileContentMojo extends AbstractMatchMojo {
try { try {
for (FileSet fileSet : this.filesets) { for (FileSet fileSet : this.filesets) {
Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), "fileset input");
String[] filePathsAndNames = fsman.getIncludedFiles(fileSet); String[] filePathsAndNames = fsman.getIncludedFiles(fileSet);
for (String filePathAndName : filePathsAndNames) { for (String filePathAndName : filePathsAndNames) {
Path file = basepath.resolve(filePathAndName); Path file = baseInputPath.resolve(filePathAndName);
if (!Files.isDirectory(file)) if (!Files.isDirectory(file))
if (this.matches(file, this.chunkSize)) if (this.matches(file, this.chunkSize))
return true; return true;
@ -72,6 +75,20 @@ public class MatchFileContentMojo extends AbstractMatchMojo {
return this.negate; return this.negate;
} }
private Path resolveDirectory(Path basepath, String directory, String errorName) throws IOException, MojoExecutionException {
Path path = new File(directory).toPath();
if (!path.isAbsolute())
path = basepath.resolve(path);
if (!Files.exists(path))
throw new MojoExecutionException("A " + errorName + " directory does not exist: " + directory);
if (!Files.isDirectory(path))
throw new MojoExecutionException("A " + errorName + " does reference a directory: " + directory);
return path;
}
@Override @Override
protected void normalizeParameters() throws MojoFailureException { protected void normalizeParameters() throws MojoFailureException {
super.normalizeParameters(); super.normalizeParameters();

View File

@ -52,16 +52,12 @@ public class ReplaceFileContentMojo extends AbstractReplaceMojo {
try { try {
for (FileSet fileSet : this.filesets) { for (FileSet fileSet : this.filesets) {
String outputDir = fileSet.getOutputDirectory(); Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), false, "fileset input");
Path baseOutputPath = new File(outputDir).toPath(); Path baseOutputPath = this.resolveDirectory(basepath, fileSet.getOutputDirectory(), true, "fileset output");
if (!Files.exists(baseOutputPath))
Files.createDirectories(baseOutputPath);
if (!Files.isDirectory(baseOutputPath))
throw new MojoExecutionException("A fileset output directory does not reference a directory: " + outputDir);
String[] filePathsAndNames = fsman.getIncludedFiles(fileSet); String[] filePathsAndNames = fsman.getIncludedFiles(fileSet);
for (String filePathAndName : filePathsAndNames) { for (String filePathAndName : filePathsAndNames) {
Path file = basepath.resolve(filePathAndName); Path file = baseInputPath.resolve(filePathAndName);
Path tofile = baseOutputPath.resolve(filePathAndName); Path tofile = baseOutputPath.resolve(filePathAndName);
if (!Files.exists(tofile.getParent())) if (!Files.exists(tofile.getParent()))
Files.createDirectories(tofile.getParent()); Files.createDirectories(tofile.getParent());
@ -77,6 +73,25 @@ public class ReplaceFileContentMojo extends AbstractReplaceMojo {
return didReplace; return didReplace;
} }
private Path resolveDirectory(Path basepath, String directory, boolean createIfMissing, String errorName) throws IOException, MojoExecutionException {
Path path = new File(directory).toPath();
if (!path.isAbsolute())
path = basepath.resolve(path);
if (!Files.exists(path)) {
if (createIfMissing) {
Files.createDirectories(path);
} else {
throw new MojoExecutionException("A " + errorName + " directory does not exist: " + directory);
}
}
if (!Files.isDirectory(path))
throw new MojoExecutionException("A " + errorName + " does reference a directory: " + directory);
return path;
}
@Override @Override
protected void normalizeParameters() throws MojoFailureException { protected void normalizeParameters() throws MojoFailureException {
super.normalizeParameters(); super.normalizeParameters();

View File

@ -0,0 +1,29 @@
package com.inteligr8.maven.regex;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.maven.shared.model.fileset.FileSet;
import org.apache.maven.shared.model.fileset.util.FileSetManager;
import org.junit.Assert;
import org.junit.Test;
public class FileSetUnitTest {
@Test
public void srcMainJava() {
FileSet fileset = new FileSet();
fileset.setDirectory("src/main/java");
fileset.setIncludes(Arrays.asList("**/*.java"));
String fs = File.separator;
FileSetManager fsman = new FileSetManager();
Set<String> files = new HashSet<>(Arrays.asList(fsman.getIncludedFiles(fileset)));
Assert.assertTrue(files.size() > 15);
System.err.println(files);
Assert.assertTrue(files.contains("com"+fs+"inteligr8"+fs+"maven"+fs+"regex"+fs+"AbstractFileMojo.java"));
}
}