From 1598229d2761679ebac13d1dd080900e94f49596 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 10 Feb 2016 16:17:07 +0100 Subject: [PATCH] Added command to purge Spring Data artifacts from the local repository. --- .../data/release/build/BuildOperations.java | 6 +++++ .../data/release/io/Workspace.java | 27 +++++++++++++++++++ .../data/release/io/WorkspaceCommands.java | 17 ++++++++++++ 3 files changed, 50 insertions(+) diff --git a/src/main/java/org/springframework/data/release/build/BuildOperations.java b/src/main/java/org/springframework/data/release/build/BuildOperations.java index 62ac45d..bf2048c 100644 --- a/src/main/java/org/springframework/data/release/build/BuildOperations.java +++ b/src/main/java/org/springframework/data/release/build/BuildOperations.java @@ -17,6 +17,7 @@ package org.springframework.data.release.build; import lombok.RequiredArgsConstructor; +import java.nio.file.Path; import java.util.List; import java.util.function.BiFunction; import java.util.stream.Collectors; @@ -41,6 +42,7 @@ import org.springframework.util.Assert; public class BuildOperations { private final PluginRegistry buildSystems; + private final MavenProperties properties; /** * Updates all inter-project dependencies based on the given {@link TrainIteration} and release {@link Phase}. @@ -122,6 +124,10 @@ public class BuildOperations { return doWithBuildSystem(iteration, (system, module) -> system.prepareVersion(module, phase)); } + public Path getLocalRepository() { + return properties.getLocalRepository().toPath(); + } + /** * Builds the release for the given {@link ModuleIteration} and deploys it to the staging repository. * diff --git a/src/main/java/org/springframework/data/release/io/Workspace.java b/src/main/java/org/springframework/data/release/io/Workspace.java index d7fba84..e1ed7af 100644 --- a/src/main/java/org/springframework/data/release/io/Workspace.java +++ b/src/main/java/org/springframework/data/release/io/Workspace.java @@ -29,6 +29,7 @@ import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; import java.util.Scanner; +import java.util.function.Predicate; import java.util.stream.Stream; import javax.annotation.PostConstruct; @@ -92,6 +93,32 @@ public class Workspace { }); } + public void purge(Path path, Predicate filter) throws IOException { + + Files.walkFileTree(path, new SimpleFileVisitor() { + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + + if (filter.test(file)) { + Files.delete(file); + } + + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + + if (filter.test(dir)) { + Files.delete(dir); + } + + return FileVisitResult.CONTINUE; + } + }); + } + /** * Returns the directory for the given {@link Project}. * diff --git a/src/main/java/org/springframework/data/release/io/WorkspaceCommands.java b/src/main/java/org/springframework/data/release/io/WorkspaceCommands.java index 12425fa..e4c49f8 100644 --- a/src/main/java/org/springframework/data/release/io/WorkspaceCommands.java +++ b/src/main/java/org/springframework/data/release/io/WorkspaceCommands.java @@ -21,6 +21,7 @@ import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.release.CliComponent; +import org.springframework.data.release.build.BuildOperations; import org.springframework.data.release.utils.Logger; import org.springframework.shell.core.CommandMarker; import org.springframework.shell.core.annotation.CliCommand; @@ -33,6 +34,7 @@ import org.springframework.shell.core.annotation.CliCommand; public class WorkspaceCommands implements CommandMarker { private final Workspace workspace; + private final BuildOperations build; private final Logger logger; @CliCommand("workspace cleanup") @@ -43,4 +45,19 @@ public class WorkspaceCommands implements CommandMarker { workspace.cleanup(); } + + /** + * Removes all Spring Data artifacts from the local repository. + * + * @throws IOException + */ + @CliCommand("workspace purge artifacts") + public void purge() throws IOException { + + logger.log("Workspace", "Cleaning up workspace directory at %s.", + workspace.getWorkingDirectory().getAbsolutePath()); + + workspace.purge(build.getLocalRepository(), + path -> build.getLocalRepository().relativize(path).startsWith("org/springframework/data")); + } }