diff --git a/infrastructure.properties b/infrastructure.properties index a7e3583..9f5bb8a 100644 --- a/infrastructure.properties +++ b/infrastructure.properties @@ -1,3 +1,5 @@ io.workDir=~/temp/spring-data-shell -git.author=Oliver Gierke \ No newline at end of file +git.username=olivergierke +git.author=Oliver Gierke +git.email=ogierke@pivotal.io \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3fb4f22..a36135b 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,13 @@ org.springframework.boot spring-boot-starter-test + + + org.eclipse.jgit + org.eclipse.jgit + 4.0.1.201506240215-r + + diff --git a/src/main/java/org/springframework/data/release/announcement/AnnouncementOperations.java b/src/main/java/org/springframework/data/release/announcement/AnnouncementOperations.java index 900d257..e504ae5 100644 --- a/src/main/java/org/springframework/data/release/announcement/AnnouncementOperations.java +++ b/src/main/java/org/springframework/data/release/announcement/AnnouncementOperations.java @@ -79,6 +79,6 @@ public class AnnouncementOperations { public static void main(String[] args) { AnnouncementOperations operations = new AnnouncementOperations(); - System.out.println(operations.getProjectBulletpoints(new TrainIteration(ReleaseTrains.CODD, Iteration.SR2))); + System.out.println(operations.getProjectBulletpoints(new TrainIteration(ReleaseTrains.FOWLER, Iteration.SR1))); } } diff --git a/src/main/java/org/springframework/data/release/cli/StaticResources.java b/src/main/java/org/springframework/data/release/cli/StaticResources.java index 6aa92dc..a2bb509 100644 --- a/src/main/java/org/springframework/data/release/cli/StaticResources.java +++ b/src/main/java/org/springframework/data/release/cli/StaticResources.java @@ -40,7 +40,7 @@ public class StaticResources { } public String getDocumentationUrl() { - return baseUrl.concat("/reference/htmlsingle"); + return baseUrl.concat("/reference/html"); } public String getJavaDocUrl() { diff --git a/src/main/java/org/springframework/data/release/git/Branch.java b/src/main/java/org/springframework/data/release/git/Branch.java index 0e74377..b71988a 100644 --- a/src/main/java/org/springframework/data/release/git/Branch.java +++ b/src/main/java/org/springframework/data/release/git/Branch.java @@ -31,7 +31,7 @@ import org.springframework.util.Assert; @EqualsAndHashCode class Branch { - private static final Branch MASTER = new Branch("master"); + public static final Branch MASTER = new Branch("master"); private final String name; 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 d67a9bf..b49ad9f 100644 --- a/src/main/java/org/springframework/data/release/git/GitOperations.java +++ b/src/main/java/org/springframework/data/release/git/GitOperations.java @@ -22,11 +22,27 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; +import java.util.stream.Collectors; +import javax.annotation.PostConstruct; + +import org.eclipse.jgit.api.CheckoutCommand; +import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.ResetCommand.ResetType; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.storage.file.FileRepositoryBuilder; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.RefSpec; +import org.eclipse.jgit.transport.TagOpt; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.data.release.io.CommandResult; -import org.springframework.data.release.io.OsCommandOperations; import org.springframework.data.release.io.Workspace; import org.springframework.data.release.jira.IssueTracker; import org.springframework.data.release.jira.Ticket; @@ -42,7 +58,6 @@ import org.springframework.data.release.utils.Logger; import org.springframework.plugin.core.PluginRegistry; import org.springframework.stereotype.Component; import org.springframework.util.Assert; -import org.springframework.util.StringUtils; /** * Component to execut Git related operations. @@ -54,12 +69,19 @@ import org.springframework.util.StringUtils; public class GitOperations { private final GitServer server = new GitServer(); - private final OsCommandOperations os; private final Workspace workspace; private final Logger logger; private final PluginRegistry issueTracker; private final Environment environment; + private CredentialsProvider credentials; + + @PostConstruct + public void init() { + this.credentials = new UsernamePasswordCredentialsProvider(environment.getProperty("git.username"), + environment.getProperty("git.password")); + } + public GitProject getGitProject(Project project) { return new GitProject(project, server); } @@ -78,8 +100,15 @@ public class GitOperations { Branch branch = Branch.from(module); - CommandUtils.getCommandResult( - os.executeCommand(String.format("git reset --hard origin/%s", branch), module.getProject())); + try (Git git = new Git(getRepository(module.getProject()))) { + + logger.log(module, "git reset --hard origin/%s", branch); + + git.reset().// + setMode(ResetType.HARD).// + setRef("origin/".concat(branch.toString())).// + call(); + } } } @@ -106,7 +135,11 @@ public class GitOperations { String.format("No tag found for version %s of project %s, aborting.", artifactVersion, project)); } - CommandUtils.getCommandResult(os.executeCommand(String.format("git checkout %s", tag), project)); + try (Git git = new Git(getRepository(module.getProject()))) { + + logger.log(module, "git checkout %s", tag); + git.checkout().setStartPoint(tag.toString()); + } } logger.log(iteration, "Successfully checked out projects."); @@ -118,10 +151,16 @@ public class GitOperations { Branch branch = Branch.from(module); - CommandUtils.getCommandResult(update(module.getProject())); + update(module.getProject()); - String checkoutCommand = String.format("git checkout %s && git pull origin %s", branch, branch); - CommandUtils.getCommandResult(os.executeCommand(checkoutCommand, module.getProject())); + logger.log(module.getProject(), "git checkout %s && git pull origin %s", branch, branch); + checkout(module.getProject(), branch); + + try (Git git = new Git(getRepository(module.getProject()))) { + git.pull().// + setRebase(true).// + call(); + } } } @@ -130,7 +169,7 @@ public class GitOperations { List> executions = new ArrayList<>(); for (Module module : train) { - executions.add(update(module.getProject())); + update(module.getProject()); } for (Future execution : executions) { @@ -143,54 +182,80 @@ public class GitOperations { for (ModuleIteration module : iteration) { Branch branch = Branch.from(module); - CommandUtils - .getCommandResult(os.executeCommand(String.format("git push origin %s", branch), module.getProject())); + + logger.log(module, "git push origin %s", branch); + + try (Git git = new Git(getRepository(module.getProject()))) { + + Ref ref = git.getRepository().getRef(branch.toString()); + + git.push().// + setRemote("origin").// + setRefSpecs(new RefSpec(ref.getName())).// + setCredentialsProvider(credentials).// + call(); + } } } public void pushTags(Train train) throws Exception { for (Module module : train) { - CommandUtils.getCommandResult(os.executeCommand("git push --tags", module.getProject())); + + logger.log(module.getProject(), "git push --tags"); + + try (Git git = new Git(getRepository(module.getProject()))) { + + git.push().// + setRemote("origin").// + setPushTags().// + setCredentialsProvider(this.credentials).// + call(); + } } } - public Future update(Project project) throws Exception { + public void update(Project project) throws Exception { GitProject gitProject = new GitProject(project, server); String repositoryName = gitProject.getRepositoryName(); - if (workspace.hasProjectDirectory(project)) { + Repository repository = getRepository(project); - logger.log(project, "Found existing repository %s. Obtaining latest changes…", repositoryName); + try (Git git = new Git(repository)) { - return os.executeCommand("git checkout master && git reset --hard && git fetch --tags && git pull origin master", - project); + if (workspace.hasProjectDirectory(project)) { - } else { + logger.log(project, "Found existing repository %s. Obtaining latest changes…", repositoryName); + logger.log(project, "git checkout master && git reset --hard && git fetch --tags && git pull origin master"); - logger.log(project, "No repository found! Cloning from %s…", gitProject.getProjectUri()); + checkout(project, Branch.MASTER); - File projectDirectory = workspace.getProjectDirectory(project); - String command = String.format("git clone %s %s", gitProject.getProjectUri(), projectDirectory.getName()); + git.reset().setMode(ResetType.HARD).call(); - return os.executeCommand(command); + git.fetch().setTagOpt(TagOpt.FETCH_TAGS); + + git.pull().call(); + + // return os.executeCommand("git checkout master && git reset --hard && git fetch --tags && git pull origin + // master", + // project); + + } else { + + logger.log(project, "No repository found! Cloning from %s…", gitProject.getProjectUri()); + clone(project); + + // return os.executeCommand(command); + } } } public Tags getTags(Project project) throws Exception { - String result = os.executeForResult("git tag -l", project); - List tags = new ArrayList<>(); - - for (String line : result.split("\n")) { - - if (!StringUtils.isEmpty(line)) { - tags.add(new Tag(line)); - } + try (Git git = new Git(getRepository(project))) { + return new Tags(git.tagList().call().stream().map(ref -> new Tag(ref.getName())).collect(Collectors.toList())); } - - return new Tags(tags); } public void tagRelease(TrainIteration iteration) throws Exception { @@ -200,16 +265,25 @@ public class GitOperations { Branch branch = Branch.from(module); Project project = module.getProject(); - String checkoutCommand = String.format("git checkout %s", branch); - CommandUtils.getCommandResult(os.executeCommand(checkoutCommand, project)); + try (Git git = new Git(getRepository(module.getProject()))) { - String updateCommand = String.format("git pull origin %s", branch); - CommandUtils.getCommandResult(os.executeCommand(updateCommand, project)); + logger.log(module, "git checkout %s", branch); + checkout(project, branch); - String hash = getReleaseHash(module); - Tag tag = getTags(project).createTag(module); - String tagCommand = String.format("git tag %s %s", tag, hash); - CommandUtils.getCommandResult(os.executeCommand(tagCommand, project)); + logger.log(module, "git pull origin %s", branch); + git.pull().call(); + + ObjectId hash = getReleaseHash(module); + Tag tag = getTags(project).createTag(module); + + try (RevWalk walk = new RevWalk(git.getRepository())) { + + RevCommit commit = walk.parseCommit(hash); + + logger.log(module, "git tag %s %s", tag, hash.getName()); + git.tag().setName(tag.toString()).setObjectId(commit).call(); + } + } } } @@ -228,15 +302,20 @@ public class GitOperations { Assert.hasText(summary, "Summary must not be null or empty!"); for (ModuleIteration module : iteration) { - - if (summary.contains("%s")) { - summary = String.format(summary, module.getVersionString()); - } - - commit(module, summary, details); + commit(module, expandSummary(summary, module, iteration), details); } } + private String expandSummary(String summary, ModuleIteration module, TrainIteration iteration) { + + if (!summary.contains("%s")) { + return summary; + } + + return String.format(summary, + ArtifactVersion.from(module).toString().concat(String.format(" (%s)", iteration.toString()))); + } + /** * Commits the given files for the given {@link ModuleIteration} using the given summary and details for the commit * message. If no files are given, all pending changes are commited. @@ -258,36 +337,36 @@ public class GitOperations { Commit commit = new Commit(ticket, summary, details); String author = environment.getProperty("git.author"); - String commitCommand = String.format("git commit -m \"%s\" --author \"%s\"", commit, author); + String email = environment.getProperty("git.email"); - if (files.length != 0) { + logger.log(module, "git commit -m \"%s\" --author=\"%s <%s>\"", commit, author, email); - for (File file : files) { - os.executeCommand(String.format("git add %s", file.getAbsolutePath()), project).get(); - } + try (Git git = new Git(getRepository(module.getProject()))) { - CommandUtils.getCommandResult(os.executeCommand(commitCommand, project)); - } else { - CommandUtils.getCommandResult(os.executeCommand(commitCommand.concat(" -a"), project)); + git.commit().// + setMessage(commit.toString()).// + setAuthor(author, email).// + setAll(true).// + call(); } } - private String getReleaseHash(ModuleIteration module) throws Exception { + private ObjectId getReleaseHash(ModuleIteration module) throws Exception { Project project = module.getProject(); - String result = os.executeForResult("git log --pretty=format:'%h %s'", project); Ticket releaseTicket = issueTracker.getPluginFor(project).getReleaseTicketFor(module); String trigger = String.format("%s - Release", releaseTicket.getId()); - logger.log(project, "Looking up release commit (ticket id %s)", releaseTicket.getId()); + try (Git git = new Git(getRepository(module.getProject()))) { - for (String line : result.split("\n")) { + for (RevCommit commit : git.log().setMaxCount(50).call()) { - int summaryStart = line.indexOf(" "); + String summary = commit.getShortMessage(); - if (line.substring(summaryStart + 1).startsWith(trigger)) { - return line.substring(0, summaryStart); + if (summary.startsWith(trigger)) { + return commit.getId(); + } } } @@ -314,4 +393,37 @@ public class GitOperations { return null; } + + public void checkout(Project project, Branch branch) throws Exception { + + try (Git git = new Git(getRepository(project))) { + + Ref ref = git.getRepository().getRef(branch.toString()); + CheckoutCommand checkout = git.checkout().setName(branch.toString()); + + if (ref == null) { + + checkout.setCreateBranch(true).// + setUpstreamMode(SetupUpstreamMode.TRACK).// + setStartPoint("origin/".concat(branch.toString())); + } + + checkout.call(); + } + } + + private Repository getRepository(Project project) throws Exception { + return FileRepositoryBuilder.create(workspace.getFile(".git", project)); + } + + public void clone(Project project) throws Exception { + + Git git = Git.cloneRepository().// + setURI(getGitProject(project).getProjectUri()).// + setDirectory(workspace.getProjectDirectory(project)).// + call(); + + git.checkout().setName(Branch.MASTER.toString()).// + call(); + } } diff --git a/src/main/java/org/springframework/data/release/git/GitServer.java b/src/main/java/org/springframework/data/release/git/GitServer.java index a9ea28b..e6ec68c 100644 --- a/src/main/java/org/springframework/data/release/git/GitServer.java +++ b/src/main/java/org/springframework/data/release/git/GitServer.java @@ -20,7 +20,7 @@ package org.springframework.data.release.git; */ public class GitServer { - private static final String SERVER_URI = "https://www.github.com/spring-projects/"; + private static final String SERVER_URI = "https://github.com/spring-projects/"; public String getUri() { return SERVER_URI; diff --git a/src/main/java/org/springframework/data/release/gradle/GradleOperations.java b/src/main/java/org/springframework/data/release/gradle/GradleOperations.java index ba32109..4198b87 100644 --- a/src/main/java/org/springframework/data/release/gradle/GradleOperations.java +++ b/src/main/java/org/springframework/data/release/gradle/GradleOperations.java @@ -16,6 +16,7 @@ package org.springframework.data.release.gradle; import static org.springframework.data.release.model.Projects.*; + import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -36,12 +37,13 @@ import org.springframework.stereotype.Component; * @author Oliver Gierke */ @Component -@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequiredArgsConstructor(onConstructor = @__(@Autowired) ) public class GradleOperations { private static final String BUILD_GRADLE = "build.gradle"; private static final String GRADLE_PROPERTIES = "gradle.properties"; private static final String COMMONS_PROPERTY = "springDataCommonsVersion"; + private static final String BUILD_PROPERTY = "springDataBuildVersion"; private final Workspace workspace; private final Logger logger; @@ -57,6 +59,7 @@ public class GradleOperations { final Repository repository = new Repository(iteration.getIteration()); final ArtifactVersion commonsVersion = iteration.getModuleVersion(COMMONS); + final ArtifactVersion buildVersion = iteration.getModuleVersion(BUILD); for (ModuleIteration module : iteration.getModulesExcept(BUILD)) { @@ -75,15 +78,25 @@ public class GradleOperations { @Override public String doWith(String line, long number) { - if (!line.contains(COMMONS_PROPERTY)) { - return line; + if (line.contains(COMMONS_PROPERTY)) { + + ArtifactVersion version = phase.equals(Phase.PREPARE) ? commonsVersion + : commonsVersion.getNextDevelopmentVersion(); + + logger.log(project, "Setting Spring Data Commons version in %s to %s.", GRADLE_PROPERTIES, version); + return String.format("%s=%s", COMMONS_PROPERTY, version); } - ArtifactVersion version = phase.equals(Phase.PREPARE) ? commonsVersion : commonsVersion - .getNextDevelopmentVersion(); + if (line.contains(BUILD_PROPERTY)) { - logger.log(project, "Setting Spring Data Commons version in %s to %s.", GRADLE_PROPERTIES, version); - return String.format("%s=%s", COMMONS_PROPERTY, version); + ArtifactVersion version = phase.equals(Phase.PREPARE) ? buildVersion + : buildVersion.getNextDevelopmentVersion(); + + logger.log(project, "Setting Spring Data Build version in %s to %s.", GRADLE_PROPERTIES, version); + return String.format("%s=%s", BUILD_PROPERTY, version); + } + + return line; } }); diff --git a/src/main/java/org/springframework/data/release/io/CommonsExecOsCommandOperations.java b/src/main/java/org/springframework/data/release/io/CommonsExecOsCommandOperations.java index c8a6dd4..0f7cb2f 100644 --- a/src/main/java/org/springframework/data/release/io/CommonsExecOsCommandOperations.java +++ b/src/main/java/org/springframework/data/release/io/CommonsExecOsCommandOperations.java @@ -15,6 +15,8 @@ */ package org.springframework.data.release.io; +import lombok.RequiredArgsConstructor; + import java.io.File; import java.io.IOException; import java.io.StringWriter; @@ -24,8 +26,6 @@ import java.util.concurrent.Future; import javax.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; - import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecuteResultHandler; import org.apache.commons.exec.DefaultExecutor; @@ -46,7 +46,7 @@ import org.springframework.stereotype.Component; * @since 1.2.0 */ @Component -@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequiredArgsConstructor(onConstructor = @__(@Autowired) ) class CommonsExecOsCommandOperations implements OsCommandOperations { private static final Map ENVIRONMENT = new HashMap<>(); @@ -131,19 +131,19 @@ class CommonsExecOsCommandOperations implements OsCommandOperations { throw new IllegalStateException(e); } - return new AsyncResult(new CommandResult(resultHandler.getExitValue(), writer.toString(), - resultHandler.getException())); + return new AsyncResult( + new CommandResult(resultHandler.getExitValue(), writer.toString(), resultHandler.getException())); } /** - * Adds {@code JAVA_HOME} to the ENVIRONMENT variables lookuing up the path to a Java 7. + * Adds {@code JAVA_HOME} to the ENVIRONMENT variables looking up the path to a Java 7. * * @throws Exception */ @PostConstruct public void initialize() throws Exception { - String javaHome = executeCommand("/usr/libexec/java_home -F -v 1.7 -a x86_64 -d64").get().getOutput(); + String javaHome = executeCommand("/usr/libexec/java_home -F -v 1.8 -a x86_64 -d64").get().getOutput(); if (javaHome.endsWith("\n")) { javaHome = javaHome.substring(0, javaHome.length() - 1); diff --git a/src/main/java/org/springframework/data/release/maven/MavenOperations.java b/src/main/java/org/springframework/data/release/maven/MavenOperations.java index e2ba3b7..eacff6b 100644 --- a/src/main/java/org/springframework/data/release/maven/MavenOperations.java +++ b/src/main/java/org/springframework/data/release/maven/MavenOperations.java @@ -18,11 +18,11 @@ package org.springframework.data.release.maven; import static org.springframework.data.release.model.Phase.*; import static org.springframework.data.release.model.Projects.*; +import lombok.RequiredArgsConstructor; + import java.io.File; import java.io.IOException; -import lombok.RequiredArgsConstructor; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.GenericTypeResolver; import org.springframework.data.release.io.CommandResult; @@ -32,7 +32,6 @@ import org.springframework.data.release.model.ArtifactVersion; import org.springframework.data.release.model.ModuleIteration; import org.springframework.data.release.model.Phase; import org.springframework.data.release.model.Project; -import org.springframework.data.release.model.Projects; import org.springframework.data.release.model.Train; import org.springframework.data.release.model.TrainIteration; import org.springframework.data.release.utils.Logger; @@ -45,7 +44,7 @@ import org.xmlbeam.io.XBFileIO; * @author Oliver Gierke */ @Component -@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequiredArgsConstructor(onConstructor = @__(@Autowired) ) public class MavenOperations { private static final String COMMONS_VERSION_PROPERTY = "springdata.commons"; @@ -84,8 +83,6 @@ public class MavenOperations { updateBomPom(iteration, phase); final Repository repository = new Repository(iteration.getIteration()); - final ArtifactVersion commonsVersion = iteration.getModuleVersion(COMMONS); - final ArtifactVersion nextCommonsVersion = commonsVersion.getNextDevelopmentVersion(); final ArtifactVersion buildVersion = iteration.getModuleVersion(BUILD); final ArtifactVersion nextBuildVersion = buildVersion.getNextDevelopmentVersion(); @@ -113,12 +110,21 @@ public class MavenOperations { @Override public Pom doWith(Pom pom) { - if (project.dependsOn(Projects.COMMONS)) { + for (Project dependency : project.getDependencies()) { - ArtifactVersion version = CLEANUP.equals(phase) ? nextCommonsVersion : commonsVersion; - logger.log(project, "Updating Spring Data Commons version dependecy to %s (setting property %s).", version, - COMMONS_VERSION_PROPERTY); - pom.setProperty(COMMONS_VERSION_PROPERTY, version); + String dependencyProperty = dependency.getDependencyProperty(); + + if (pom.getProperty(dependencyProperty) == null) { + continue; + } + + ArtifactVersion dependencyVersion = iteration.getModuleVersion(dependency); + ArtifactVersion version = CLEANUP.equals(phase) ? dependencyVersion.getNextDevelopmentVersion() + : dependencyVersion; + + logger.log(project, "Updating %s dependency version property %s to %s.", dependency.getFullName(), + dependencyProperty, version); + pom.setProperty(dependencyProperty, version); } ArtifactVersion version = CLEANUP.equals(phase) ? nextBuildVersion : buildVersion; @@ -201,7 +207,11 @@ public class MavenOperations { logger.log(BUILD, "%s", module); - pom.setDependencyVersion(artifact.getArtifactId(), version); + pom.setDependencyManagementVersion(artifact.getArtifactId(), version); + + for (String additionalArtifact : module.getProject().getAdditionalArtifacts()) { + pom.setDependencyManagementVersion(additionalArtifact, version); + } } return pom; diff --git a/src/main/java/org/springframework/data/release/maven/Pom.java b/src/main/java/org/springframework/data/release/maven/Pom.java index 2bb3a55..0687c2e 100644 --- a/src/main/java/org/springframework/data/release/maven/Pom.java +++ b/src/main/java/org/springframework/data/release/maven/Pom.java @@ -55,9 +55,12 @@ public interface Pom { * @param artifactId * @param version */ - @XBWrite("/project/dependencies/dependency[artifactId=''{0}'']/version") + @XBWrite("/project/dependencies/dependency[artifactId=\"{0}\"]/version") Pom setDependencyVersion(String artifactId, @XBValue ArtifactVersion version); + @XBWrite("/project/dependencyManagement/dependencies/dependency[artifactId=\"{0}\"]/version") + Pom setDependencyManagementVersion(String artifactId, @XBValue ArtifactVersion version); + public interface Repository { @XBRead("child::id") diff --git a/src/main/java/org/springframework/data/release/maven/Repository.java b/src/main/java/org/springframework/data/release/maven/Repository.java index 5b1dd3d..1359a7a 100644 --- a/src/main/java/org/springframework/data/release/maven/Repository.java +++ b/src/main/java/org/springframework/data/release/maven/Repository.java @@ -22,7 +22,7 @@ import org.springframework.data.release.model.Iteration; */ public class Repository { - private static final String BASE = "http://repo.spring.io/libs-"; + private static final String BASE = "https://repo.spring.io/libs-"; private final String id; private final String url; diff --git a/src/main/java/org/springframework/data/release/misc/ReleaseOperations.java b/src/main/java/org/springframework/data/release/misc/ReleaseOperations.java index e5c34b1..04a9013 100644 --- a/src/main/java/org/springframework/data/release/misc/ReleaseOperations.java +++ b/src/main/java/org/springframework/data/release/misc/ReleaseOperations.java @@ -15,13 +15,12 @@ */ package org.springframework.data.release.misc; -import java.io.File; +import lombok.RequiredArgsConstructor; + import java.util.Collections; import java.util.HashSet; import java.util.Set; -import lombok.RequiredArgsConstructor; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.release.git.GitOperations; import org.springframework.data.release.io.Workspace; @@ -42,7 +41,7 @@ import org.springframework.util.Assert; * @author Oliver Gierke */ @Component -@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequiredArgsConstructor(onConstructor = @__(@Autowired) ) public class ReleaseOperations { private static final Set CHANGELOG_LOCATIONS; @@ -98,8 +97,7 @@ public class ReleaseOperations { if (processed) { - File file = workspace.getFile(location, module.getProject()); - git.commit(module, "Updated changelog.", null, file); + git.commit(module, "Updated changelog.", null); logger.log(module.getProject(), "Updated changelog %s.", location); } diff --git a/src/main/java/org/springframework/data/release/model/Iteration.java b/src/main/java/org/springframework/data/release/model/Iteration.java index 47de473..236fdfa 100644 --- a/src/main/java/org/springframework/data/release/model/Iteration.java +++ b/src/main/java/org/springframework/data/release/model/Iteration.java @@ -28,7 +28,9 @@ import org.springframework.util.Assert; @Value public class Iteration { - public static final Iteration SR4 = new Iteration("SR4", null); + public static final Iteration SR6 = new Iteration("SR6", null); + public static final Iteration SR5 = new Iteration("SR6", SR6); + public static final Iteration SR4 = new Iteration("SR4", SR5); public static final Iteration SR3 = new Iteration("SR3", SR4); public static final Iteration SR2 = new Iteration("SR2", SR3); public static final Iteration SR1 = new Iteration("SR1", SR2); diff --git a/src/main/java/org/springframework/data/release/model/Project.java b/src/main/java/org/springframework/data/release/model/Project.java index 76cdf62..9df3281 100644 --- a/src/main/java/org/springframework/data/release/model/Project.java +++ b/src/main/java/org/springframework/data/release/model/Project.java @@ -15,13 +15,13 @@ */ package org.springframework.data.release.model; -import java.util.Arrays; -import java.util.List; - import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import java.util.Collections; +import java.util.List; + import org.springframework.util.Assert; /** @@ -33,19 +33,25 @@ public class Project { private final @Getter ProjectKey key; private final @Getter String name; - private final List dependencies; + private final @Getter List dependencies; private final Tracker tracker; + private final @Getter List additionalArtifacts; - Project(String key, String name, Project... dependencies) { - this(key, name, Tracker.JIRA, dependencies); + Project(String key, String name, List dependencies) { + this(key, name, Tracker.JIRA, dependencies, Collections.emptyList()); } - Project(String key, String name, Tracker tracker, Project... dependencies) { + Project(String key, String name, List dependencies, List additionalArtifacts) { + this(key, name, Tracker.JIRA, dependencies, additionalArtifacts); + } + + Project(String key, String name, Tracker tracker, List dependencies, List additionalArtifacts) { this.key = new ProjectKey(key); this.name = name; - this.dependencies = Arrays.asList(dependencies); + this.dependencies = dependencies; this.tracker = tracker; + this.additionalArtifacts = additionalArtifacts; } public boolean uses(Tracker tracker) { @@ -56,6 +62,10 @@ public class Project { return "Spring Data ".concat(name); } + public String getDependencyProperty() { + return "springdata.".concat(name.toLowerCase()); + } + /** * Returns whether the current project depends on the given one. * diff --git a/src/main/java/org/springframework/data/release/model/Projects.java b/src/main/java/org/springframework/data/release/model/Projects.java index 2ad8c77..264fe3d 100644 --- a/src/main/java/org/springframework/data/release/model/Projects.java +++ b/src/main/java/org/springframework/data/release/model/Projects.java @@ -16,6 +16,7 @@ package org.springframework.data.release.model; import java.util.Arrays; +import java.util.Collections; import java.util.List; /** @@ -29,19 +30,21 @@ public class Projects { static { - BUILD = new Project("DATABUILD", "Build", Tracker.GITHUB); - COMMONS = new Project("DATACMNS", "Commons", BUILD); - JPA = new Project("DATAJPA", "JPA", COMMONS); - MONGO_DB = new Project("DATAMONGO", "MongoDB", COMMONS); - NEO4J = new Project("DATAGRAPH", "Neo4j", COMMONS); - SOLR = new Project("DATASOLR", "Solr", COMMONS); - COUCHBASE = new Project("DATACOUCH", "Couchbase", COMMONS); - CASSANDRA = new Project("DATACASS", "Cassandra", COMMONS); - ELASTICSEARCH = new Project("DATAES", "Elasticsearch", COMMONS); - REDIS = new Project("DATAREDIS", "Redis"); - GEMFIRE = new Project("SGF", "Gemfire", COMMONS); + BUILD = new Project("DATABUILD", "Build", Tracker.GITHUB, Collections.emptyList(), Collections.emptyList()); + COMMONS = new Project("DATACMNS", "Commons", Arrays.asList(BUILD)); + JPA = new Project("DATAJPA", "JPA", Arrays.asList(COMMONS)); + MONGO_DB = new Project("DATAMONGO", "MongoDB", Arrays.asList(COMMONS), + Arrays.asList("spring-data-mongodb-cross-store", "spring-data-mongodb-log4j")); + NEO4J = new Project("DATAGRAPH", "Neo4j", Arrays.asList(COMMONS)); + SOLR = new Project("DATASOLR", "Solr", Arrays.asList(COMMONS)); + COUCHBASE = new Project("DATACOUCH", "Couchbase", Arrays.asList(COMMONS)); + CASSANDRA = new Project("DATACASS", "Cassandra", Arrays.asList(COMMONS), Arrays.asList("spring-cql")); + ELASTICSEARCH = new Project("DATAES", "Elasticsearch", Arrays.asList(COMMONS)); + REDIS = new Project("DATAREDIS", "Redis", Collections.emptyList()); + GEMFIRE = new Project("SGF", "Gemfire", Arrays.asList(COMMONS)); - REST = new Project("DATAREST", "REST", COMMONS, JPA, MONGO_DB, NEO4J, GEMFIRE); + REST = new Project("DATAREST", "REST", Arrays.asList(COMMONS, JPA, MONGO_DB, NEO4J, GEMFIRE, SOLR, CASSANDRA), + Arrays.asList("spring-data-rest-core", "spring-data-rest-core")); PROJECTS = Arrays.asList(BUILD, COMMONS, JPA, MONGO_DB, NEO4J, SOLR, COUCHBASE, CASSANDRA, ELASTICSEARCH, REDIS, GEMFIRE, REST); diff --git a/src/main/java/org/springframework/data/release/model/ReleaseTrains.java b/src/main/java/org/springframework/data/release/model/ReleaseTrains.java index 4ddfd28..49611ef 100644 --- a/src/main/java/org/springframework/data/release/model/ReleaseTrains.java +++ b/src/main/java/org/springframework/data/release/model/ReleaseTrains.java @@ -34,7 +34,7 @@ public class ReleaseTrains { CODD = codd(); DIJKSTRA = dijkstra(); EVANS = DIJKSTRA.next("Evans", Transition.MINOR); - FOWLER = EVANS.next("Fowler", Transition.MAJOR); + FOWLER = EVANS.next("Fowler", Transition.MINOR); // Trains diff --git a/src/main/java/org/springframework/data/release/model/Train.java b/src/main/java/org/springframework/data/release/model/Train.java index 6622c5a..ab42e45 100644 --- a/src/main/java/org/springframework/data/release/model/Train.java +++ b/src/main/java/org/springframework/data/release/model/Train.java @@ -17,16 +17,16 @@ package org.springframework.data.release.model; import static org.springframework.data.release.model.Iteration.*; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.Value; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import lombok.Value; - import org.springframework.shell.support.util.OsUtils; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -163,7 +163,7 @@ public class Train implements Iterable { @ToString public static class Iterations implements Iterable { - public static Iterations DEFAULT = new Iterations(M1, RC1, GA, SR1, SR2, SR3, SR4); + public static Iterations DEFAULT = new Iterations(M1, RC1, GA, SR1, SR2, SR3, SR4, SR5, SR6); private final List iterations; diff --git a/src/main/java/org/springframework/data/release/model/TrainIteration.java b/src/main/java/org/springframework/data/release/model/TrainIteration.java index 1d89850..7c5ae52 100644 --- a/src/main/java/org/springframework/data/release/model/TrainIteration.java +++ b/src/main/java/org/springframework/data/release/model/TrainIteration.java @@ -15,10 +15,10 @@ */ package org.springframework.data.release.model; -import java.util.Iterator; - import lombok.Value; +import java.util.Iterator; + /** * @author Oliver Gierke */ @@ -65,6 +65,6 @@ public class TrainIteration implements Iterable { */ @Override public String toString() { - return String.format("%s - %s", train.getName(), iteration.getName()); + return String.format("%s %s", train.getName(), iteration.getName()); } } diff --git a/src/test/java/org/springframework/data/release/git/GitOperationsIntegrationTests.java b/src/test/java/org/springframework/data/release/git/GitOperationsIntegrationTests.java index a2cb2ca..e87726b 100644 --- a/src/test/java/org/springframework/data/release/git/GitOperationsIntegrationTests.java +++ b/src/test/java/org/springframework/data/release/git/GitOperationsIntegrationTests.java @@ -44,4 +44,10 @@ public class GitOperationsIntegrationTests extends AbstractIntegrationTests { Tags tags = gitOperations.getTags(COMMONS); System.out.println(StringUtils.collectionToDelimitedString(tags.asList(), "\n")); } + + @Test + public void foo() throws Exception { + + gitOperations.update(ReleaseTrains.EVANS); + } } diff --git a/src/test/java/org/springframework/data/release/io/CommonsExecOsCommandOperationsIntegegrationTests.java b/src/test/java/org/springframework/data/release/io/CommonsExecOsCommandOperationsIntegegrationTests.java index 2a46e37..94e2b40 100644 --- a/src/test/java/org/springframework/data/release/io/CommonsExecOsCommandOperationsIntegegrationTests.java +++ b/src/test/java/org/springframework/data/release/io/CommonsExecOsCommandOperationsIntegegrationTests.java @@ -21,6 +21,7 @@ import static org.junit.Assert.*; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.release.AbstractIntegrationTests; +import org.springframework.data.release.model.Projects; /** * @author Oliver Gierke @@ -32,12 +33,21 @@ public class CommonsExecOsCommandOperationsIntegegrationTests extends AbstractIn @Test public void testname() throws Exception { - CommandResult result = operations - .executeCommand("git clone --progress https://github.com/spring-projects/spring-data-build").get(); + // CommandResult result = operations + // .executeCommand("export GIT_TRACE=1 && git clone https://github.com/spring-projects/spring-data-build").get(); + + // CommandResult result = operations.executeCommand("git pull", Projects.BUILD).get(); + + CommandResult result = operations.executeCommand("git remote -v", Projects.BUILD).get(); + // .get(); if (result.hasError()) { + System.out.println(result.getStatus()); + System.out.println(result.getOutput()); System.out.println(result.getException().getMessage()); + + throw result.getException(); } else { System.out.println(result.getOutput()); }