diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java index 716d334a..ea8d1e45 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java @@ -118,6 +118,11 @@ private void prepare(ReleasePrepareRequest prepareRequest, ReleaseResult result) // Create a config containing values from the session properties (ie command line properties with cli). ReleaseUtils.copyPropertiesToReleaseDescriptor( prepareRequest.getUserProperties(), new ReleaseDescriptorBuilder() { + public ReleaseDescriptorBuilder setPushChanges(boolean pushChanges) { + builder.setPushChanges(pushChanges); + return this; + } + public ReleaseDescriptorBuilder addDevelopmentVersion(String key, String value) { builder.addDevelopmentVersion(key, value); return this; diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java index 3ccdffe7..9d9ba396 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java @@ -234,6 +234,71 @@ void testPrepareSimulateNoCompletedPhase() throws Exception { assertFalse(((ReleasePhaseStub) phaseStep3).isExecuted(), "step3 not executed"); } + @Test + void testPrepareOverridesConfiguredPushChangesFromUserProperties() throws Exception { + // pushChanges=false as if configured in the POM (where it wins over -DpushChanges) + ReleaseDescriptorBuilder builder = configStore.getReleaseConfiguration(); + builder.setCompletedPhase(null); + builder.setPushChanges(false); + + // pushChanges=true as if passed on the command line with -DpushChanges + Properties userProperties = new Properties(); + userProperties.setProperty("pushChanges", "true"); + + ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest(); + prepareRequest.setReleaseDescriptorBuilder(builder); + prepareRequest.setReleaseEnvironment(new DefaultReleaseEnvironment()); + prepareRequest.setResume(false); + prepareRequest.setUserProperties(userProperties); + + releaseManagerTest.prepare(prepareRequest); + + assertTrue( + ((ReleasePhaseStub) phaseStep1).getReleaseDescriptor().isPushChanges(), + "command-line pushChanges=true should override POM-configured pushChanges=false"); + } + + @Test + void testPrepareUserPropertyCanDisablePushChanges() throws Exception { + ReleaseDescriptorBuilder builder = configStore.getReleaseConfiguration(); + builder.setCompletedPhase(null); + builder.setPushChanges(true); + + Properties userProperties = new Properties(); + userProperties.setProperty("pushChanges", "false"); + + ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest(); + prepareRequest.setReleaseDescriptorBuilder(builder); + prepareRequest.setReleaseEnvironment(new DefaultReleaseEnvironment()); + prepareRequest.setResume(false); + prepareRequest.setUserProperties(userProperties); + + releaseManagerTest.prepare(prepareRequest); + + assertFalse( + ((ReleasePhaseStub) phaseStep1).getReleaseDescriptor().isPushChanges(), + "command-line pushChanges=false should override POM-configured pushChanges=true"); + } + + @Test + void testPrepareKeepsConfiguredPushChangesWhenUserPropertyAbsent() throws Exception { + ReleaseDescriptorBuilder builder = configStore.getReleaseConfiguration(); + builder.setCompletedPhase(null); + builder.setPushChanges(false); + + ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest(); + prepareRequest.setReleaseDescriptorBuilder(builder); + prepareRequest.setReleaseEnvironment(new DefaultReleaseEnvironment()); + prepareRequest.setResume(false); + prepareRequest.setUserProperties(new Properties()); + + releaseManagerTest.prepare(prepareRequest); + + assertFalse( + ((ReleasePhaseStub) phaseStep1).getReleaseDescriptor().isPushChanges(), + "configured pushChanges should be preserved when no command-line override is given"); + } + @Test void testPrepareSimulateCompletedPhase() throws Exception { ReleaseDescriptorBuilder builder = configStore.getReleaseConfiguration(); diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ReleasePhaseStub.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ReleasePhaseStub.java index 9d55d47f..b88e8374 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ReleasePhaseStub.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ReleasePhaseStub.java @@ -46,6 +46,11 @@ public class ReleasePhaseStub implements ReleasePhase, ResourceGenerator { */ private boolean cleaned; + /** + * The descriptor the phase was last invoked with. + */ + private ReleaseDescriptor releaseDescriptor; + @Override public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, @@ -54,6 +59,7 @@ public ReleaseResult execute( ReleaseResult result = new ReleaseResult(); executed = true; + this.releaseDescriptor = releaseDescriptor; result.setResultCode(ReleaseResult.SUCCESS); @@ -68,6 +74,7 @@ public ReleaseResult simulate( ReleaseResult result = new ReleaseResult(); simulated = true; + this.releaseDescriptor = releaseDescriptor; result.setResultCode(ReleaseResult.SUCCESS); @@ -96,4 +103,8 @@ public boolean isSimulated() { public boolean isCleaned() { return cleaned; } + + public ReleaseDescriptor getReleaseDescriptor() { + return releaseDescriptor; + } }