From b3531c327c1c5c9d4f79259201dab8928349eb9f Mon Sep 17 00:00:00 2001 From: Andrew Oberstar Date: Fri, 6 Apr 2018 20:01:48 -0500 Subject: [PATCH] Handle repos with no commits Repos with no commits caused an IllegalArgumentException when trying to set the build metadata. This change models repos with no commits by having the commit ID be an Optional and falls back to "uncommitted" if no commit ID is found when settting the build metadata. This fixes #68. --- .../org/ajoberstar/reckon/core/VcsInventory.java | 4 ++-- .../core/strategy/StagePreReleaseStrategy.java | 2 +- .../strategy/StagePreReleaseStrategyTest.groovy | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/reckon-core/src/main/java/org/ajoberstar/reckon/core/VcsInventory.java b/reckon-core/src/main/java/org/ajoberstar/reckon/core/VcsInventory.java index fea9d7f9..13765136 100644 --- a/reckon-core/src/main/java/org/ajoberstar/reckon/core/VcsInventory.java +++ b/reckon-core/src/main/java/org/ajoberstar/reckon/core/VcsInventory.java @@ -61,8 +61,8 @@ public VcsInventory( .orElse(Collections.emptySet()); } - public String getCommitId() { - return commitId; + public Optional getCommitId() { + return Optional.ofNullable(commitId); } public Optional getCurrentVersion() { diff --git a/reckon-core/src/main/java/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategy.java b/reckon-core/src/main/java/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategy.java index a27af19e..b268e9c8 100644 --- a/reckon-core/src/main/java/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategy.java +++ b/reckon-core/src/main/java/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategy.java @@ -84,7 +84,7 @@ public Version reckonTargetVersion(VcsInventory inventory, Version targetNormal) return targetBase .setPreReleaseVersion( baseStageName + "." + baseStageNum + "." + inventory.getCommitsSinceBase()) - .setBuildMetadata(inventory.getCommitId()); + .setBuildMetadata(inventory.getCommitId().orElse("uncommitted")); } else if (stage.equals(baseStageName)) { int num = baseStageNum > 0 ? baseStageNum + 1 : 1; return targetBase.setPreReleaseVersion(stage + "." + num); diff --git a/reckon-core/src/test/groovy/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategyTest.groovy b/reckon-core/src/test/groovy/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategyTest.groovy index 1f20674e..c503053b 100644 --- a/reckon-core/src/test/groovy/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategyTest.groovy +++ b/reckon-core/src/test/groovy/org/ajoberstar/reckon/core/strategy/StagePreReleaseStrategyTest.groovy @@ -68,6 +68,22 @@ class StagePreReleaseStrategyTest extends Specification { strategy('rc').reckonTargetVersion(inventory, Version.valueOf('2.0.0')) == Version.valueOf('2.0.0-rc.1') } + def 'if repo has no commits, show build metadata as uncommitted'() { + given: + def inventoryUncommitted = new VcsInventory( + null, + null, + Version.valueOf('1.2.3-milestone.2'), + Version.valueOf('1.2.2'), + 5, + [] as Set, + [] as Set + ) + expect: + strategy(null).reckonTargetVersion(inventoryUncommitted, Version.valueOf('1.2.3')) == Version.valueOf('1.2.3-milestone.2.5+uncommitted') + + } + private StagePreReleaseStrategy strategy(String stage) { return new StagePreReleaseStrategy(['initial', 'milestone', 'rc', 'final'] as Set, { i, v -> Optional.ofNullable(stage) }) }