added verbose output option
This commit is contained in:
parent
036a672b65
commit
3499a717e2
65
README.md
65
README.md
@ -58,52 +58,59 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `copy-file` | A convenience goal that copies all files/folders specified in a source path to a target path. |
|
||||
| `move-file` | A convenience goal that moves all files/folders specified in a source path to a target path. |
|
||||
|
||||
### Common Configuration Properties
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. This takes substantially more memory/time to process. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
| `verbose` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `replace-file`
|
||||
|
||||
Manipulates all the contents in the specified files based the specified regular expression replacements.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
|
||||
| `chunkSize` | `int` | | `1024` | The streaming buffer/chunk size in bytes, while evaluating the regular expressions. Adjust for classic speed/memory trade-off. Be aware that files are processed line-by-line, unless `allowMultiLineMatch` is set to `true`. |
|
||||
| `filesets` | `FileSet[]` | Yes | | Executes against these files. |
|
||||
| `regexes` | `Regex[]` | Yes | | Applies these regular expressions and replacement text against those files. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. This takes substantially more memory/time to process. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `replace-properties`
|
||||
|
||||
Copies and replaces the values of the specified properties based on the specified regular expression replacements; storing the changed values in new properties.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| -------- | ----------- |
|
||||
| `properties` | `String[]` | Yes | | Executes against these properties. |
|
||||
| `newPropertySuffix` | `String` | | `-regex` | All evaluated properties will be copied to new properties with the same property name plus this suffix. |
|
||||
| `regexes` | `Regex[]` | Yes | | Applies these regular expressions and replacement text against those files. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. This takes substantially more memory/time to process. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `replace-property`
|
||||
|
||||
Copies and replaces the value of the specified property based on the specified regular expression replacements; storing the changed value in a new property.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| ------- | ----------- |
|
||||
| `property` | `String` | Yes | | Executes against this property. |
|
||||
| `newProperty` | `String` | | | The evaluated property will be copied to this property name. If not specified, it will be the same name as the `property` with a `-regex` suffix. |
|
||||
| `regexes` | `Regex[]` | Yes | | Applies these regular expressions and replacement text against those files. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. This takes substantially more memory/time to process. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `replace-text`
|
||||
|
||||
Replaces the specified text based on the specified regular expression replacements; storing the result in a property.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| ------- | ----------- |
|
||||
| `text` | `String` | Yes | | Execute against this text. |
|
||||
| `newProperty` | `String` | Yes | | The evaluated text will be copied to this property name. |
|
||||
| `regexes` | `Regex[]` | Yes | | Applies these regular expressions and replacement text against those files. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. This takes substantially more memory/time to process. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `match-file`
|
||||
|
||||
Searches the contents of the specified files based using the specified regular expressions; storing the result of the search in a property.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
|
||||
| `chunkSize` | `int` | | `1024` | The streaming buffer/chunk size in bytes, while evaluating the regular expressions. Adjust for classic speed/memory trade-off. Be aware that files are processed line-by-line, unless `allowMultiLineMatch` is set to `true`. |
|
||||
@ -112,12 +119,11 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `patterns` | `String[]` | Yes | | Evaluates these regular expressions against those files. |
|
||||
| `allowPartialMatch` | `boolean` | | `true` | A value of `true` allows for partial matching, rather than exact line-by-line matching. |
|
||||
| `negate` | `boolean` | | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. This takes substantially more memory/time to process. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `match-filename`
|
||||
|
||||
Checks the filenames of the specified files based using the specified regular expressions; storing the result in a property.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:-----------:|:--------:| ------- | ----------- |
|
||||
| `sourceDirectory` | `File` | Yes | | Executes against this file. |
|
||||
@ -125,11 +131,11 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `patterns` | `String[]` | Yes | | Evaluates these regular expressions the file. |
|
||||
| `allowPartialMatch` | `boolean` | | `true` | A value of `true` allows for partial matching, rather than exact filename matching. |
|
||||
| `negate` | `boolean` | | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `match-properties`
|
||||
|
||||
Checks the values of the specified properties based on the specified regular expressions; storing the results in new properties.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| -------- | ----------- |
|
||||
| `properties` | `String[]` | Yes | | Executes against these properties. |
|
||||
@ -137,12 +143,11 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `patterns` | `String[]` | Yes | | Evaluates these regular expressions against those properties' values. |
|
||||
| `allowPartialMatch` | `boolean` | | `true` | A value of `true` allows for partial matching, rather than exact matching. |
|
||||
| `negate` | `boolean` | | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. Very rare for property evaluation. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `match-property`
|
||||
|
||||
Checks the value of the specified property based on the specified regular expressions; storing the result in a new property.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| ------- | ----------- |
|
||||
| `property` | `String` | Yes | | Executes against this property. |
|
||||
@ -150,12 +155,11 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `patterns` | `String[]` | Yes | | Evaluates these regular expressions against the property value. |
|
||||
| `allowPartialMatch` | `boolean` | | `true` | A value of `true` allows for partial matching, rather than exact matching. |
|
||||
| `negate` | `boolean` | | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. Very rare for property evaluation. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `match-text`
|
||||
|
||||
Checks the specified text based on the specified regular expressions; storing the result in a property.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| ------- | ----------- |
|
||||
| `text` | `String` | Yes | | Execute against this text. |
|
||||
@ -163,24 +167,27 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `patterns` | `String[]` | Yes | | Evaluates these regular expressions against the property value. |
|
||||
| `allowPartialMatch` | `boolean` | | `true` | A value of `true` allows for partial matching, rather than exact matching. |
|
||||
| `negate` | `boolean` | | `false` | A value of `true` will reverse the `true`/`false` on the resultant property value. |
|
||||
| `allowMultiLineMatch` | `boolean` | | `false` | A value of `true` allows for multi-line matching. Very rare for property evaluation. |
|
||||
| `charset` | `string` | | `utf-8` | |
|
||||
| `skip` | `boolean` | | `false` | |
|
||||
|
||||
### Goal: `copy-file`
|
||||
|
||||
Copies all the files in the specified source directory while applying the specified regular expression replacements to their contents; storing the files in the specified target directory.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| --------- | ----------- |
|
||||
| ---------------------- |:---------:|:--------:| ---------- | ----------- |
|
||||
| `sourceDirectory` | `File` | | ${basedir} | Copy all files from this directory. |
|
||||
| `targetDirectory` | `File` | | ${basedir} | Copy all files to this directory. |
|
||||
| `regexes` | `Regex[]` | Yes | | Applies these regular expressions and replacement text against those files. |
|
||||
| `overwrite` | `boolean` | | `true` | |
|
||||
|
||||
### Goal: `move-file`
|
||||
|
||||
Moves all the files from the specified source directory while applying the specified regular expression replacements to their contents; storing the files in the specified target directory.
|
||||
|
||||
| Configuration Property | Data Type | Required | Default | Description |
|
||||
| ---------------------- |:----------:|:--------:| --------- | ----------- |
|
||||
| ---------------------- |:---------:|:--------:| ---------- | ----------- |
|
||||
| `sourceDirectory` | `File` | | ${basedir} | Move all files from this directory. |
|
||||
| `targetDirectory` | `File` | | ${basedir} | Move all files to this directory. |
|
||||
| `regexes` | `Regex[]` | Yes | | Applies these regular expressions and replacement text against those files. |
|
||||
| `overwrite` | `boolean` | | `true` | |
|
||||
|
||||
## Model
|
||||
@ -193,4 +200,4 @@ This is a maven plugin that provides various regular expression based goals to M
|
||||
| `replacement` | `String` | | `` | A regular expression replacement string. |
|
||||
| `previousPattern` | `String` | | | A regular expression pattern to look back against, removing everything down to and including the pattern. |
|
||||
|
||||
The `previousPattern` allows for you to match some text and remove everything before the match, up to the `prevoiusPattern. This is useful when matching a method and removing it and all its annotations.
|
||||
The `previousPattern` allows for you to match some text and remove everything before the match, up to the `prevoiusPattern`. This is useful when matching a method and removing it and all its annotations. If the `previousPattern` has no match, it will not remove any text before the primary match.
|
||||
|
@ -3,4 +3,6 @@ this is a multi line test file.
|
||||
|
||||
it is supposed to emulate larger files and multiline pattern matching.
|
||||
|
||||
sometimes this doesn՚t work with unicode characters.
|
||||
|
||||
good luck!
|
@ -160,17 +160,17 @@
|
||||
</requireFileChecksum>
|
||||
<requireFileChecksum>
|
||||
<file>${project.build.directory}/noreplace-one/folder1/file12.txt</file>
|
||||
<checksum>925a6e3bd25cdd61695aa55d008ab4d2</checksum>
|
||||
<checksum>725d3a15f631dda5b058357129fd17fd</checksum>
|
||||
<type>md5</type>
|
||||
</requireFileChecksum>
|
||||
<requireFileChecksum>
|
||||
<file>${project.build.directory}/replace-linestart/file12.txt</file>
|
||||
<checksum>fb1f2b040970526fc99b1339f22465f1</checksum>
|
||||
<checksum>791882a340c18da89b524d7735cc085c</checksum>
|
||||
<type>md5</type>
|
||||
</requireFileChecksum>
|
||||
<requireFileChecksum>
|
||||
<file>${basedir}/folder1/file12.txt</file>
|
||||
<checksum>a7f509275e16ff57cd7756cdca70822a</checksum>
|
||||
<checksum>6fb82d67ec64b04df220a11adfba81a3</checksum>
|
||||
<type>md5</type>
|
||||
</requireFileChecksum>
|
||||
</rules>
|
||||
|
@ -48,8 +48,10 @@ public abstract class AbstractMatchMojo extends AbstractRegexMojo {
|
||||
@Override
|
||||
protected void executeOnText(Properties props, String text, String newPropertyName) {
|
||||
boolean matches = this.matches(text);
|
||||
if (matches)
|
||||
this.getLog().debug("Matches!");
|
||||
if (this.verbose)
|
||||
this.getLog().info("Setting property: " + newPropertyName + ": " + matches);
|
||||
else if (matches)
|
||||
this.getLog().info("Matches!");
|
||||
if (props == null)
|
||||
props = this.project.getProperties();
|
||||
props.setProperty(newPropertyName, String.valueOf(matches));
|
||||
@ -97,11 +99,17 @@ public abstract class AbstractMatchMojo extends AbstractRegexMojo {
|
||||
|
||||
Matcher matcher = pattern.matcher(text);
|
||||
if (this.allowPartialMatch) {
|
||||
if (matcher.find())
|
||||
if (matcher.find()) {
|
||||
if (this.verbose)
|
||||
this.getLog().info("Pattern '" + pattern + "' matches text: " + text);
|
||||
return !this.negate;
|
||||
}
|
||||
} else {
|
||||
if (matcher.matches())
|
||||
if (matcher.matches()) {
|
||||
if (this.verbose)
|
||||
this.getLog().info("Pattern '" + pattern + "' matches text: " + text);
|
||||
return !this.negate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,9 @@ public abstract class AbstractRegexMojo extends AbstractMojo {
|
||||
|
||||
@Parameter( property = "skip", required = true, defaultValue = "false" )
|
||||
protected boolean skip = false;
|
||||
|
||||
@Parameter( property = "verbose", required = true, defaultValue = "false" )
|
||||
protected boolean verbose = false;
|
||||
|
||||
public final void execute() throws MojoExecutionException, MojoFailureException {
|
||||
if (this.skip) {
|
||||
|
@ -53,9 +53,13 @@ public abstract class AbstractReplaceMojo extends AbstractRegexMojo {
|
||||
text = "";
|
||||
String originalText = text;
|
||||
text = this.replaceAll(text);
|
||||
|
||||
if (this.getLog().isDebugEnabled() && !text.equals(originalText))
|
||||
this.getLog().debug("Manipulated value: " + text);
|
||||
|
||||
if (!text.equals(originalText)) {
|
||||
if (this.verbose)
|
||||
this.getLog().info("Setting property: " + newPropertyName + ": " + text);
|
||||
else if (this.getLog().isDebugEnabled())
|
||||
this.getLog().debug("Manipulated value: " + text);
|
||||
}
|
||||
if (props == null)
|
||||
props = this.project.getProperties();
|
||||
props.setProperty(newPropertyName, text);
|
||||
@ -205,8 +209,6 @@ public abstract class AbstractReplaceMojo extends AbstractRegexMojo {
|
||||
protected String replaceAll(String text) {
|
||||
if (text == null)
|
||||
text = "";
|
||||
if (this.getLog().isDebugEnabled())
|
||||
this.getLog().debug("replace all: " + text.length());
|
||||
|
||||
for (Triple<Pattern, String, Pattern> regex : this.compiledRegexes) {
|
||||
this.getLog().debug("Applying regex pattern: " + regex.getLeft());
|
||||
@ -214,13 +216,27 @@ public abstract class AbstractReplaceMojo extends AbstractRegexMojo {
|
||||
|
||||
Matcher matcher = regex.getLeft().matcher(text);
|
||||
if (regex.getRight() == null) {
|
||||
text = matcher.replaceAll(regex.getMiddle());
|
||||
String newtext = matcher.replaceAll(regex.getMiddle());
|
||||
if (this.verbose)
|
||||
this.getLog().info("Pattern '" + regex.getLeft() + "' matches text: " + text + "; replaced with: " + newtext);
|
||||
text = newtext;
|
||||
} else while (matcher.find()) {
|
||||
Integer previousMatchStart = this.findLastMatchIndex(regex.getRight(), text.substring(0, matcher.start()));
|
||||
text = text.substring(0, previousMatchStart) + text.substring(matcher.start());
|
||||
if (previousMatchStart == null) {
|
||||
// the previous pattern matches nothing; ignore
|
||||
} else {
|
||||
String newtext = text.substring(0, previousMatchStart) + text.substring(matcher.start());
|
||||
if (this.verbose)
|
||||
this.getLog().info("Pattern '" + regex.getRight() + "' matches text: " + text + "; chopped until next pattern: " + text);
|
||||
text = newtext;
|
||||
|
||||
matcher = regex.getLeft().matcher(text);
|
||||
}
|
||||
|
||||
matcher = regex.getLeft().matcher(text);
|
||||
text = matcher.replaceFirst(regex.getMiddle());
|
||||
String newtext = matcher.replaceFirst(regex.getMiddle());
|
||||
if (this.verbose)
|
||||
this.getLog().info("Pattern '" + regex.getLeft() + "' matches text: " + text + "; replaced with: " + newtext);
|
||||
text = newtext;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,12 @@ public class CopyFileMojo extends AbstractFileMojo {
|
||||
} else {
|
||||
Files.copy(sourcePath, targetPath);
|
||||
}
|
||||
|
||||
if (this.verbose) {
|
||||
this.getLog().info("Copied " + sourcePath + " to " + targetPath);
|
||||
} else {
|
||||
this.getLog().info("Copied " + sourcePath.getFileName() + " to " + targetPath);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -47,7 +47,9 @@ public class MatchFileContentMojo extends AbstractMatchMojo {
|
||||
this.getLog().debug("Executing file regex match");
|
||||
|
||||
boolean matches = this.matchesContentInFileSet();
|
||||
if (matches)
|
||||
if (this.verbose)
|
||||
this.getLog().info("Setting property: " + this.newProperty + ": " + matches);
|
||||
else if (matches)
|
||||
this.getLog().info("Matches!");
|
||||
this.project.getProperties().setProperty(this.newProperty, String.valueOf(matches));
|
||||
}
|
||||
@ -64,8 +66,11 @@ public class MatchFileContentMojo extends AbstractMatchMojo {
|
||||
for (String filePathAndName : filePathsAndNames) {
|
||||
Path file = baseInputPath.resolve(filePathAndName);
|
||||
if (!Files.isDirectory(file))
|
||||
if (this.matches(file, this.chunkSize))
|
||||
if (this.matches(file, this.chunkSize)) {
|
||||
if (this.verbose)
|
||||
this.getLog().info("A pattern matches file: " + file);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException ie) {
|
||||
|
@ -67,8 +67,11 @@ public class MatchFilenameMojo extends AbstractMatchMojo {
|
||||
if (!Files.isDirectory(file)) {
|
||||
getLog().debug("Visiting file: " + file);
|
||||
|
||||
if (matches(basepath.relativize(file).toString()))
|
||||
if (matches(basepath.relativize(file).toString())) {
|
||||
if (MatchFilenameMojo.this.verbose)
|
||||
MatchFilenameMojo.this.getLog().info("A pattern matches filename: " + file);
|
||||
matches.setTrue();
|
||||
}
|
||||
}
|
||||
return matches.isTrue() ? FileVisitResult.TERMINATE : FileVisitResult.CONTINUE;
|
||||
}
|
||||
@ -81,8 +84,10 @@ public class MatchFilenameMojo extends AbstractMatchMojo {
|
||||
} catch (IOException ie) {
|
||||
throw new MojoExecutionException(ie.getMessage(), ie);
|
||||
}
|
||||
|
||||
if (matches.booleanValue())
|
||||
|
||||
if (this.verbose)
|
||||
this.getLog().info("Setting property: " + this.newProperty + ": " + matches);
|
||||
else if (matches.booleanValue())
|
||||
this.getLog().info("Matches!");
|
||||
this.project.getProperties().setProperty(this.newProperty, matches.toString());
|
||||
}
|
||||
|
@ -33,6 +33,12 @@ public class MoveFileMojo extends AbstractFileMojo {
|
||||
} else {
|
||||
Files.move(sourcePath, targetPath);
|
||||
}
|
||||
|
||||
if (this.verbose) {
|
||||
this.getLog().info("Moved " + sourcePath + " to " + targetPath);
|
||||
} else {
|
||||
this.getLog().info("Moved " + sourcePath.getFileName() + " to " + targetPath);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -62,8 +62,13 @@ public class ReplaceFileContentMojo extends AbstractReplaceMojo {
|
||||
if (!Files.exists(tofile.getParent()))
|
||||
Files.createDirectories(tofile.getParent());
|
||||
|
||||
if (!Files.isDirectory(file))
|
||||
didReplace = this.replaceAll(file, tofile, this.chunkSize) || didReplace;
|
||||
if (!Files.isDirectory(file)) {
|
||||
if (this.replaceAll(file, tofile, this.chunkSize)) {
|
||||
if (this.verbose)
|
||||
this.getLog().info("A pattern replaced in file: " + file + " => " + tofile);
|
||||
didReplace = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException ie) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user