From 74fed6eb2937b7a9f5f472057c5cc67d593f62f9 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 16 Feb 2024 16:12:30 +0100 Subject: [PATCH] Fix project service update. --- .../data/release/git/GitOperations.java | 6 +++- .../ProjectServiceCommands.java | 30 ++++++++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/release/git/GitOperations.java b/src/main/java/org/springframework/data/release/git/GitOperations.java index bc24447..cc59f46 100644 --- a/src/main/java/org/springframework/data/release/git/GitOperations.java +++ b/src/main/java/org/springframework/data/release/git/GitOperations.java @@ -1049,9 +1049,13 @@ public class GitOperations { logger.log(project, "No repository found! Cloning from %s…", gitProject.getProjectUri()); + File projectDirectory = workspace.getProjectDirectory(project); + if (!projectDirectory.exists()) { + projectDirectory.mkdirs(); + } call(Git.cloneRepository() // .setURI(gitProject.getProjectUri()) // - .setDirectory(workspace.getProjectDirectory(project))); + .setDirectory(projectDirectory)); logger.log(project, "Cloning done!", project); } diff --git a/src/main/java/org/springframework/data/release/projectservice/ProjectServiceCommands.java b/src/main/java/org/springframework/data/release/projectservice/ProjectServiceCommands.java index 9a81d25..36c2301 100644 --- a/src/main/java/org/springframework/data/release/projectservice/ProjectServiceCommands.java +++ b/src/main/java/org/springframework/data/release/projectservice/ProjectServiceCommands.java @@ -19,6 +19,7 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; +import java.io.File; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; @@ -27,10 +28,12 @@ import java.util.stream.Stream; import org.springframework.data.release.CliComponent; import org.springframework.data.release.TimedCommand; import org.springframework.data.release.git.GitOperations; +import org.springframework.data.release.io.Workspace; import org.springframework.data.release.model.ReleaseTrains; +import org.springframework.data.release.model.SupportStatus; +import org.springframework.data.release.model.SupportedProject; import org.springframework.data.release.model.Train; import org.springframework.data.release.utils.ExecutionUtils; -import org.springframework.data.util.Streamable; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; import org.springframework.stereotype.Component; @@ -50,20 +53,27 @@ class ProjectServiceCommands extends TimedCommand { ProjectServiceOperations projects; GitOperations git; ExecutorService executor; - - @CliCommand("sagan update") - public void saganUpdateProjectInformation(@CliOption(key = "", mandatory = true) String trainNames) { - updateProjectInformation(trainNames); - } + Workspace workspace; @CliCommand("projects update") - public void updateProjectInformation(@CliOption(key = "", mandatory = true) String trainNames) { + public void updateProjectInformation(@CliOption(key = "", mandatory = true) String trainNames, + @CliOption(key = "update", mandatory = false) Boolean update) { + File oss = new File(workspace.getWorkingDirectory(), "oss"); + File commercial = new File(workspace.getWorkingDirectory(), "commercial"); List trains = Stream.of(trainNames.split(","))// - .map(ReleaseTrains::getTrainByName) - .collect(Collectors.toList()); + .map(ReleaseTrains::getTrainByName).collect(Collectors.toList()); - ExecutionUtils.run(executor, Streamable.of(trains), git::update); + if ((update != null && update) || (!commercial.exists() || !oss.exists())) { + + // avoid race condition in directory creation + oss.mkdirs(); + commercial.mkdirs(); + + for (Train train : trains) { + ExecutionUtils.run(executor, train, sp -> git.update(SupportedProject.of(sp.getProject(), SupportStatus.OSS))); + } + } projects.updateProjectMetadata(trains); }