1 | |
package org.apache.maven.shared.release.config; |
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
|
20 | |
|
21 | |
|
22 | |
import java.util.HashMap; |
23 | |
import java.util.Iterator; |
24 | |
import java.util.Map; |
25 | |
import java.util.Map.Entry; |
26 | |
import java.util.Properties; |
27 | |
import java.util.Set; |
28 | |
|
29 | |
import org.apache.maven.shared.release.scm.IdentifiedScm; |
30 | |
|
31 | |
|
32 | |
|
33 | |
|
34 | |
|
35 | |
|
36 | |
public class ReleaseUtils |
37 | |
{ |
38 | |
private ReleaseUtils() |
39 | 0 | { |
40 | |
|
41 | 0 | } |
42 | |
|
43 | |
|
44 | |
|
45 | |
|
46 | |
|
47 | |
|
48 | |
|
49 | |
|
50 | |
|
51 | |
|
52 | |
public static ReleaseDescriptor merge( ReleaseDescriptor mergeInto, ReleaseDescriptor toBeMerged ) |
53 | |
{ |
54 | |
|
55 | 66 | mergeInto.setScmId( mergeOverride( mergeInto.getScmId(), toBeMerged.getScmId() ) ); |
56 | 66 | mergeInto.setScmSourceUrl( mergeOverride( mergeInto.getScmSourceUrl(), toBeMerged.getScmSourceUrl() ) ); |
57 | 66 | mergeInto.setScmCommentPrefix( |
58 | |
mergeOverride( mergeInto.getScmCommentPrefix(), toBeMerged.getScmCommentPrefix() ) ); |
59 | 66 | mergeInto.setScmReleaseLabel( mergeOverride( mergeInto.getScmReleaseLabel(), toBeMerged.getScmReleaseLabel() ) ); |
60 | 66 | mergeInto.setScmTagBase( mergeOverride( mergeInto.getScmTagBase(), toBeMerged.getScmTagBase() ) ); |
61 | 66 | mergeInto.setScmTagNameFormat( |
62 | |
mergeOverride( mergeInto.getScmTagNameFormat(), toBeMerged.getScmTagNameFormat() ) ); |
63 | 66 | mergeInto.setScmBranchBase( mergeOverride( mergeInto.getScmBranchBase(), toBeMerged.getScmBranchBase() ) ); |
64 | 66 | mergeInto.setScmUsername( mergeOverride( mergeInto.getScmUsername(), toBeMerged.getScmUsername() ) ); |
65 | 66 | mergeInto.setScmPassword( mergeOverride( mergeInto.getScmPassword(), toBeMerged.getScmPassword() ) ); |
66 | 66 | mergeInto.setScmPrivateKey( mergeOverride( mergeInto.getScmPrivateKey(), toBeMerged.getScmPrivateKey() ) ); |
67 | 66 | mergeInto.setScmPrivateKeyPassPhrase( |
68 | |
mergeOverride( mergeInto.getScmPrivateKeyPassPhrase(), toBeMerged.getScmPrivateKeyPassPhrase() ) ); |
69 | 66 | mergeInto.setScmCommentPrefix( |
70 | |
mergeOverride( mergeInto.getScmCommentPrefix(), toBeMerged.getScmCommentPrefix() ) ); |
71 | 66 | mergeInto.setAdditionalArguments( |
72 | |
mergeOverride( mergeInto.getAdditionalArguments(), toBeMerged.getAdditionalArguments() ) ); |
73 | 66 | mergeInto.setPreparationGoals( |
74 | |
mergeOverride( mergeInto.getPreparationGoals(), toBeMerged.getPreparationGoals() ) ); |
75 | 66 | mergeInto.setCompletionGoals( |
76 | |
mergeOverride( mergeInto.getCompletionGoals(), toBeMerged.getCompletionGoals() ) ); |
77 | 66 | mergeInto.setPerformGoals( mergeOverride( mergeInto.getPerformGoals(), toBeMerged.getPerformGoals() ) ); |
78 | 66 | mergeInto.setPomFileName( mergeOverride( mergeInto.getPomFileName(), toBeMerged.getPomFileName() ) ); |
79 | 66 | mergeInto.setCheckModificationExcludes( toBeMerged.getCheckModificationExcludes() ); |
80 | 66 | mergeInto.setScmUseEditMode( toBeMerged.isScmUseEditMode() ); |
81 | 66 | mergeInto.setAddSchema( toBeMerged.isAddSchema() ); |
82 | 66 | mergeInto.setGenerateReleasePoms( toBeMerged.isGenerateReleasePoms() ); |
83 | 66 | mergeInto.setInteractive( toBeMerged.isInteractive() ); |
84 | 66 | mergeInto.setUpdateDependencies( toBeMerged.isUpdateDependencies() ); |
85 | 66 | mergeInto.setCommitByProject( mergeOverride( mergeInto.isCommitByProject(), toBeMerged.isCommitByProject(), |
86 | |
false ) ); |
87 | 66 | mergeInto.setUseReleaseProfile( toBeMerged.isUseReleaseProfile() ); |
88 | 66 | mergeInto.setBranchCreation( toBeMerged.isBranchCreation() ); |
89 | 66 | mergeInto.setUpdateBranchVersions( toBeMerged.isUpdateBranchVersions() ); |
90 | 66 | mergeInto.setUpdateWorkingCopyVersions( toBeMerged.isUpdateWorkingCopyVersions() ); |
91 | 66 | mergeInto.setSuppressCommitBeforeTagOrBranch( toBeMerged.isSuppressCommitBeforeTagOrBranch() ); |
92 | 66 | mergeInto.setUpdateVersionsToSnapshot( toBeMerged.isUpdateVersionsToSnapshot() ); |
93 | 66 | mergeInto.setAllowTimestampedSnapshots( toBeMerged.isAllowTimestampedSnapshots() ); |
94 | 66 | mergeInto.setSnapshotReleasePluginAllowed( toBeMerged.isSnapshotReleasePluginAllowed() ); |
95 | 66 | mergeInto.setAutoVersionSubmodules( toBeMerged.isAutoVersionSubmodules() ); |
96 | 66 | mergeInto.setDefaultReleaseVersion( mergeOverride( mergeInto.getDefaultReleaseVersion(), |
97 | |
toBeMerged.getDefaultReleaseVersion() ) ); |
98 | 66 | mergeInto.setDefaultDevelopmentVersion( mergeOverride( mergeInto.getDefaultDevelopmentVersion(), |
99 | |
toBeMerged.getDefaultDevelopmentVersion() ) ); |
100 | 66 | mergeInto.setRemoteTagging( toBeMerged.isRemoteTagging() ); |
101 | 66 | mergeInto.setLocalCheckout( toBeMerged.isLocalCheckout() ); |
102 | 66 | mergeInto.setPushChanges( toBeMerged.isPushChanges() ); |
103 | 66 | mergeInto.setWaitBeforeTagging( toBeMerged.getWaitBeforeTagging() ); |
104 | |
|
105 | |
|
106 | 66 | if ( toBeMerged.getReleaseVersions() != null ) |
107 | |
{ |
108 | 66 | mergeInto.getReleaseVersions().putAll( toBeMerged.getReleaseVersions() ); |
109 | |
} |
110 | 66 | if ( toBeMerged.getDevelopmentVersions() != null ) |
111 | |
{ |
112 | 66 | mergeInto.getDevelopmentVersions().putAll( toBeMerged.getDevelopmentVersions() ); |
113 | |
} |
114 | |
|
115 | 66 | mergeInto.setWorkingDirectory( |
116 | |
mergeOverride( mergeInto.getWorkingDirectory(), toBeMerged.getWorkingDirectory() ) ); |
117 | 66 | mergeInto.setCheckoutDirectory( |
118 | |
mergeOverride( mergeInto.getCheckoutDirectory(), toBeMerged.getCheckoutDirectory() ) ); |
119 | |
|
120 | |
|
121 | 66 | mergeInto.setCompletedPhase( mergeDefault( mergeInto.getCompletedPhase(), toBeMerged.getCompletedPhase() ) ); |
122 | |
|
123 | 66 | return mergeInto; |
124 | |
} |
125 | |
|
126 | |
private static String mergeOverride( String thisValue, String mergeValue ) |
127 | |
{ |
128 | 1386 | return mergeValue != null ? mergeValue : thisValue; |
129 | |
} |
130 | |
|
131 | |
private static String mergeDefault( String thisValue, String mergeValue ) |
132 | |
{ |
133 | 66 | return thisValue != null ? thisValue : mergeValue; |
134 | |
} |
135 | |
|
136 | |
private static boolean mergeOverride( boolean thisValue, boolean mergeValue, boolean defaultValue ) |
137 | |
{ |
138 | 66 | return mergeValue != defaultValue ? mergeValue : thisValue; |
139 | |
} |
140 | |
|
141 | |
public static ReleaseDescriptor copyPropertiesToReleaseDescriptor( Properties properties ) |
142 | |
{ |
143 | 24 | ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); |
144 | 24 | releaseDescriptor.setCompletedPhase( properties.getProperty( "completedPhase" ) ); |
145 | 24 | releaseDescriptor.setCommitByProject( Boolean.parseBoolean( properties.getProperty( "commitByProject" ) ) ); |
146 | 24 | releaseDescriptor.setScmId( properties.getProperty( "scm.id" ) ); |
147 | 24 | releaseDescriptor.setScmSourceUrl( properties.getProperty( "scm.url" ) ); |
148 | 24 | releaseDescriptor.setScmUsername( properties.getProperty( "scm.username" ) ); |
149 | 24 | releaseDescriptor.setScmPassword( properties.getProperty( "scm.password" ) ); |
150 | 24 | releaseDescriptor.setScmPrivateKey( properties.getProperty( "scm.privateKey" ) ); |
151 | 24 | releaseDescriptor.setScmPrivateKeyPassPhrase( properties.getProperty( "scm.passphrase" ) ); |
152 | 24 | releaseDescriptor.setScmTagBase( properties.getProperty( "scm.tagBase" ) ); |
153 | 24 | releaseDescriptor.setScmTagNameFormat( properties.getProperty( "scm.tagNameFormat" ) ); |
154 | 24 | releaseDescriptor.setScmBranchBase( properties.getProperty( "scm.branchBase" ) ); |
155 | 24 | releaseDescriptor.setScmReleaseLabel( properties.getProperty( "scm.tag" ) ); |
156 | 24 | releaseDescriptor.setScmCommentPrefix( properties.getProperty( "scm.commentPrefix" ) ); |
157 | 24 | releaseDescriptor.setAdditionalArguments( properties.getProperty( "exec.additionalArguments" ) ); |
158 | 24 | releaseDescriptor.setPomFileName( properties.getProperty( "exec.pomFileName" ) ); |
159 | 24 | releaseDescriptor.setPreparationGoals( properties.getProperty( "preparationGoals" ) ); |
160 | 24 | releaseDescriptor.setCompletionGoals( properties.getProperty( "completionGoals" ) ); |
161 | 24 | String snapshotReleasePluginAllowedStr = properties.getProperty( "exec.snapshotReleasePluginAllowed" ); |
162 | 24 | releaseDescriptor.setSnapshotReleasePluginAllowed( snapshotReleasePluginAllowedStr == null |
163 | |
? false |
164 | |
: Boolean.valueOf( |
165 | |
snapshotReleasePluginAllowedStr ).booleanValue() ); |
166 | 24 | String remoteTaggingStr = properties.getProperty( "remoteTagging" ); |
167 | 24 | releaseDescriptor.setRemoteTagging( |
168 | |
remoteTaggingStr == null ? false : Boolean.valueOf( remoteTaggingStr ).booleanValue() ); |
169 | 24 | String pushChanges = properties.getProperty( "pushChanges" ); |
170 | 24 | releaseDescriptor.setPushChanges( pushChanges == null ? true : Boolean.valueOf( pushChanges ).booleanValue() ); |
171 | |
|
172 | 24 | loadResolvedDependencies( properties, releaseDescriptor ); |
173 | |
|
174 | |
|
175 | |
|
176 | 24 | for ( Iterator<?> i = properties.keySet().iterator(); i.hasNext(); ) |
177 | |
{ |
178 | 340 | String property = (String) i.next(); |
179 | 340 | if ( property.startsWith( "project.rel." ) ) |
180 | |
{ |
181 | 18 | releaseDescriptor.mapReleaseVersion( property.substring( "project.rel.".length() ), |
182 | |
properties.getProperty( property ) ); |
183 | |
} |
184 | 322 | else if ( property.startsWith( "project.dev." ) ) |
185 | |
{ |
186 | 18 | releaseDescriptor.mapDevelopmentVersion( property.substring( "project.dev.".length() ), |
187 | |
properties.getProperty( property ) ); |
188 | |
} |
189 | 304 | else if ( property.startsWith( "project.scm." ) ) |
190 | |
{ |
191 | 82 | int index = property.lastIndexOf( '.' ); |
192 | 82 | if ( index > "project.scm.".length() ) |
193 | |
{ |
194 | 82 | String key = property.substring( "project.scm.".length(), index ); |
195 | |
|
196 | 82 | if ( !releaseDescriptor.getOriginalScmInfo().containsKey( key ) ) |
197 | |
{ |
198 | 24 | if ( properties.getProperty( "project.scm." + key + ".empty" ) != null ) |
199 | |
{ |
200 | 2 | releaseDescriptor.mapOriginalScmInfo( key, null ); |
201 | |
} |
202 | |
else |
203 | |
{ |
204 | 22 | IdentifiedScm scm = new IdentifiedScm(); |
205 | 22 | scm.setConnection( properties.getProperty( "project.scm." + key + ".connection" ) ); |
206 | 22 | scm.setDeveloperConnection( |
207 | |
properties.getProperty( "project.scm." + key + ".developerConnection" ) ); |
208 | 22 | scm.setUrl( properties.getProperty( "project.scm." + key + ".url" ) ); |
209 | 22 | scm.setTag( properties.getProperty( "project.scm." + key + ".tag" ) ); |
210 | 22 | scm.setId( properties.getProperty( "project.scm." + key + ".id" ) ); |
211 | |
|
212 | 22 | releaseDescriptor.mapOriginalScmInfo( key, scm ); |
213 | |
} |
214 | |
} |
215 | |
} |
216 | |
} |
217 | 340 | } |
218 | 24 | return releaseDescriptor; |
219 | |
} |
220 | |
|
221 | |
private static void loadResolvedDependencies( Properties prop, ReleaseDescriptor descriptor ) |
222 | |
{ |
223 | 24 | Map<String, Map<String, String>> resolvedDependencies = new HashMap<String, Map<String, String>>(); |
224 | |
|
225 | 24 | Set entries = prop.entrySet(); |
226 | 24 | Iterator<Entry<String, String>> iterator = entries.iterator(); |
227 | |
String propertyName; |
228 | |
Entry<String, String> currentEntry; |
229 | |
|
230 | 364 | while ( iterator.hasNext() ) |
231 | |
{ |
232 | 340 | currentEntry = iterator.next(); |
233 | 340 | propertyName = (String) currentEntry.getKey(); |
234 | |
|
235 | 340 | if ( propertyName.startsWith( "dependency." ) ) |
236 | |
{ |
237 | |
Map<String, String> versionMap; |
238 | |
String artifactVersionlessKey; |
239 | |
int startIndex; |
240 | |
int endIndex; |
241 | |
String versionType; |
242 | |
|
243 | 8 | versionMap = new HashMap<String, String>(); |
244 | 8 | startIndex = propertyName.lastIndexOf( "dependency." ); |
245 | |
|
246 | 8 | if ( propertyName.indexOf( ".development" ) != -1 ) |
247 | |
{ |
248 | 4 | endIndex = propertyName.indexOf( ".development" ); |
249 | 4 | versionType = ReleaseDescriptor.DEVELOPMENT_KEY; |
250 | |
} |
251 | |
else |
252 | |
{ |
253 | 4 | endIndex = propertyName.indexOf( ".release" ); |
254 | 4 | versionType = ReleaseDescriptor.RELEASE_KEY; |
255 | |
} |
256 | |
|
257 | 8 | artifactVersionlessKey = propertyName.substring( startIndex, endIndex ); |
258 | |
|
259 | 8 | if ( resolvedDependencies.containsKey( artifactVersionlessKey ) ) |
260 | |
{ |
261 | 4 | versionMap = resolvedDependencies.get( artifactVersionlessKey ); |
262 | |
} |
263 | |
else |
264 | |
{ |
265 | 4 | versionMap = new HashMap<String, String>(); |
266 | 4 | resolvedDependencies.put( artifactVersionlessKey, versionMap ); |
267 | |
} |
268 | |
|
269 | 8 | versionMap.put( versionType, currentEntry.getValue() ); |
270 | 8 | } |
271 | |
} |
272 | |
|
273 | 24 | descriptor.setResolvedSnapshotDependencies( resolvedDependencies ); |
274 | 24 | } |
275 | |
|
276 | |
} |