Skip to content

Commit

Permalink
MSHARED-1285 use an up-to-date scanner instead the newscanner
Browse files Browse the repository at this point in the history
Currently it could happen that the scanner misses changed files (because
they are not part of the delta) or copies files even if they have not
changed (e.g. because the output has changes).

This uses now a different approach, instead of only handling the delta
files, we scan all inputs and compare if they are up-to-date with the
output.
  • Loading branch information
Christoph Läubrich committed Dec 8, 2023
1 parent a0005e0 commit d0a5d19
Showing 1 changed file with 36 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.maven.model.Resource;
import org.codehaus.plexus.util.DirectoryScanner;
import org.codehaus.plexus.util.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -189,20 +190,44 @@ public void filterResources(MavenResourcesExecution mavenResourcesExecution) thr
// as destination
// see MNG-1345
File outputDirectory = mavenResourcesExecution.getOutputDirectory();
boolean outputExists = outputDirectory.exists();
if (!outputExists && !outputDirectory.mkdirs()) {
if (!outputDirectory.mkdirs() && !outputDirectory.exists()) {
throw new MavenFilteringException("Cannot create resource output directory: " + outputDirectory);
}

if (resource.isFiltering()) {
isFilteringUsed = true;
}

boolean ignoreDelta = !outputExists
|| buildContext.hasDelta(mavenResourcesExecution.getFileFilters())
|| buildContext.hasDelta(getRelativeOutputDirectory(mavenResourcesExecution));
LOGGER.debug("ignoreDelta " + ignoreDelta);
Scanner scanner = buildContext.newScanner(resourceDirectory, ignoreDelta);
boolean filtersFileChanges = buildContext.hasDelta(mavenResourcesExecution.getFileFilters());
Path resourcePath = resourceDirectory.toPath();
DirectoryScanner scanner = new DirectoryScanner() {
@Override
protected boolean isSelected(String name, File file) {
if (filtersFileChanges) {
// if the file filters file has a change we must assume everything is out of
// date
return true;
}
if (file.isFile()) {
try {
File targetFile = getTargetFile(file);
if (targetFile.isFile() && buildContext.isUptodate(targetFile, file)) {
return false;
}
} catch (MavenFilteringException e) {
// can't really do anything than to assume we must copy the file...
}
}
return true;
}

private File getTargetFile(File file) throws MavenFilteringException {
Path relativize = resourcePath.relativize(file.toPath());
return getDestinationFile(
outputDirectory, targetPath, relativize.toString(), mavenResourcesExecution);
}
};
scanner.setBasedir(resourceDirectory);

setupScanner(resource, scanner, mavenResourcesExecution.isAddDefaultExcludes());

Expand Down Expand Up @@ -276,13 +301,13 @@ public void filterResources(MavenResourcesExecution mavenResourcesExecution) thr

// deal with deleted source files

scanner = buildContext.newDeleteScanner(resourceDirectory);
Scanner deleteScanner = buildContext.newDeleteScanner(resourceDirectory);

setupScanner(resource, scanner, mavenResourcesExecution.isAddDefaultExcludes());
setupScanner(resource, deleteScanner, mavenResourcesExecution.isAddDefaultExcludes());

scanner.scan();
deleteScanner.scan();

for (String name : scanner.getIncludedFiles()) {
for (String name : deleteScanner.getIncludedFiles()) {
File destinationFile = getDestinationFile(outputDirectory, targetPath, name, mavenResourcesExecution);

destinationFile.delete();
Expand Down

0 comments on commit d0a5d19

Please sign in to comment.