Skip to content

Commit 68d2e6a

Browse files
committed
2 parents b24ee75 + e9e535f commit 68d2e6a

5 files changed

Lines changed: 45 additions & 12 deletions

File tree

src/main/java/gg/nils/semanticrelease/Version.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
package gg.nils.semanticrelease;
1919

20-
public interface Version {
20+
public interface Version extends Cloneable {
2121

2222
Tag getTag();
2323

@@ -38,4 +38,6 @@ public interface Version {
3838
void incMinor();
3939

4040
void incPatch();
41+
42+
Version clone();
4143
}

src/main/java/gg/nils/semanticrelease/VersionImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,9 @@ public boolean equals(Object o) {
103103
public int hashCode() {
104104
return Objects.hash(this.tag, this.major, this.minor, this.patch);
105105
}
106+
107+
@Override
108+
public Version clone() {
109+
return new VersionImpl(this.tag, this.major, this.minor, this.patch);
110+
}
106111
}

src/main/java/gg/nils/semanticrelease/calculator/DefaultNextVersionCalculator.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public DefaultNextVersionCalculator(SemanticReleaseConfig config) {
3434

3535
@Override
3636
public Version calculate(Version latestVersion, List<Commit> commits) {
37+
Version nextVersion = latestVersion.clone();
38+
3739
int breakingChanges = 0;
3840
int features = 0;
3941
int patches = 0;
@@ -49,16 +51,16 @@ public Version calculate(Version latestVersion, List<Commit> commits) {
4951
}
5052

5153
if (breakingChanges > 0) {
52-
latestVersion.incMajor();
53-
latestVersion.setMinor(0);
54-
latestVersion.setPatch(0);
54+
nextVersion.incMajor();
55+
nextVersion.setMinor(0);
56+
nextVersion.setPatch(0);
5557
} else if (features > 0) {
56-
latestVersion.incMinor();
57-
latestVersion.setPatch(0);
58+
nextVersion.incMinor();
59+
nextVersion.setPatch(0);
5860
} else if (patches > 0) {
59-
latestVersion.incPatch();
61+
nextVersion.incPatch();
6062
}
6163

62-
return latestVersion;
64+
return nextVersion;
6365
}
6466
}

src/main/java/gg/nils/semanticrelease/versioncontrol/VersionControlProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public interface VersionControlProvider {
2727

2828
List<RawCommit> getRawCommitsSince(Version version);
2929

30+
List<Commit> getCommits();
31+
3032
List<Commit> getCommitsSince(Version version);
3133

3234
List<Tag> getTags();
@@ -44,4 +46,6 @@ public interface VersionControlProvider {
4446
String getFullVersion();
4547

4648
String getFullVersionWithoutDirty();
49+
50+
boolean canBeReleased();
4751
}

src/main/java/gg/nils/semanticrelease/versioncontrol/VersionControlProviderImpl.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@
1717

1818
package gg.nils.semanticrelease.versioncontrol;
1919

20-
import gg.nils.semanticrelease.Branch;
21-
import gg.nils.semanticrelease.Commit;
22-
import gg.nils.semanticrelease.Tag;
23-
import gg.nils.semanticrelease.Version;
20+
import gg.nils.semanticrelease.*;
2421
import gg.nils.semanticrelease.calculator.NextVersionCalculator;
2522
import gg.nils.semanticrelease.calculator.DefaultNextVersionCalculator;
2623
import gg.nils.semanticrelease.config.SemanticReleaseConfig;
@@ -56,6 +53,11 @@ protected VersionControlProviderImpl(SemanticReleaseConfig config) {
5653
this.nextVersionCalculator = new DefaultNextVersionCalculator(config);
5754
}
5855

56+
@Override
57+
public List<Commit> getCommits() {
58+
return this.rawCommitsToCommitsConverter.convert(this.getRawCommits());
59+
}
60+
5961
@Override
6062
public List<Commit> getCommitsSince(Version version) {
6163
return this.rawCommitsToCommitsConverter.convert(this.getRawCommitsSince(version));
@@ -117,4 +119,22 @@ public String getFullVersionWithoutDirty() {
117119

118120
return version;
119121
}
122+
123+
@Override
124+
public boolean canBeReleased() {
125+
Tag latestTag = this.getLatestTag();
126+
127+
// Already has a tag
128+
if (latestTag != null)
129+
return !this.getLatestVersion().equals(this.getNextVersion());
130+
131+
// New version, check for feat or fix
132+
Version tempVersion = new VersionImpl(null, 0, 0 ,0);
133+
134+
List<Commit> commits = this.getCommits();
135+
136+
Version calculatedVersion = this.nextVersionCalculator.calculate(tempVersion, commits);
137+
138+
return !tempVersion.equals(calculatedVersion);
139+
}
120140
}

0 commit comments

Comments
 (0)