Coverage Report - org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultScmRepositoryConfigurator
86%
51/59
71%
27/38
5,2
 
 1  
 package org.apache.maven.shared.release.scm;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  *   http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import org.apache.maven.scm.manager.NoSuchScmProviderException;
 23  
 import org.apache.maven.scm.manager.ScmManager;
 24  
 import org.apache.maven.scm.provider.ScmProvider;
 25  
 import org.apache.maven.scm.provider.ScmProviderRepository;
 26  
 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
 27  
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
 28  
 import org.apache.maven.scm.repository.ScmRepository;
 29  
 import org.apache.maven.scm.repository.ScmRepositoryException;
 30  
 import org.apache.maven.settings.Server;
 31  
 import org.apache.maven.settings.Settings;
 32  
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 33  
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 34  
 import org.codehaus.plexus.util.StringUtils;
 35  
 import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
 36  
 import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
 37  
 
 38  
 /**
 39  
  * Tool that gets a configured SCM repository from release configuration.
 40  
  *
 41  
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
 42  
  * @plexus.component role="org.apache.maven.shared.release.scm.ScmRepositoryConfigurator"
 43  
  */
 44  528
 public class DefaultScmRepositoryConfigurator
 45  
     extends AbstractLogEnabled
 46  
     implements ScmRepositoryConfigurator
 47  
 {
 48  
     /**
 49  
      * The SCM manager.
 50  
      *
 51  
      * @plexus.requirement
 52  
      */
 53  
     private ScmManager scmManager;
 54  
 
 55  
     /**
 56  
      * When this plugin requires Maven 3.0 as minimum, this component can be removed and o.a.m.s.c.SettingsDecrypter be
 57  
      * used instead.
 58  
      * 
 59  
      * @plexus.requirement role-hint="mng-4384"
 60  
      */
 61  
     private SecDispatcher secDispatcher;
 62  
 
 63  
     public ScmRepository getConfiguredRepository( ReleaseDescriptor releaseDescriptor, Settings settings )
 64  
         throws ScmRepositoryException, NoSuchScmProviderException
 65  
     {
 66  794
         String url = releaseDescriptor.getScmSourceUrl();
 67  794
         return getConfiguredRepository( url, releaseDescriptor, settings );
 68  
     }
 69  
 
 70  
     public ScmRepository getConfiguredRepository( String url, ReleaseDescriptor releaseDescriptor, Settings settings )
 71  
         throws ScmRepositoryException, NoSuchScmProviderException
 72  
     {
 73  810
         String username = releaseDescriptor.getScmUsername();
 74  810
         String password = releaseDescriptor.getScmPassword();
 75  810
         String privateKey = releaseDescriptor.getScmPrivateKey();
 76  810
         String passphrase = releaseDescriptor.getScmPrivateKeyPassPhrase();
 77  
 
 78  810
         ScmRepository repository = scmManager.makeScmRepository( url );
 79  
 
 80  768
         ScmProviderRepository scmRepo = repository.getProviderRepository();
 81  
 
 82  
         //MRELEASE-76
 83  768
         scmRepo.setPersistCheckout( false );
 84  
 
 85  768
         if ( settings != null )
 86  
         {
 87  4
             Server server = null;
 88  
 
 89  4
             if ( releaseDescriptor.getScmId() != null )
 90  
             {
 91  0
                 server = settings.getServer( releaseDescriptor.getScmId() );
 92  
             }
 93  
 
 94  4
             if ( server == null && repository.getProviderRepository() instanceof ScmProviderRepositoryWithHost )
 95  
             {
 96  4
                 ScmProviderRepositoryWithHost repositoryWithHost =
 97  
                     (ScmProviderRepositoryWithHost) repository.getProviderRepository();
 98  4
                 String host = repositoryWithHost.getHost();
 99  
 
 100  4
                 int port = repositoryWithHost.getPort();
 101  
 
 102  4
                 if ( port > 0 )
 103  
                 {
 104  2
                     host += ":" + port;
 105  
                 }
 106  
 
 107  
                 // TODO: this is a bit dodgy - id is not host, but since we don't have a <host> field we make an assumption
 108  4
                 server = settings.getServer( host );
 109  
             }
 110  
 
 111  4
             if ( server != null )
 112  
             {
 113  4
                 if ( username == null )
 114  
                 {
 115  4
                     username = server.getUsername();
 116  
                 }
 117  
 
 118  4
                 if ( password == null )
 119  
                 {
 120  4
                     password = decrypt( server.getPassword(), server.getId() );
 121  
                 }
 122  
 
 123  4
                 if ( privateKey == null )
 124  
                 {
 125  4
                     privateKey = server.getPrivateKey();
 126  
                 }
 127  
 
 128  4
                 if ( passphrase == null )
 129  
                 {
 130  4
                     passphrase = decrypt( server.getPassphrase(), server.getId() );
 131  
                 }
 132  
             }
 133  
         }
 134  
 
 135  768
         if ( !StringUtils.isEmpty( username ) )
 136  
         {
 137  6
             scmRepo.setUser( username );
 138  
         }
 139  768
         if ( !StringUtils.isEmpty( password ) )
 140  
         {
 141  6
             scmRepo.setPassword( password );
 142  
         }
 143  
 
 144  768
         if ( scmRepo instanceof ScmProviderRepositoryWithHost )
 145  
         {
 146  590
             ScmProviderRepositoryWithHost repositoryWithHost = (ScmProviderRepositoryWithHost) scmRepo;
 147  590
             if ( !StringUtils.isEmpty( privateKey ) )
 148  
             {
 149  2
                 repositoryWithHost.setPrivateKey( privateKey );
 150  
             }
 151  
 
 152  590
             if ( !StringUtils.isEmpty( passphrase ) )
 153  
             {
 154  4
                 repositoryWithHost.setPassphrase( passphrase );
 155  
             }
 156  
         }
 157  
 
 158  768
         if ( "svn".equals( repository.getProvider() ) )
 159  
         {
 160  570
             SvnScmProviderRepository svnRepo = (SvnScmProviderRepository) repository.getProviderRepository();
 161  
 
 162  570
             String tagBase = releaseDescriptor.getScmTagBase();
 163  570
             if ( !StringUtils.isEmpty( tagBase ) )
 164  
             {
 165  8
                 svnRepo.setTagBase( tagBase );
 166  
             }
 167  
 
 168  570
             String branchBase = releaseDescriptor.getScmBranchBase();
 169  570
             if ( !StringUtils.isEmpty( branchBase ) )
 170  
             {
 171  0
                 svnRepo.setBranchBase( branchBase );
 172  
             }
 173  
         }
 174  
 
 175  768
         return repository;
 176  
     }
 177  
 
 178  
     private String decrypt( String str, String server )
 179  
     {
 180  
         try
 181  
         {
 182  8
             return secDispatcher.decrypt( str );
 183  
         }
 184  0
         catch ( SecDispatcherException e )
 185  
         {
 186  0
             String msg =
 187  
                 "Failed to decrypt password/passphrase for server " + server + ", using auth token as is: "
 188  
                     + e.getMessage();
 189  0
             if ( getLogger().isDebugEnabled() )
 190  
             {
 191  0
                 getLogger().warn( msg, e );
 192  
             }
 193  
             else
 194  
             {
 195  0
                 getLogger().warn( msg );
 196  
             }
 197  0
             return str;
 198  
         }
 199  
     }
 200  
 
 201  
     public ScmProvider getRepositoryProvider( ScmRepository repository )
 202  
         throws NoSuchScmProviderException
 203  
     {
 204  716
         return scmManager.getProviderByRepository( repository );
 205  
     }
 206  
 
 207  
     public void setScmManager( ScmManager scmManager )
 208  
     {
 209  42
         this.scmManager = scmManager;
 210  42
     }
 211  
 }