Skip to content

Commit d2c3d8b

Browse files
committed
Correct display version calculation
1 parent 2623c2e commit d2c3d8b

File tree

2 files changed

+59
-6
lines changed

2 files changed

+59
-6
lines changed

src/main/java/net/kautler/command/api/Version.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,20 @@ public Version() {
8181
} catch (IOException ignored) {
8282
}
8383

84+
String unknown = "<unknown>";
85+
8486
String version = versionProperties.getProperty("version", "$version");
85-
version = "$version".equals(version) ? "<unknown>" : version;
87+
version = "$version".equals(version) ? unknown : version;
8688
this.version = version;
8789

8890
String commitId = versionProperties.getProperty("commitId", "$commitId");
89-
this.commitId = "$commitId".equals(commitId) ? "<unknown>" : commitId;
91+
this.commitId = "$commitId".equals(commitId) ? unknown : commitId;
9092

9193
String buildTimestamp = versionProperties.getProperty("buildTimestamp", "$buildTimestamp");
9294
this.buildTimestamp = "$buildTimestamp".equals(buildTimestamp) ? null : Instant.parse(buildTimestamp);
9395

94-
displayVersion = version.endsWith("-SNAPSHOT")
95-
? format("%s [%s | %s]", version, commitId, buildTimestamp)
96+
displayVersion = (version.endsWith("-SNAPSHOT") || unknown.equals(version))
97+
? format("%s [%s | %s]", version, this.commitId, this.buildTimestamp == null ? unknown : this.buildTimestamp)
9698
: version;
9799
}
98100

src/test/groovy/net/kautler/command/api/VersionTest.groovy

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jboss.weld.junit4.WeldInitiator
2222
import org.junit.Rule
2323
import spock.lang.Specification
2424
import spock.lang.Subject
25+
import spock.util.environment.RestoreSystemProperties
2526
import spock.util.mop.Use
2627

2728
import javax.inject.Inject
@@ -32,6 +33,7 @@ import static org.powermock.reflect.Whitebox.getAllInstanceFields
3233
import static org.powermock.reflect.Whitebox.getField
3334
import static org.powermock.reflect.Whitebox.newInstance
3435

36+
@RestoreSystemProperties
3537
class VersionTest extends Specification {
3638
@Rule
3739
WeldInitiator weld = WeldInitiator
@@ -59,7 +61,7 @@ class VersionTest extends Specification {
5961
version == '<unknown>'
6062
commitId == '<unknown>'
6163
buildTimestamp == null
62-
displayVersion == '<unknown>'
64+
displayVersion == '<unknown> [<unknown> | <unknown>]'
6365
}
6466

6567
cleanup:
@@ -78,7 +80,7 @@ class VersionTest extends Specification {
7880
version == '<unknown>'
7981
commitId == '<unknown>'
8082
buildTimestamp == null
81-
displayVersion == '<unknown>'
83+
displayVersion == '<unknown> [<unknown> | <unknown>]'
8284
}
8385

8486
cleanup:
@@ -137,6 +139,55 @@ class VersionTest extends Specification {
137139
versionPropertiesResourceField?.set(null, originalVersionPropertiesResource)
138140
}
139141

142+
@Use(PrivateFinalFieldSetterCategory)
143+
def 'missing commit ID should show as unknown in display version'() {
144+
given:
145+
def versionPropertiesResourceField = Version.getFinalFieldForSetting('versionPropertiesResource')
146+
def originalVersionPropertiesResource = versionPropertiesResourceField.get(null)
147+
def now = now()
148+
149+
and:
150+
versionPropertiesResourceField.set(null, new URL("testproperties:${URLEncoder.encode("""
151+
version = 1.2.3-SNAPSHOT
152+
buildTimestamp = $now
153+
""", UTF_8.name())}"))
154+
155+
expect:
156+
with(testee) {
157+
version == '1.2.3-SNAPSHOT'
158+
commitId == '<unknown>'
159+
buildTimestamp == now
160+
displayVersion == "1.2.3-SNAPSHOT [<unknown> | $now]"
161+
}
162+
163+
cleanup:
164+
versionPropertiesResourceField?.set(null, originalVersionPropertiesResource)
165+
}
166+
167+
@Use(PrivateFinalFieldSetterCategory)
168+
def 'missing build timestamp should show as unknown in display version'() {
169+
given:
170+
def versionPropertiesResourceField = Version.getFinalFieldForSetting('versionPropertiesResource')
171+
def originalVersionPropertiesResource = versionPropertiesResourceField.get(null)
172+
173+
and:
174+
versionPropertiesResourceField.set(null, new URL("testproperties:${URLEncoder.encode("""
175+
version = 1.2.3-SNAPSHOT
176+
commitId = abcdef
177+
""", UTF_8.name())}"))
178+
179+
expect:
180+
with(testee) {
181+
version == '1.2.3-SNAPSHOT'
182+
commitId == 'abcdef'
183+
buildTimestamp == null
184+
displayVersion == '1.2.3-SNAPSHOT [abcdef | <unknown>]'
185+
}
186+
187+
cleanup:
188+
versionPropertiesResourceField?.set(null, originalVersionPropertiesResource)
189+
}
190+
140191
@Use(ContextualInstanceCategory)
141192
def 'toString should start with class name'() {
142193
expect:

0 commit comments

Comments
 (0)