From dba8a32502e04bff9d7b527e751d7e0239a2c104 Mon Sep 17 00:00:00 2001 From: Stephen Connolly Date: Sun, 26 Nov 2017 22:37:39 +0000 Subject: [PATCH] parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578433024 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578433018 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578433016 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578433015 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578433011 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578433009 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578432997 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578432995 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578432994 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578432986 +0100 parent ce04d7f8b3c2ffb77821b17d8507371892dd01da author Stephen Connolly 1511735859 +0000 committer Thorsten Heit 1578432982 +0100 Add Jenkinsfile Add Jenkinsfile and .repository ignores to rat Add Apache license header (a tad ridiculous) [MRELEASE-993] Use shallow checkout per default (git scm) Signed-off-by: olivier lamy Manage dependencies Upgrade to XMLUnit 2.x Remove AbstractRunGoalsPhase#setMavenExecutor; only used for tests and won't work after M3.0 migration because componentsMap will become immutable. Fix invalid project, flatten module should adjust relativePath Verify update-versions and rollback without ReflectionUtils Move unittests to proper unit replace whitebox usage Remove all reflection calls in tests Use latest surefire Remove unwanted writes to stderr during unittests Make project Java 9-proof Clean up failsafe IT Clean up file copy with Path power Directories should not start with a slash, in some cases there can be resolved as absolute paths Proper usage of createReactorProjects( String sourcePath, String targetPath, String executionRoot ) Separate test project preparation from execution Fix relativePath With Maven3+ distributionManagement.status not allowed in effective pom Prepare pathTranslator replacement with SuperPomProvider Make org.eclipse.aether:aether-util optional, so maven-artifact-transfer can work with Maven 3.0 too. Unittests expect expression for finalName, ITs expect explicit value. Let's make it explicit for both Add missing remote extension artifact Clone incorrectly set project.reporting.excludeDefaults from null to Boolean.FALSE [MRELEASE-994] Drop Maven2 support Upgrade mavenVersion dependencies to 3.0 (cleanup maven dependencies) GenerateReleasePomsPhase, replace deprecated PathTranslator with SuperPomProvider and ModelInterpolator JDomReporting, delete removed overridden methods PlexusJUnit4TestCase, use code from org.sonatype.sisu:sisu-inject-plexus AbstractReleaseTestCase, replace deprecated MavenProjectBuilder with ProjectBuilder AbstractRewritingReleasePhaseTestCase, ignore internal extension based tests, not supported anymore DefaultVersionInfoTest, adjust tests due to new comparison results Add dummy org.codehaus.plexus:plexus-utils:1.1, required due to auto injection by org.apache.maven.plugin.internal.PlexusUtilsInjector Code cleanup, no implementation changes Use try-with-resources Remove unnecessary @SuppressWarnings( "unchecked" ) Clean up code, no implementation changes Clean up code, no implementation changes Ensure all Maps in ReleaseDescriptor have proper generics OddEvenVersionPolicy should not depend on maven-release-manager Remove all overloaded methods from ReleaseManager, only use ReleaseRequest simplify code, replace iterators with foreach loops [MRELEASE-956] Release Strategy Interface [MRELEASE-992] Deprecated maven flag --no-plugin-updates shows warnings in the console output Replace ROLE name with class Apply multi-catch Remove more deprecated/overloaded methods Don't reask resolve questions in case of multimodule projects No need for reflection anymore Fix mocking/stubbing tests [MRELEASE-601] The Maven 2 release plugin modifies CDATA elements in pom.xml files. [MRELEASE-998] Add ability to create custom phases Copy javadoc Add unittest for DefaultVersionPolicy Reorganize if/then/else -statements to reduce nesting [MRELEASE-694] -SNAPSHOT is unexpectedly appended to version in branched pom.xml Pull up commonBasedir Move AbstractReleasePhase to maven-release-api releaseDescriptor.getOriginalScmInfo( projectId ) is checked twice, so 1 can be removed. Switch to Paths, which are more reliable and powerful compared to Files More Path replacements Revert "More Path replacements" This reverts commit 45cd37f5ef610f5f39c73d153c4ed481798e8ee8. Revert "Switch to Paths, which are more reliable and powerful compared to Files" This reverts commit 52bfff25ffcccca1061000dc60395090e233d371. [MRELEASE-1005] Extract ResourceGenerator from ReleasePhase updated Modello xsd url Make use of Path instead of File [MRELEASE-1007] Rework usage workingDirectory and commonBasedir [MNGSITE-328] use sha1 checksum instead of md5 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873523 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873428 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873366 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873234 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873185 +0100 Fixes for MRELEASE-1009: - clean up ambigous reference in JUnit test - upgrade Surefire to 2.22.0 to avoid a NullPointerException under Java 10 when executing "mvn package" Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-956] Release Strategy Interface [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fixed improper merge with upstream [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fixed improper merge with upstream Fixed improper merge with upstream Fixed Checkstyle error Javadoc comment improved [MRELEASE-1010] - Update parent to 32 o Fixed checkstyle reported errors based on upgrade. o Switch to asfMavenTlpPlgnBuild o Support https.protocols for JDK 7 o Removed hard coded version for maven-invoker-plugin now using 3.0.1 instead of inherited 3.1.0 o Changed scm version to release 1.10.0 instead of old snapshot version. [INFRA-16467] move components documentation out of CMS space [MPOM-205] use sha512 checksums instead of sha1 removed version already inherited from parent Updated to correct URL. [MRELEASE-1024] Upgrade to SCM 1.11.2 MRELEASE-985 Override snapshot dependencies from command line - Copy properties to the correct release descriptor in DefaultReleaseManager. - Do not fail the build if the property is resolved from the comand-line (in CheckDependencySnapshotsPhase). See https://issues.apache.org/jira/browse/MRELEASE-985 [MRELEASE-1023] Minor code cleanups This closes #22 Expose dependency.dev and dependency.rel properties As part of this: https://github.com/apache/maven-release/pull/18 and this: https://issues.apache.org/jira/browse/MRELEASE-985 we need to check if the command line property starts with dependency.dev or dependency.rel to be able to override the value of the property. [MRELEASE-985] Add integration test improve documentation site Verify that schemaLocation keeps its original value Codehaus Jira moved to ASF Jira switch to https [MRELEASE-1031] log info on release goals/phases progress improve landing page [MRELEASE-1032] add https://m.a.o/xsd/maven-4.0.0.xsd [MRELEASE-229] implementation of RemoveScmTagPhase, with unit test this closes #29 remove extraneous commas @hboutemy changed error to warn if tag is not present at rollback; fixed typos Remove unused import MRELEASE-980 Allow commit comments to be controlled [maven-release-plugin] prepare release maven-release-3.0.0-M1 [maven-release-plugin] prepare for next development iteration MRELEASE-1035 upgraded maven-plugin-tools and plexus-component-metadata to reproducible versions Merge with master Fix invalid project, flatten module should adjust relativePath Remove unwanted writes to stderr during unittests Fix relativePath With Maven3+ distributionManagement.status not allowed in effective pom Make org.eclipse.aether:aether-util optional, so maven-artifact-transfer can work with Maven 3.0 too. Add missing remote extension artifact Clone incorrectly set project.reporting.excludeDefaults from null to Boolean.FALSE [MRELEASE-992] Deprecated maven flag --no-plugin-updates shows warnings in the console output Apply multi-catch [MRELEASE-601] The Maven 2 release plugin modifies CDATA elements in pom.xml files. Add unittest for DefaultVersionPolicy Reorganize if/then/else -statements to reduce nesting [MRELEASE-694] -SNAPSHOT is unexpectedly appended to version in branched pom.xml releaseDescriptor.getOriginalScmInfo( projectId ) is checked twice, so 1 can be removed. [MRELEASE-1005] Extract ResourceGenerator from ReleasePhase updated Modello xsd url parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873523 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873428 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873366 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873234 +0100 parent 657d4931b23cb2c3caeecfc4cdb376d94c676507 author Thorsten Heit 1530186251 +0200 committer Thorsten Heit 1576873185 +0100 Fixes for MRELEASE-1009: - clean up ambigous reference in JUnit test - upgrade Surefire to 2.22.0 to avoid a NullPointerException under Java 10 when executing "mvn package" Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-956] Release Strategy Interface [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fixed improper merge with upstream [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare Fix for MRELEASE-835: Automatically resolve snapshot dependencies in release:prepare [MRELEASE-998] Add ability to create custom phases Fixed improper merge with upstream Fixed improper merge with upstream Fixed Checkstyle error Javadoc comment improved [MRELEASE-1010] - Update parent to 32 o Fixed checkstyle reported errors based on upgrade. o Switch to asfMavenTlpPlgnBuild o Support https.protocols for JDK 7 o Removed hard coded version for maven-invoker-plugin now using 3.0.1 instead of inherited 3.1.0 o Changed scm version to release 1.10.0 instead of old snapshot version. [INFRA-16467] move components documentation out of CMS space [MPOM-205] use sha512 checksums instead of sha1 removed version already inherited from parent Updated to correct URL. [MRELEASE-1024] Upgrade to SCM 1.11.2 MRELEASE-985 Override snapshot dependencies from command line - Copy properties to the correct release descriptor in DefaultReleaseManager. - Do not fail the build if the property is resolved from the comand-line (in CheckDependencySnapshotsPhase). See https://issues.apache.org/jira/browse/MRELEASE-985 [MRELEASE-1023] Minor code cleanups This closes #22 Expose dependency.dev and dependency.rel properties As part of this: https://github.com/apache/maven-release/pull/18 and this: https://issues.apache.org/jira/browse/MRELEASE-985 we need to check if the command line property starts with dependency.dev or dependency.rel to be able to override the value of the property. [MRELEASE-985] Add integration test improve documentation site Verify that schemaLocation keeps its original value Codehaus Jira moved to ASF Jira switch to https [MRELEASE-1031] log info on release goals/phases progress improve landing page [MRELEASE-1032] add https://m.a.o/xsd/maven-4.0.0.xsd [MRELEASE-229] implementation of RemoveScmTagPhase, with unit test this closes #29 remove extraneous commas @hboutemy changed error to warn if tag is not present at rollback; fixed typos Remove unused import MRELEASE-980 Allow commit comments to be controlled [maven-release-plugin] prepare release maven-release-3.0.0-M1 [maven-release-plugin] prepare for next development iteration MRELEASE-1035 upgraded maven-plugin-tools and plexus-component-metadata to reproducible versions Merge with master Removed changes from MRELEASE-549 --- .../release/config/ReleaseDescriptor.java | 17 ++- .../PropertiesReleaseDescriptorStore.java | 7 +- .../config/ReleaseDescriptorBuilder.java | 4 +- .../shared/release/config/ReleaseUtils.java | 10 +- .../phase/CheckDependencySnapshotsPhase.java | 103 +++++++++++++++--- .../shared/release/phase/ScmBranchPhase.java | 5 - .../shared/release/phase/ScmTagPhase.java | 7 -- .../src/main/mdo/release-descriptor.mdo | 26 +++-- .../phase/GenerateReleasePomsPhaseTest.java | 2 - .../phase/IsScmBranchParametersEquals.java | 4 +- .../phase/IsScmTagParametersEquals.java | 3 +- .../phase/ScmCommitDevelopmentPhaseTest.java | 1 - .../phase/ScmCommitPreparationPhaseTest.java | 1 - .../it/projects/prepare/MRELEASE-835/pom.xml | 71 ++++++++++++ .../prepare/MRELEASE-835/verify.groovy | 28 +++++ .../plugins/release/BranchReleaseMojo.java | 10 -- .../plugins/release/PrepareReleaseMojo.java | 24 +++- 17 files changed, 249 insertions(+), 74 deletions(-) create mode 100644 maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml create mode 100644 maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java index a45fd1377..804400492 100644 --- a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java +++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java @@ -466,10 +466,19 @@ public interface ReleaseDescriptor void setScmSourceUrl( String scmUrl ); /** - * Get whether the "--pin-externals" option in svn copy commands is enabled - * which is new in Subversion 1.9. + * Returns whether unresolved SNAPSHOT dependencies should automatically be resolved. + * If this is set, then this specifies the default answer to be used when unresolved SNAPSHOT + * dependencies should automatically be resolved ( 0:All 1:Project Dependencies 2:Plugins + * 3:Reports 4:Extensions ). Possible values are: + *
    + *
  • "all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies
  • + *
  • "dependencies" or "1": resolve project dependencies
  • + *
  • "plugins" or "2": resolve plugin dependencis
  • + *
  • "reports" or "3": resolve report dependencies
  • + *
  • "extensions" or "4": resolve extension dependencies
  • + *
