Fresh copy of releaser properties for each project in meta release; fixes gh-96

This commit is contained in:
Marcin Grzejszczak
2018-09-22 21:07:18 +02:00
parent 6b267aa6ca
commit 8481ff3ef3
6 changed files with 70 additions and 23 deletions

View File

@@ -1,7 +1,7 @@
package org.springframework.cloud.release.internal.options;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Marcin Grzejszczak
@@ -20,9 +20,18 @@ public class Options {
this.metaRelease = metaRelease;
this.fullRelease = fullRelease;
this.interactive = interactive;
this.taskNames = taskNames;
this.startFrom = startFrom;
this.range = range;
this.taskNames = taskNames.stream()
.map(this::removeQuotingChars).collect(
Collectors.toList());
this.startFrom = removeQuotingChars(startFrom);
this.range = removeQuotingChars(range);
}
private String removeQuotingChars(String string) {
if (string.startsWith("'") && string.endsWith("'")) {
return string.substring(1, string.length() - 1);
}
return string;
}
@Override public String toString() {

View File

@@ -7,7 +7,6 @@ import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.YamlMapFactoryBean;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
@@ -31,6 +30,7 @@ class ReleaserPropertiesUpdater {
void updateProperties(ReleaserProperties properties, File clonedProjectFromOrg) {
ReleaserProperties props = updatePropertiesFromFile(properties, clonedProjectFromOrg);
log.info("Updated properties [\n\n{}\n\n]", props);
updateProperties(props);
}
@@ -64,6 +64,8 @@ class ReleaserPropertiesUpdater {
catch (Exception e) {
throw new IllegalStateException(e);
}
} else {
log.info("No config/releaser.yml found. Will NOT update the current properties");
}
log.info("Updating working directory to [{}]", clonedProjectFromOrg.getAbsolutePath());
copy.setWorkingDir(clonedProjectFromOrg.getAbsolutePath());

View File

@@ -58,9 +58,8 @@ public class SpringReleaser {
if (options.metaRelease) {
log.info("Meta Release picked. Will iterate over all projects and perform release of each one");
this.properties.getGit().setFetchVersionsFromGit(false);
ReleaserProperties copy = clonePropertiesForProject();
metaReleaseProjects(options)
.forEach(project -> processProjectForMetaRelease(copy, options, project));
.forEach(project -> processProjectForMetaRelease(clonePropertiesForProject(), options, project));
} else {
log.info("Single project release picked. Will release only the current project");
File projectFolder = projectFolder();
@@ -70,6 +69,7 @@ public class SpringReleaser {
}
private void processProjectForMetaRelease(ReleaserProperties copy, Options options, String project) {
log.info("Original properties [\n\n{}\n\n]", copy);
File clonedProjectFromOrg = this.releaser.clonedProjectFromOrg(project);
updatePropertiesIfCustomConfigPresent(copy, clonedProjectFromOrg);
log.info("Successfully cloned the project [{}] to [{}]", project, clonedProjectFromOrg);
@@ -103,7 +103,6 @@ public class SpringReleaser {
log.info("List of all projects to clone before filtering {}", filteredProjects);
if (StringUtils.hasText(options.startFrom)) {
log.info("Start from option provided [{}]", options.startFrom);
options.startFrom = removeQuotingChars(options.startFrom);
int projectIndex = filteredProjects.indexOf(options.startFrom);
if (projectIndex < 0) throw new IllegalStateException("Project [" + options.startFrom + "] not found");
if (log.isDebugEnabled()) {
@@ -113,11 +112,7 @@ public class SpringReleaser {
options.startFrom = "";
enforceFullRelease(options);
} else if (!options.taskNames.isEmpty()) {
log.info("Task names provided provided {}", options.taskNames);
options.taskNames = new ArrayList<>(options.taskNames)
.stream()
.map(this::removeQuotingChars)
.collect(Collectors.toList());
log.info("Task names provided {}", options.taskNames);
filteredProjects = filteredProjects.stream()
.filter(project -> options.taskNames.contains(project))
.collect(Collectors.toList());
@@ -128,13 +123,6 @@ public class SpringReleaser {
return filteredProjects;
}
private String removeQuotingChars(String string) {
if (string.startsWith("'") && string.endsWith("'")) {
return string.substring(1, string.length() - 1);
}
return string;
}
protected void enforceFullRelease(Options options) {
options.fullRelease = true;
}

View File

@@ -1,7 +1,6 @@
package org.springframework.cloud.release.internal.spring;
import edu.emory.mathcs.backport.java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
@@ -251,6 +250,19 @@ public class OptionsProcessorTests {
then(this.third.executed).isFalse();
}
@Test
public void should_remove_single_quotes() throws Exception {
Options options = interactiveOpts().fullRelease(true)
.range("'1-2'")
.startFrom("'c'")
.taskNames(Arrays.asList("'a'", "'b'"))
.options();
then(options.range).isEqualTo("1-2");
then(options.startFrom).isEqualTo("c");
then(options.taskNames).containsOnly("a", "b");
}
private OptionsBuilder interactiveOpts() {
return new OptionsBuilder();
}