michael-o commented on a change in pull request #6:
URL: https://github.com/apache/maven-clean-plugin/pull/6#discussion_r770653929
##########
File path: src/main/java/org/apache/maven/plugins/clean/CleanMojo.java
##########
@@ -161,6 +161,12 @@
@Parameter( property = "maven.clean.excludeDefaultDirectories",
defaultValue = "false" )
private boolean excludeDefaultDirectories;
+ @Parameter( property = "maven.clean.fast", defaultValue = "false" )
+ private boolean fast;
+
+ @Parameter( property = "maven.clean.fastFolder", defaultValue =
"${maven.multiModuleProjectDirectory}/.mvn/clean" )
+ private File fastFolder;
Review comment:
Directory, not Folder. This isn't the Windows Explorer of Finder.
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -115,9 +124,63 @@ public void delete( File basedir, Selector selector,
boolean followSymlinks, boo
File file = followSymlinks ? basedir : basedir.getCanonicalFile();
+ if ( selector == null && !followSymlinks && fastFolder != null )
+ {
+ if ( fastDelete( file ) )
+ {
+ return;
+ }
+ }
+
delete( file, "", selector, followSymlinks, failOnError, retryOnError
);
}
+ private boolean fastDelete( File baseDir )
+ {
+ fastFolder.mkdirs();
+ if ( fastFolder.isDirectory() )
+ {
+ try
+ {
+ File tmpDir = createTempDir( fastFolder );
+ File dstDir = new File( tmpDir, baseDir.getName() );
+ Files.move( baseDir.toPath(), dstDir.toPath(),
StandardCopyOption.ATOMIC_MOVE );
+ BackgroundCleaner.delete( fastFolder, tmpDir );
+ return true;
+ }
+ catch ( IOException e )
+ {
+ if ( logDebug != null )
+ {
+ logDebug.log( "Unable to fast delete directory: " + e );
+ }
+ }
+ }
+ else
+ {
+ if ( logDebug != null )
+ {
+ logDebug.log( "Unable to fast delete directory as the path "
+ + fastFolder + " does not point to a directory" );
+ }
+ }
+ return false;
+ }
+
+ private File createTempDir( File baseFolder ) throws IOException
Review comment:
baseDir
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -44,13 +49,15 @@
private final Logger logWarn;
+ private final File fastFolder;
+
/**
* Creates a new cleaner.
*
* @param log The logger to use, may be <code>null</code> to disable
logging.
* @param verbose Whether to perform verbose logging.
*/
- Cleaner( final Log log, boolean verbose )
+ Cleaner( final Log log, boolean verbose, File fastFolder )
Review comment:
Same
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -286,4 +349,93 @@ public void update( Result result )
}
+ static class BackgroundCleaner extends Thread
+ {
+
+ private static BackgroundCleaner instance;
+
+ private final Deque<File> filesToDelete = new ArrayDeque<>();
+
+ private final Cleaner cleaner = new Cleaner( null, false, null );
+
+ private int status = 0;
+
+ public static void delete( File fastFolder, File folder )
+ {
+ synchronized ( BackgroundCleaner.class )
+ {
+ if ( instance == null || !instance.doDelete( folder ) )
+ {
+ instance = new BackgroundCleaner( fastFolder, folder );
+ }
+ }
+ }
+
+ private BackgroundCleaner( File fastFolder, File folder )
+ {
+ init( fastFolder, folder );
+ }
+
+ public void run()
+ {
+ while ( true )
+ {
+ File basedir = pollNext();
+ if ( basedir == null )
+ {
+ break;
+ }
+ try
+ {
+ cleaner.delete( basedir, "", null, false, false, true );
+ }
+ catch ( IOException e )
+ {
+ // do not display errors
+ }
+ }
+ }
+
+ synchronized void init( File fastFolder, File folder )
+ {
+ if ( fastFolder.isDirectory() )
+ {
+ File[] children = fastFolder.listFiles();
+ if ( children != null && children.length > 0 )
+ {
+ for ( File child : children )
+ {
+ doDelete( child );
+ }
+ }
+ }
+ doDelete( folder );
+ }
+
+ synchronized File pollNext()
+ {
+ File basedir = filesToDelete.poll();
+ if ( basedir == null )
+ {
+ status = 2;
+ }
+ return basedir;
+ }
+
+ synchronized boolean doDelete( File folder )
+ {
+ if ( status == 2 )
Review comment:
There values should be static finals with symbolic names.
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -44,13 +49,15 @@
private final Logger logWarn;
+ private final File fastFolder;
Review comment:
Same
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -286,4 +349,93 @@ public void update( Result result )
}
+ static class BackgroundCleaner extends Thread
+ {
+
+ private static BackgroundCleaner instance;
+
+ private final Deque<File> filesToDelete = new ArrayDeque<>();
+
+ private final Cleaner cleaner = new Cleaner( null, false, null );
+
+ private int status = 0;
+
+ public static void delete( File fastFolder, File folder )
+ {
+ synchronized ( BackgroundCleaner.class )
+ {
+ if ( instance == null || !instance.doDelete( folder ) )
+ {
+ instance = new BackgroundCleaner( fastFolder, folder );
+ }
+ }
+ }
+
+ private BackgroundCleaner( File fastFolder, File folder )
Review comment:
Same here
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -286,4 +349,93 @@ public void update( Result result )
}
+ static class BackgroundCleaner extends Thread
+ {
+
+ private static BackgroundCleaner instance;
+
+ private final Deque<File> filesToDelete = new ArrayDeque<>();
+
+ private final Cleaner cleaner = new Cleaner( null, false, null );
+
+ private int status = 0;
+
+ public static void delete( File fastFolder, File folder )
Review comment:
same here
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -115,9 +124,63 @@ public void delete( File basedir, Selector selector,
boolean followSymlinks, boo
File file = followSymlinks ? basedir : basedir.getCanonicalFile();
+ if ( selector == null && !followSymlinks && fastFolder != null )
+ {
+ if ( fastDelete( file ) )
+ {
+ return;
+ }
+ }
+
delete( file, "", selector, followSymlinks, failOnError, retryOnError
);
}
+ private boolean fastDelete( File baseDir )
+ {
+ fastFolder.mkdirs();
+ if ( fastFolder.isDirectory() )
+ {
+ try
+ {
+ File tmpDir = createTempDir( fastFolder );
+ File dstDir = new File( tmpDir, baseDir.getName() );
+ Files.move( baseDir.toPath(), dstDir.toPath(),
StandardCopyOption.ATOMIC_MOVE );
Review comment:
Problematic when the path leads to a directory on another mountpoint. It
will likely throw an exception.
##########
File path: src/main/java/org/apache/maven/plugins/clean/Cleaner.java
##########
@@ -115,9 +124,63 @@ public void delete( File basedir, Selector selector,
boolean followSymlinks, boo
File file = followSymlinks ? basedir : basedir.getCanonicalFile();
+ if ( selector == null && !followSymlinks && fastFolder != null )
+ {
+ if ( fastDelete( file ) )
+ {
+ return;
+ }
+ }
+
delete( file, "", selector, followSymlinks, failOnError, retryOnError
);
}
+ private boolean fastDelete( File baseDir )
+ {
+ fastFolder.mkdirs();
+ if ( fastFolder.isDirectory() )
+ {
+ try
+ {
+ File tmpDir = createTempDir( fastFolder );
+ File dstDir = new File( tmpDir, baseDir.getName() );
+ Files.move( baseDir.toPath(), dstDir.toPath(),
StandardCopyOption.ATOMIC_MOVE );
Review comment:
Please read carefully about the semantics of move:
https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#move(java.nio.file.Path,%20java.nio.file.Path,%20java.nio.file.CopyOption...)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]