View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.shared.release.phase;
20  
21  import javax.inject.Inject;
22  import javax.inject.Named;
23  import javax.inject.Singleton;
24  
25  import java.util.Map;
26  
27  import org.apache.maven.model.Model;
28  import org.apache.maven.model.Scm;
29  import org.apache.maven.project.MavenProject;
30  import org.apache.maven.scm.repository.ScmRepository;
31  import org.apache.maven.shared.release.ReleaseResult;
32  import org.apache.maven.shared.release.config.ReleaseDescriptor;
33  import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
34  import org.apache.maven.shared.release.scm.ScmTranslator;
35  import org.apache.maven.shared.release.transform.ModelETLFactory;
36  
37  /**
38   * Rewrite POMs for future development
39   *
40   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
41   */
42  @Singleton
43  @Named("rewrite-poms-for-development")
44  public class RewritePomsForDevelopmentPhase extends AbstractRewritePomsPhase {
45      @Inject
46      public RewritePomsForDevelopmentPhase(
47              ScmRepositoryConfigurator scmRepositoryConfigurator,
48              Map<String, ModelETLFactory> modelETLFactories,
49              Map<String, ScmTranslator> scmTranslators) {
50          super(scmRepositoryConfigurator, modelETLFactories, scmTranslators);
51      }
52  
53      @Override
54      protected final String getPomSuffix() {
55          return "next";
56      }
57  
58      @Override
59      protected void transformScm(
60              MavenProject project,
61              Model modelTarget,
62              ReleaseDescriptor releaseDescriptor,
63              String projectId,
64              ScmRepository scmRepository,
65              ReleaseResult result) {
66          // If SCM is null in original model, it is inherited, no mods needed
67          if (project.getScm() != null) {
68              Scm scmRoot = modelTarget.getScm();
69              if (scmRoot != null) {
70                  ScmTranslator translator = getScmTranslators().get(scmRepository.getProvider());
71                  if (translator != null) {
72                      Scm scm = releaseDescriptor.getOriginalScmInfo(projectId);
73  
74                      if (scm != null) {
75                          scmRoot.setConnection(scm.getConnection());
76                          scmRoot.setDeveloperConnection(scm.getDeveloperConnection());
77                          scmRoot.setUrl(scm.getUrl());
78                          String tag = translator.resolveTag(scm.getTag());
79                          // reuse unresolved tag from original in case ScmTranslator does not support tags
80                          if (tag == null) {
81                              tag = scm.getTag();
82                              // never give out default value as there is no way to distinguish it from an the
83                              // explicitly set tag with the same value
84                              if ("HEAD".equals(tag)) {
85                                  tag = null;
86                              }
87                          }
88                          scmRoot.setTag(tag);
89                      } else {
90                          // cleanly remove the SCM element
91                          modelTarget.setScm(null);
92                      }
93                  } else {
94                      String message = "No SCM translator found - skipping rewrite";
95                      result.appendDebug(message);
96                      getLogger().debug(message);
97                  }
98              }
99          }
100     }
101 
102     @Override
103     protected String getOriginalVersion(ReleaseDescriptor releaseDescriptor, String projectKey, boolean simulate) {
104         return simulate
105                 ? releaseDescriptor.getProjectOriginalVersion(projectKey)
106                 : releaseDescriptor.getProjectReleaseVersion(projectKey);
107     }
108 
109     @Override
110     protected String getNextVersion(ReleaseDescriptor releaseDescriptor, String key) {
111         return releaseDescriptor.getProjectDevelopmentVersion(key);
112     }
113 
114     @Override
115     protected String getResolvedSnapshotVersion(String artifactVersionlessKey, ReleaseDescriptor releaseDescriptor) {
116         return releaseDescriptor.getDependencyDevelopmentVersion(artifactVersionlessKey);
117     }
118 }