View Javadoc
1   package org.apache.maven.plugin.cxx;
2   
3   /*
4    * Copyright (C) 2011-2016, Neticoa SAS France - Tous droits réservés.
5    * Author(s) : Franck Bonin, Neticoa SAS France
6    *
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   *
19   */
20   
21  import org.apache.maven.plugins.annotations.Parameter;
22  import org.apache.maven.plugins.annotations.Component;
23  import java.io.File;
24  import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
25  import org.apache.maven.shared.release.env.ReleaseEnvironment;
26  import org.apache.maven.plugin.cxx.utils.release.CxxReleaseDescriptor;
27  import org.apache.maven.plugin.cxx.utils.release.CxxReleaseManager;
28  
29   /**
30   * Branch a project in SCM
31   *
32   * @author 
33   * @version 
34   * @since 0.0.6
35   */
36  public abstract class AbstractPerformBranchReleaseMojo
37      extends AbstractCxxMojo
38  {
39      /**
40       * The {@code M2_HOME} parameter to use for forked Maven invocations.
41       *
42       * @since 0.0.6
43       */
44      @Parameter( defaultValue = "${maven.home}" )
45      protected File mavenHome;
46  
47      /**
48       * The {@code JAVA_HOME} parameter to use for forked Maven invocations.
49       *
50       * @since 0.0.6
51       */
52      @Parameter( defaultValue = "${java.home}" )
53      protected File javaHome;
54  
55      /**
56       * The command-line local repository directory in use for this build (if specified).
57       *
58       * @since 0.0.6
59       */
60      @Parameter ( defaultValue = "${maven.repo.local}" )
61      protected File localRepoDirectory;
62      
63      /**********************************************************************************************/
64      /**********************************************************************************************/
65      /**********************************************************************************************/ 
66    
67      /**
68       * The user name (used by svn).
69       * 
70       * You may use maven setting to store username. 
71       * See http://maven.apache.org/guides/mini/guide-encryption.html
72       *
73       * @since 0.0.6
74       */
75      @Parameter( property = "username" )
76      protected String username = null;
77  
78      /**
79       * The user password (used by svn).
80       * 
81       * You may use maven setting to store encrypted password. 
82       * See http://maven.apache.org/guides/mini/guide-encryption.html
83       *
84       * @since 0.0.6
85       */
86      @Parameter( property = "password" )
87      private String password = null;
88      
89      /**
90       * The server id to use in maven settings to retrieve credential.
91       * Optionnal, by defaut each scm url "hostname[:port]" is taken as server id to search potential
92       * credentials in maven settings
93       * 
94       * See http://maven.apache.org/guides/mini/guide-encryption.html
95       *
96       * @since 0.0.6
97       */
98      @Parameter( property = "settingsServerId" )
99      protected String settingsServerId = null;
100     
101     /**********************************************************************************************/
102     /**********************************************************************************************/
103     /**********************************************************************************************/
104     
105     /**
106      * Dry run: don't checkin or tag anything in the scm repository, or modify the checkout.
107      * Running <code>mvn -DdryRun=true cxx:branch</code> is useful in order to check that modifications to
108      * poms and scm operations (only listed on the console) are working as expected.
109      * Modified POMs are written alongside the originals without modifying them.
110      *
111      * @since 0.0.6
112      */
113     @Parameter( defaultValue = "false", property = "dryRun" )
114     protected boolean dryRun;
115      
116     /**********************************************************************************************/
117     /**********************************************************************************************/
118     /**********************************************************************************************/
119        
120     /**
121      * Specify the new version for the working copy.
122      * This parameter is only meaningful if {@link #updateWorkingCopyVersions} = {@code true}.
123      *
124      * @since 0.0.6
125      */
126     @Parameter( property = "developmentVersion" )
127     private String developmentVersion;
128     
129     /**
130      * Shall developpment version use -SNAPSHOT suffix
131      */
132     @Parameter( defaultValue = "false", property = "snapshotDevelopmentVersion" )
133     protected boolean snapshotDevelopmentVersion = false;
134     
135     /**
136      * new artifact id, if provided
137      */
138     @Parameter( property = "artifactId" )
139     protected String artifactId = null;
140        
141    /**
142      * Whether to automatically assign submodules the parent (main) version. 
143      * If set to true, each submodule (if any) will be update to computed main version
144      * If set to false :
145      *   - the user will be prompted for each submodules version 
146      *     if settings.isInteractiveMode()/-B,--batch-mode flag not set
147      *   - auto-computed if !settings.isInteractiveMode()/-B,--batch-mode flag set
148      * !!PLUS!! :
149      * Submodule version are updated only if they are "real" child of main module, according to SCM tree.
150      * Aka. Only and only if :
151      *   - submodule dir is under scm configuration
152      *   - submodule dir is not an external dir
153      *   - (futur ?) submodule dir is an external dir AND settings.isInteractiveMode()/-B,--batch-mode flag not set
154      *      AND user confirm branch and version update
155      *    
156      * @since 0.0.6
157      */
158     @Parameter( defaultValue = "false", property = "autoVersionSubmodules" )
159     protected boolean autoVersionSubmodules;
160     
161     /**
162      * Whether to update dependencies version to the next development version.
163      *
164      * @since 0.0.6
165      */
166     @Parameter( defaultValue = "true", property = "updateDependencies" )
167     protected boolean updateDependencies;
168 
169 
170     /**********************************************************************************************/
171     /**********************************************************************************************/
172     /**********************************************************************************************/
173     
174     /**
175      * Whether to add a XML schema to the POM if it was previously missing on.
176      *
177      * @since 0.0.6
178      */
179     @Parameter( defaultValue = "true", property = "addSchema" )
180     protected boolean addSchema;
181     
182     /**
183      * The checkout directory.
184      */
185     @Parameter( defaultValue = "${project.build.directory}/checkout", property = "workingDirectory", required = true )
186     protected File workingDirectory;
187     
188     /**
189      *  phases manager.
190      */  
191     @Component
192     protected CxxReleaseManager releaseManager;
193     
194     /**
195      * Gets the enviroment settings configured for this release.
196      *
197      * @return The release environment, never <code>null</code>.
198      */
199     protected ReleaseEnvironment getReleaseEnvironment()
200     {
201         return new DefaultReleaseEnvironment().setSettings( settings )
202                                               .setJavaHome( javaHome )
203                                               .setMavenHome( mavenHome )
204                                               .setLocalRepositoryDirectory( localRepoDirectory )
205                                               ; //.setMavenExecutorId( mavenExecutorId );
206     }
207     
208     /**
209      * Creates the release descriptor from the various goal parameters.
210      *
211      * @return The release descriptor, never <code>null</code>.
212      */
213     protected CxxReleaseDescriptor createReleaseDescriptor()
214     {
215         // Our release descriptor doesn't think, it carries our data, in their inital form
216         CxxReleaseDescriptor descriptor = new CxxReleaseDescriptor();
217         
218         // -B,--batch-mode flag set weather Maven Run in non-interactive (batch) mode
219         descriptor.setInteractive( settings.isInteractiveMode() ); 
220         descriptor.setWorkingDirectory( basedir.getAbsolutePath() );
221         descriptor.setDryRun( dryRun );
222         descriptor.setScmPassword( password );
223         descriptor.setScmUsername( username );
224         descriptor.setScmId( settingsServerId );
225         descriptor.setArtifactId( artifactId );
226         descriptor.setAutoVersionSubmodules( autoVersionSubmodules );
227         descriptor.setUpdateDependencies( updateDependencies );
228         descriptor.setAddSchema( addSchema );
229         descriptor.setCheckoutDirectory( workingDirectory.getAbsolutePath() );
230         descriptor.setDefaultDevelopmentVersion( developmentVersion ); // version to fallback after tag or branch
231         descriptor.setSnapshotDevelopmentVersion( snapshotDevelopmentVersion ); // developmentVersion shall be a SnapShot version
232         //descriptor.setProjectVersionPolicyId( projectVersionPolicyId ); // TODO ?
233 
234 /*        descriptor.setPomFileName( pomFileName );
235 
236         List<String> profileIds = getActiveProfileIds();
237         String additionalProfiles = getAdditionalProfiles();
238 
239         String args = this.arguments;
240         if ( !profileIds.isEmpty() || StringUtils.isNotBlank( additionalProfiles ) )
241         {
242             if ( !StringUtils.isEmpty( args ) )
243             {
244                 args += " -P ";
245             }
246             else
247             {
248                 args = "-P ";
249             }
250 
251             for ( Iterator<String> it = profileIds.iterator(); it.hasNext(); )
252             {
253                 args += it.next();
254                 if ( it.hasNext() )
255                 {
256                     args += ",";
257                 }
258             }
259             
260             if ( additionalProfiles != null )
261             {
262                 if ( !profileIds.isEmpty() )
263                 {
264                     args += ",";
265                 }
266                 args += additionalProfiles;
267             }
268         }
269         descriptor.setAdditionalArguments( args );
270 */
271         return descriptor;
272     }
273 }