* - * @return boolean + * @return String */ - boolean isPinExternals(); + String getAutoResolveSnapshots(); } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java index 9fd335ceb..f1272de62 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java @@ -249,8 +249,6 @@ public void write( BuilderReleaseDescriptor config, File file ) properties.setProperty( "remoteTagging", Boolean.toString( config.isRemoteTagging() ) ); - properties.setProperty( "pinExternals", Boolean.toString( config.isPinExternals() ) ); - properties.setProperty( "pushChanges", Boolean.toString( config.isPushChanges() ) ); if ( config.getWorkItem() != null ) @@ -258,6 +256,11 @@ public void write( BuilderReleaseDescriptor config, File file ) properties.setProperty( "workItem", config.getWorkItem() ); } + if ( config.getAutoResolveSnapshots() != null ) + { + properties.setProperty( "autoResolveSnapshots", config.getAutoResolveSnapshots() ); + } + // others boolean properties are not written to the properties file because the value from the caller is always // used diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java index 8e71be924..629a897d9 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java @@ -440,9 +440,9 @@ public ReleaseDescriptorBuilder addDependencyDevelopmentVersion( String dependen return this; } - public ReleaseDescriptorBuilder setPinExternals( boolean pinExternals ) + public ReleaseDescriptorBuilder setAutoResolveSnapshots( String autoResolveSnapshots ) { - releaseDescriptor.setPinExternals( pinExternals ); + releaseDescriptor.setAutoResolveSnapshots( autoResolveSnapshots ); return this; } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java index 0da9629cd..bcaf75813 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java @@ -161,11 +161,6 @@ public static void copyPropertiesToReleaseDescriptor( Properties properties, Rel String remoteTaggingStr = properties.getProperty( "remoteTagging" ); builder.setRemoteTagging( Boolean.valueOf( remoteTaggingStr ) ); } - if ( properties.containsKey( "pinExternals" ) ) - { - String pinExternals = properties.getProperty( "pinExternals" ); - builder.setPinExternals( Boolean.valueOf( pinExternals ) ); - } if ( properties.containsKey( "pushChanges" ) ) { String pushChanges = properties.getProperty( "pushChanges" ); @@ -175,6 +170,11 @@ public static void copyPropertiesToReleaseDescriptor( Properties properties, Rel { builder.setWorkItem( properties.getProperty( "workItem" ) ); } + if ( properties.containsKey( "autoResolveSnapshots" ) ) + { + String resolve = properties.getProperty( "autoResolveSnapshots" ); + builder.setAutoResolveSnapshots( resolve ); + } loadResolvedDependencies( properties, builder ); diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java index b19b44635..55821c083 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java @@ -144,7 +144,7 @@ private void checkProject( MavenProject project, ReleaseDescriptor releaseDescri if ( !usedSnapshotDependencies.isEmpty() || !usedSnapshotReports.isEmpty() || !usedSnapshotExtensions.isEmpty() || !usedSnapshotPlugins.isEmpty() ) { - if ( releaseDescriptor.isInteractive() ) + if ( releaseDescriptor.isInteractive() || null != releaseDescriptor.getAutoResolveSnapshots() ) { resolveSnapshots( usedSnapshotDependencies, usedSnapshotReports, usedSnapshotExtensions, usedSnapshotPlugins, releaseDescriptor ); @@ -365,10 +365,19 @@ private void resolveSnapshots( Set projectDependencies, Set { try { + String autoResolveSnapshots = releaseDescriptor.getAutoResolveSnapshots(); if ( resolveSnapshot == null ) { prompter.showMessage( RESOLVE_SNAPSHOT_MESSAGE ); - resolveSnapshot = prompter.prompt( RESOLVE_SNAPSHOT_PROMPT, Arrays.asList( "yes", "no" ), "no" ); + if ( autoResolveSnapshots != null ) + { + resolveSnapshot = "yes"; + prompter.showMessage( RESOLVE_SNAPSHOT_PROMPT + " " + resolveSnapshot ); + } + else + { + resolveSnapshot = prompter.prompt( RESOLVE_SNAPSHOT_PROMPT, Arrays.asList( "yes", "no" ), "no" ); + } } if ( resolveSnapshot.toLowerCase( Locale.ENGLISH ).startsWith( "y" ) ) @@ -376,38 +385,81 @@ private void resolveSnapshots( Set projectDependencies, Set if ( resolveSnapshotType == null ) { prompter.showMessage( RESOLVE_SNAPSHOT_TYPE_MESSAGE ); - resolveSnapshotType = - prompter.prompt( RESOLVE_SNAPSHOT_TYPE_PROMPT, Arrays.asList( "0", "1", "2", "3" ), "1" ); + int defaultAnswer = -1; + if ( autoResolveSnapshots != null ) + { + if ( "all".equalsIgnoreCase( autoResolveSnapshots ) ) + { + defaultAnswer = 0; + } + else if ( "dependencies".equalsIgnoreCase( autoResolveSnapshots ) ) + { + defaultAnswer = 1; + } + else if ( "plugins".equalsIgnoreCase( autoResolveSnapshots ) ) + { + defaultAnswer = 2; + } + else if ( "reports".equalsIgnoreCase( autoResolveSnapshots ) ) + { + defaultAnswer = 3; + } + else if ( "extensions".equalsIgnoreCase( autoResolveSnapshots ) ) + { + defaultAnswer = 4; + } + else + { + try + { + defaultAnswer = Integer.parseInt( autoResolveSnapshots ); + } + catch ( NumberFormatException e ) + { + throw new ReleaseExecutionException( e.getMessage(), e ); + } + } + } + if ( defaultAnswer >= 0 && defaultAnswer <= 4 ) + { + prompter.showMessage( RESOLVE_SNAPSHOT_TYPE_PROMPT + " " + autoResolveSnapshots ); + resolveSnapshotType = Integer.toString( defaultAnswer ); + } + else + { + resolveSnapshotType = + prompter.prompt( RESOLVE_SNAPSHOT_TYPE_PROMPT, Arrays.asList( "0", "1", "2", "3" ), "1" ); + } } switch ( Integer.parseInt( resolveSnapshotType.toLowerCase( Locale.ENGLISH ) ) ) { // all case 0: - processSnapshot( projectDependencies, releaseDescriptor ); - processSnapshot( pluginDependencies, releaseDescriptor ); - processSnapshot( reportDependencies, releaseDescriptor ); - processSnapshot( extensionDependencies, releaseDescriptor ); + processSnapshot( projectDependencies, releaseDescriptor, autoResolveSnapshots ); + processSnapshot( pluginDependencies, releaseDescriptor, autoResolveSnapshots ); + processSnapshot( reportDependencies, releaseDescriptor, autoResolveSnapshots ); + processSnapshot( extensionDependencies, releaseDescriptor, autoResolveSnapshots ); break; // project dependencies case 1: - processSnapshot( projectDependencies, releaseDescriptor ); + processSnapshot( projectDependencies, releaseDescriptor, autoResolveSnapshots ); break; // plugins case 2: - processSnapshot( pluginDependencies, releaseDescriptor ); + processSnapshot( pluginDependencies, releaseDescriptor, autoResolveSnapshots ); break; // reports case 3: - processSnapshot( reportDependencies, releaseDescriptor ); + processSnapshot( reportDependencies, releaseDescriptor, autoResolveSnapshots ); break; // extensions case 4: - processSnapshot( extensionDependencies, releaseDescriptor ); + processSnapshot( extensionDependencies, releaseDescriptor, autoResolveSnapshots ); break; default: @@ -420,7 +472,8 @@ private void resolveSnapshots( Set projectDependencies, Set } } - private void processSnapshot( Set snapshotSet, ReleaseDescriptor releaseDescriptor ) + private void processSnapshot( Set snapshotSet, ReleaseDescriptor releaseDescriptor, + String autoResolveSnapshots ) throws PrompterException, VersionParseException { Iterator iterator = snapshotSet.iterator(); @@ -435,8 +488,17 @@ private void processSnapshot( Set snapshotSet, ReleaseDescriptor relea prompter.showMessage( "Dependency '" + versionlessKey + "' is a snapshot (" + currentArtifact.getVersion() + ")\n" ); - String result = prompter.prompt( "Which release version should it be set to?", - versionInfo.getReleaseVersionString() ); + String message = "Which release version should it be set to?"; + String result; + if ( null != autoResolveSnapshots ) + { + result = versionInfo.getReleaseVersionString(); + prompter.showMessage( message + " " + result ); + } + else + { + result = prompter.prompt( message, versionInfo.getReleaseVersionString() ); + } releaseDescriptor.addDependencyReleaseVersion( versionlessKey, result ); @@ -456,7 +518,16 @@ private void processSnapshot( Set snapshotSet, ReleaseDescriptor relea nextVersion = versionInfo.toString(); } - result = prompter.prompt( "What version should the dependency be reset to for development?", nextVersion ); + message = "What version should the dependency be reset to for development?"; + if ( null != autoResolveSnapshots ) + { + result = nextVersion; + prompter.showMessage( message + " " + result ); + } + else + { + result = prompter.prompt( message, nextVersion ); + } releaseDescriptor.addDependencyDevelopmentVersion( versionlessKey, result ); } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java index 8bbde41c4..d1d85b667 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java @@ -108,7 +108,6 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro scmBranchParameters.setMessage( releaseDescriptor.getScmCommentPrefix() + "copy for branch " + branchName ); scmBranchParameters.setRemoteBranching( releaseDescriptor.isRemoteTagging() ); scmBranchParameters.setScmRevision( releaseDescriptor.getScmReleasedPomRevision() ); - scmBranchParameters.setPinExternals( releaseDescriptor.isPinExternals() ); result = provider.branch( repository, fileSet, branchName, scmBranchParameters ); } @@ -144,10 +143,6 @@ public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvir logInfo( result, " To SCM URL: " + releaseDescriptor.getScmBranchBase() ); } logInfo( result, " with label: '" + releaseDescriptor.getScmReleaseLabel() + "'" ); - if ( releaseDescriptor.isPinExternals() ) - { - logInfo( result, " with pinned externals" ); - } result.setResultCode( ReleaseResult.SUCCESS ); diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java index 6f4f67d4f..5f52d3926 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java @@ -120,7 +120,6 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro new ScmTagParameters( releaseDescriptor.getScmCommentPrefix() + "copy for tag " + tagName ); scmTagParameters.setRemoteTagging( releaseDescriptor.isRemoteTagging() ); scmTagParameters.setScmRevision( releaseDescriptor.getScmReleasedPomRevision() ); - scmTagParameters.setPinExternals( releaseDescriptor.isPinExternals() ); if ( getLogger().isDebugEnabled() ) { getLogger().debug( @@ -128,8 +127,6 @@ public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnviro getLogger().debug( "ScmTagPhase :: scmTagParameters scmRevision " + releaseDescriptor.getScmReleasedPomRevision() ); getLogger().debug( "ScmTagPhase :: fileSet " + fileSet ); - getLogger().debug( - "ScmTagPhase :: scmTagParameters pinExternals " + releaseDescriptor.isPinExternals() ); } result = provider.tag( repository, fileSet, tagName, scmTagParameters ); } @@ -171,10 +168,6 @@ public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvir logInfo( result, "Full run would be tagging remotely " + basedirAlignedReleaseDescriptor.getScmSourceUrl() + " with label: '" + releaseDescriptor.getScmReleaseLabel() + "'" ); } - if ( releaseDescriptor.isPinExternals() ) - { - logInfo( result, "Full run would pin externals" ); - } result.setResultCode( ReleaseResult.SUCCESS ); diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo index d1d49960e..6bf44f2ca 100644 --- a/maven-release-manager/src/main/mdo/release-descriptor.mdo +++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo @@ -564,14 +564,22 @@ - pinExternals + autoResolveSnapshots 3.0.0+ - boolean - false + String - Enable the "--pin-externals" option in svn copy commands which is new in Subversion 1.9. - NOTE : Currently only implemented with Subversion. - (https://issues.apache.org/jira/browse/SCM-805) + +
  • "all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies
  • +
  • "dependencies" or "1": resolve project dependencies
  • +
  • "plugins" or "2": resolve plugin dependencies
  • +
  • "reports" or "3": resolve report dependencies
  • +
  • "extensions" or "4": resolve extension dependencies
  • + + Additionally this implies that the default values for the dependency's release and next + development version are used.]]>
    @@ -797,7 +805,6 @@ updateVersionsToSnapshot != that.isUpdateVersionsToSnapshot() || allowTimestampedSnapshots != that.isAllowTimestampedSnapshots() || remoteTagging != that.isRemoteTagging() || - pinExternals != that.isPinExternals() || localCheckout != that.isLocalCheckout() || pushChanges != that.isPushChanges() ) @@ -811,7 +818,8 @@ !java.util.Objects.equals( performGoals, that.getPerformGoals() ) || !java.util.Objects.equals( defaultReleaseVersion, that.getDefaultReleaseVersion() ) || !java.util.Objects.equals( workItem, that.getWorkItem() ) || - !java.util.Objects.equals( scmReleasedPomRevision, that.getScmReleasedPomRevision() ) + !java.util.Objects.equals( scmReleasedPomRevision, that.getScmReleasedPomRevision() ) || + !java.util.Objects.equals( autoResolveSnapshots, that.getAutoResolveSnapshots() ) ) { return false; @@ -1067,7 +1075,7 @@ result = 29 * result + java.util.Objects.hashCode( defaultReleaseVersion ); result = 29 * result + java.util.Objects.hashCode( scmReleasedPomRevision ); result = 29 * result + java.util.Objects.hashCode( workItem ); - result = 29 * result + java.util.Objects.hashCode( pinExternals ); + result = 29 * result + java.util.Objects.hashCode( autoResolveSnapshots ); return result; } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java index ad381eead..c150589a1 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java @@ -117,7 +117,6 @@ public void testSuppressCommitBeforeTagOrBranch() builder.setGenerateReleasePoms( true ); builder.setSuppressCommitBeforeTagOrBranch( true ); builder.setRemoteTagging( false ); - builder.setPinExternals( false ); mapNextVersion( builder, "groupId:artifactId" ); phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects ); @@ -136,7 +135,6 @@ public void testSuppressCommitBeforeTagOrBranchAndReomoteTagging() builder.setGenerateReleasePoms( true ); builder.setSuppressCommitBeforeTagOrBranch( true ); builder.setRemoteTagging( true ); - builder.setPinExternals( false ); mapNextVersion( builder, "groupId:artifactId" ); phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects ); diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java index 8431b85e1..9fb572f30 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java @@ -40,7 +40,7 @@ public boolean matches( Object argument ) { ScmBranchParameters sbp = (ScmBranchParameters) argument; return sbp.getMessage().equals( this.scmBranchParameters.getMessage() ) - && sbp.isRemoteBranching() == this.scmBranchParameters.isRemoteBranching() - && sbp.isPinExternals() == this.scmBranchParameters.isPinExternals(); + //&& stp.isRemoteTagging() == this.scmBranchParameters.isRemoteTagging() + ; } } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java index 61962561f..0c3dc7506 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java @@ -39,7 +39,6 @@ public boolean matches( Object argument ) { ScmTagParameters stp = (ScmTagParameters) argument; return stp.getMessage().equals( this.scmTagParameters.getMessage() ) - && stp.isRemoteTagging() == this.scmTagParameters.isRemoteTagging() - && stp.isPinExternals() == this.scmTagParameters.isPinExternals(); + && stp.isRemoteTagging() == this.scmTagParameters.isRemoteTagging(); } } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java index 837886929..50ba84944 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitDevelopmentPhaseTest.java @@ -96,7 +96,6 @@ public void testNoCommitOrRollbackRequired() List reactorProjects = createReactorProjects(); builder.setRemoteTagging( false ); - builder.setPinExternals( false ); builder.setSuppressCommitBeforeTagOrBranch( true ); builder.setUpdateWorkingCopyVersions( false ); diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java index 954086c75..863cdbddf 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCommitPreparationPhaseTest.java @@ -488,7 +488,6 @@ public void testSuppressCommitWithRemoteTaggingFails() List reactorProjects = createReactorProjects(); builder.setRemoteTagging( true ); - builder.setPinExternals( false ); builder.setSuppressCommitBeforeTagOrBranch( true ); ScmProvider scmProviderMock = mock( ScmProvider.class ); diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml new file mode 100644 index 000000000..38bd07e29 --- /dev/null +++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/pom.xml @@ -0,0 +1,71 @@ + + + + 4.0.0 + + org.apache.maven.plugins.release.its + mrelease-835 + 1.0-SNAPSHOT + pom + + + scm:dummy|nul + scm:dummy|nul + + + + + + org.apache.maven.plugins + maven-release-plugin + @project.version@ + + dependencies + -Dflag -Dfoo=bar + invoker + validate + validate + verify + + + + org.apache.maven.its.release + maven-scm-provider-dummy + 1.0 + + + + + + + + + test + dependency + 1.2.3-SNAPSHOT + + + test + dependency.test + 2.3.4-SNAPSHOT + test + + + diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy new file mode 100644 index 000000000..027cc503b --- /dev/null +++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-835/verify.groovy @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +File buildLog = new File( basedir, 'build.log' ) +assert buildLog.exists() + +assert 1 == buildLog.getText().count("[DEBUG] (f) autoResolveSnapshots = dependencies") + +File pomXmlNext = new File( basedir, 'pom.xml.next' ) +assert pomXmlNext.exists() +assert 1 == pomXmlNext.getText().count("1.2.3") +assert 1 == pomXmlNext.getText().count("2.3.4") diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java index 05030f0cb..1cbd46772 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java @@ -230,15 +230,6 @@ public class BranchReleaseMojo @Parameter( defaultValue = "@{prefix} prepare branch @{releaseLabel}", property = "scmBranchCommitComment" ) private String scmBranchCommitComment = "@{prefix} prepare branch @{releaseLabel}"; - /** - * Currently only implemented with svn scm. Enable the "--pin-externals" option in svn - * copy commands which is new in Subversion 1.9. - * - * @since 3.0.0 - */ - @Parameter( defaultValue = "false", property = "pinExternals" ) - private boolean pinExternals; - @Override public void execute() throws MojoExecutionException, MojoFailureException @@ -263,7 +254,6 @@ public void execute() config.setProjectVersionPolicyId( projectVersionPolicyId ); config.setProjectNamingPolicyId( projectBranchNamingPolicyId ); config.setScmBranchCommitComment( scmBranchCommitComment ); - config.setPinExternals( pinExternals ); if ( checkModificationExcludeList != null ) { diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java index f09a24d5d..9e601c026 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java @@ -281,14 +281,26 @@ public class PrepareReleaseMojo private String scmDevelopmentCommitComment = "@{prefix} prepare for next development iteration"; /** - * Currently only implemented with svn scm. Enable the "--pin-externals" option in svn - * copy commands which is new in Subversion 1.9. - * + * Specifies whether unresolved SNAPSHOT dependencies should automatically be resolved. + * If this is set, then this specifies the default answer to be used when unresolved SNAPSHOT + * dependencies should automatically be resolved ( 0:All 1:Project Dependencies 2:Plugins + * 3:Reports 4:Extensions ). Possible values are: + *
      + *
    • "all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies
    • + *
    • "dependencies" or "1": resolve project dependencies
    • + *
    • "plugins" or "2": resolve plugin dependencis
    • + *
    • "reports" or "3": resolve report dependencies
    • + *
    • "extensions" or "4": resolve extension dependencies
    • + *
    + * * @since 3.0.0 */ - @Parameter( defaultValue = "false", property = "pinExternals" ) - private boolean pinExternals; + @Parameter( property = "autoResolveSnapshots" ) + private String autoResolveSnapshots; + /** + * {@inheritDoc} + */ @Override public void execute() throws MojoExecutionException, MojoFailureException @@ -330,7 +342,7 @@ protected void prepareRelease( boolean generateReleasePoms ) config.setProjectNamingPolicyId( projectTagNamingPolicyId ); config.setScmDevelopmentCommitComment( scmDevelopmentCommitComment ); config.setScmReleaseCommitComment( scmReleaseCommitComment ); - config.setPinExternals( pinExternals ); + config.setAutoResolveSnapshots( autoResolveSnapshots ); if ( checkModificationExcludeList != null ) {