View Javadoc
1   package org.apache.maven.scm.provider.svn.svnexe;
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 java.io.File;
23  
24  import org.apache.maven.scm.CommandParameters;
25  import org.apache.maven.scm.ScmException;
26  import org.apache.maven.scm.ScmFileSet;
27  import org.apache.maven.scm.command.info.InfoScmResult;
28  import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
29  import org.apache.maven.scm.provider.ScmProviderRepository;
30  import org.apache.maven.scm.provider.svn.AbstractSvnScmProvider;
31  import org.apache.maven.scm.provider.svn.command.SvnCommand;
32  import org.apache.maven.scm.provider.svn.svnexe.command.add.SvnAddCommand;
33  import org.apache.maven.scm.provider.svn.svnexe.command.blame.SvnBlameCommand;
34  import org.apache.maven.scm.provider.svn.svnexe.command.branch.SvnBranchCommand;
35  import org.apache.maven.scm.provider.svn.svnexe.command.changelog.SvnChangeLogCommand;
36  import org.apache.maven.scm.provider.svn.svnexe.command.checkin.SvnCheckInCommand;
37  import org.apache.maven.scm.provider.svn.svnexe.command.checkout.SvnCheckOutCommand;
38  import org.apache.maven.scm.provider.svn.svnexe.command.diff.SvnDiffCommand;
39  import org.apache.maven.scm.provider.svn.svnexe.command.export.SvnExeExportCommand;
40  import org.apache.maven.scm.provider.svn.svnexe.command.info.SvnInfoCommand;
41  import org.apache.maven.scm.provider.svn.svnexe.command.list.SvnListCommand;
42  import org.apache.maven.scm.provider.svn.svnexe.command.mkdir.SvnMkdirCommand;
43  import org.apache.maven.scm.provider.svn.svnexe.command.remoteinfo.SvnRemoteInfoCommand;
44  import org.apache.maven.scm.provider.svn.svnexe.command.remove.SvnRemoveCommand;
45  import org.apache.maven.scm.provider.svn.svnexe.command.status.SvnStatusCommand;
46  import org.apache.maven.scm.provider.svn.svnexe.command.tag.SvnTagCommand;
47  import org.apache.maven.scm.provider.svn.svnexe.command.update.SvnUpdateCommand;
48  import org.apache.maven.scm.repository.ScmRepositoryException;
49  
50  /**
51   * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
52   *
53   * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="svn"
54   */
55  public class SvnExeScmProvider
56      extends AbstractSvnScmProvider
57  {
58      /**
59       * {@inheritDoc}
60       */
61      protected SvnCommand getAddCommand()
62      {
63          return new SvnAddCommand();
64      }
65  
66      /**
67       * {@inheritDoc}
68       */
69      protected SvnCommand getBranchCommand()
70      {
71          return new SvnBranchCommand();
72      }
73  
74      /**
75       * {@inheritDoc}
76       */
77      protected SvnCommand getChangeLogCommand()
78      {
79          return new SvnChangeLogCommand();
80      }
81  
82      /**
83       * {@inheritDoc}
84       */
85      protected SvnCommand getCheckInCommand()
86      {
87          return new SvnCheckInCommand();
88      }
89  
90      /**
91       * {@inheritDoc}
92       */
93      protected SvnCommand getCheckOutCommand()
94      {
95          return new SvnCheckOutCommand();
96      }
97  
98      /**
99       * {@inheritDoc}
100      */
101     protected SvnCommand getDiffCommand()
102     {
103         return new SvnDiffCommand();
104     }
105 
106     /**
107      * {@inheritDoc}
108      */
109     protected SvnCommand getExportCommand()
110     {
111         return new SvnExeExportCommand();
112     }
113 
114     /**
115      * {@inheritDoc}
116      */
117     protected SvnCommand getRemoveCommand()
118     {
119         return new SvnRemoveCommand();
120     }
121 
122     /**
123      * {@inheritDoc}
124      */
125     protected SvnCommand getStatusCommand()
126     {
127         return new SvnStatusCommand();
128     }
129 
130     /**
131      * {@inheritDoc}
132      */
133     protected SvnCommand getTagCommand()
134     {
135         return new SvnTagCommand();
136     }
137 
138     /**
139      * {@inheritDoc}
140      */
141     protected SvnCommand getUpdateCommand()
142     {
143         return new SvnUpdateCommand();
144     }
145 
146     /**
147      * {@inheritDoc}
148      */
149     protected SvnCommand getListCommand()
150     {
151         return new SvnListCommand();
152     }
153 
154     public SvnCommand getInfoCommand()
155     {
156         return new SvnInfoCommand();
157     }
158 
159     /**
160      * {@inheritDoc}
161      */
162     protected SvnCommand getBlameCommand()
163     {
164         return new SvnBlameCommand();
165     }
166 
167     /**
168      * {@inheritDoc}
169      */
170     protected SvnCommand getMkdirCommand()
171     {
172         return new SvnMkdirCommand();
173     }
174 
175     /**
176      * {@inheritDoc}
177      */
178     protected String getRepositoryURL( File path )
179         throws ScmException
180     {
181         // Note: I need to supply just 1 absolute path, but ScmFileSet won't let me without
182         // a basedir (which isn't used here anyway), so use a dummy file.
183         SvnInfoCommand infoCmd = (SvnInfoCommand) getInfoCommand();
184         infoCmd.setLogger( this.getLogger() );
185         InfoScmResult result =
186             infoCmd.executeInfoCommand( null, new ScmFileSet( new File( "" ), path ), null, false, null );
187 
188         if ( result.getInfoItems().size() != 1 )
189         {
190             throw new ScmRepositoryException(
191                 "Cannot find URL: " + ( result.getInfoItems().size() == 0 ? "no" : "multiple" )
192                     + " items returned by the info command" );
193         }
194 
195         return result.getInfoItems().get( 0 ).getURL();
196     }
197 
198     @Override
199     public RemoteInfoScmResult remoteInfo( ScmProviderRepository repository, ScmFileSet fileSet,
200                                            CommandParameters parameters )
201         throws ScmException
202     {
203         SvnRemoteInfoCommand svnRemoteInfoCommand = new SvnRemoteInfoCommand();
204         return svnRemoteInfoCommand.executeRemoteInfoCommand( repository, fileSet, parameters );
205     }
206 
207     @Override
208     public boolean remoteUrlExist( ScmProviderRepository repository, CommandParameters parameters )
209         throws ScmException
210     {
211         SvnRemoteInfoCommand svnRemoteInfoCommand = new SvnRemoteInfoCommand();
212         return svnRemoteInfoCommand.remoteUrlExist( repository, parameters );
213     }
214 }