From 2af2b2645cb5953dc149f8aae7404f37ee03a8a2 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 23 Oct 2017 21:28:05 +0200 Subject: [PATCH] Reverting only commits that updated snapshots to other versions; fixes #50 --- .../cloud/release/internal/git/GitRepo.java | 7 +++++++ .../release/internal/git/GitRepoTests.java | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java index 042ac0a7..a9ccd85b 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java @@ -200,6 +200,13 @@ class GitRepo { void revert(File project, String message) { try(Git git = this.gitFactory.open(file(project))) { RevCommit commit = git.log().setMaxCount(1).call().iterator().next(); + String shortMessage = commit.getShortMessage(); + String id = commit.getId().getName(); + if (!shortMessage.contains("Update SNAPSHOT to ")) { + throw new IllegalStateException("Won't revert the commit with id [" + id + "] " + + "and message [" + shortMessage + "]. Only commit that updated " + + "snapshot to another version can be reverted"); + } log.debug("The commit to be reverted is [{}]", commit); git.revert().include(commit).call(); git.commit().setAmend(true).setMessage(message).call(); diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java index d7eb0a92..0a082da0 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java @@ -14,6 +14,7 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.util.List; +import org.assertj.core.api.BDDAssertions; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -225,15 +226,27 @@ public class GitRepoTests { @Test public void should_revert_changes() throws Exception { File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI()); + File foo = new File(project, "foo"); + foo.createNewFile(); + this.gitRepo.commit(project, "Update SNAPSHOT to 1.0.0.RC1"); - this.gitRepo.revert(project, "some message"); + this.gitRepo.revert(project, "Reverting the commit"); try(Git git = openGitProject(project)) { RevCommit revCommit = git.log().call().iterator().next(); - then(revCommit.getShortMessage()).isEqualTo("some message"); + then(revCommit.getShortMessage()).isEqualTo("Reverting the commit"); } } + @Test + public void should_not_revert_changes_when_commit_message_is_not_related_to_updating_snapshots() throws Exception { + File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI()); + + BDDAssertions.thenThrownBy( + () -> this.gitRepo.revert(project, "some message")) + .hasMessageContaining("Won't revert the commit with id"); + } + } class ExceptionThrowingJGitFactory extends GitRepo.JGitFactory {