001package org.apache.maven.scm.provider.svn.svnexe;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.io.File;
023
024import org.apache.maven.scm.CommandParameters;
025import org.apache.maven.scm.ScmException;
026import org.apache.maven.scm.ScmFileSet;
027import org.apache.maven.scm.command.info.InfoScmResult;
028import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
029import org.apache.maven.scm.provider.ScmProviderRepository;
030import org.apache.maven.scm.provider.svn.AbstractSvnScmProvider;
031import org.apache.maven.scm.provider.svn.command.SvnCommand;
032import org.apache.maven.scm.provider.svn.svnexe.command.add.SvnAddCommand;
033import org.apache.maven.scm.provider.svn.svnexe.command.blame.SvnBlameCommand;
034import org.apache.maven.scm.provider.svn.svnexe.command.branch.SvnBranchCommand;
035import org.apache.maven.scm.provider.svn.svnexe.command.changelog.SvnChangeLogCommand;
036import org.apache.maven.scm.provider.svn.svnexe.command.checkin.SvnCheckInCommand;
037import org.apache.maven.scm.provider.svn.svnexe.command.checkout.SvnCheckOutCommand;
038import org.apache.maven.scm.provider.svn.svnexe.command.diff.SvnDiffCommand;
039import org.apache.maven.scm.provider.svn.svnexe.command.export.SvnExeExportCommand;
040import org.apache.maven.scm.provider.svn.svnexe.command.info.SvnInfoCommand;
041import org.apache.maven.scm.provider.svn.svnexe.command.list.SvnListCommand;
042import org.apache.maven.scm.provider.svn.svnexe.command.mkdir.SvnMkdirCommand;
043import org.apache.maven.scm.provider.svn.svnexe.command.remoteinfo.SvnRemoteInfoCommand;
044import org.apache.maven.scm.provider.svn.svnexe.command.remove.SvnRemoveCommand;
045import org.apache.maven.scm.provider.svn.svnexe.command.status.SvnStatusCommand;
046import org.apache.maven.scm.provider.svn.svnexe.command.tag.SvnTagCommand;
047import org.apache.maven.scm.provider.svn.svnexe.command.untag.SvnUntagCommand;
048import org.apache.maven.scm.provider.svn.svnexe.command.update.SvnUpdateCommand;
049import org.apache.maven.scm.repository.ScmRepositoryException;
050
051/**
052 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
053 *
054 * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="svn"
055 */
056public class SvnExeScmProvider
057    extends AbstractSvnScmProvider
058{
059    /**
060     * {@inheritDoc}
061     */
062    protected SvnCommand getAddCommand()
063    {
064        return new SvnAddCommand();
065    }
066
067    /**
068     * {@inheritDoc}
069     */
070    protected SvnCommand getBranchCommand()
071    {
072        return new SvnBranchCommand();
073    }
074
075    /**
076     * {@inheritDoc}
077     */
078    protected SvnCommand getChangeLogCommand()
079    {
080        return new SvnChangeLogCommand();
081    }
082
083    /**
084     * {@inheritDoc}
085     */
086    protected SvnCommand getCheckInCommand()
087    {
088        return new SvnCheckInCommand();
089    }
090
091    /**
092     * {@inheritDoc}
093     */
094    protected SvnCommand getCheckOutCommand()
095    {
096        return new SvnCheckOutCommand();
097    }
098
099    /**
100     * {@inheritDoc}
101     */
102    protected SvnCommand getDiffCommand()
103    {
104        return new SvnDiffCommand();
105    }
106
107    /**
108     * {@inheritDoc}
109     */
110    protected SvnCommand getExportCommand()
111    {
112        return new SvnExeExportCommand();
113    }
114
115    /**
116     * {@inheritDoc}
117     */
118    protected SvnCommand getRemoveCommand()
119    {
120        return new SvnRemoveCommand();
121    }
122
123    /**
124     * {@inheritDoc}
125     */
126    protected SvnCommand getStatusCommand()
127    {
128        return new SvnStatusCommand();
129    }
130
131    /**
132     * {@inheritDoc}
133     */
134    protected SvnCommand getTagCommand()
135    {
136        return new SvnTagCommand();
137    }
138
139    /**
140     * {@inheritDoc}
141     */
142    protected SvnCommand getUntagCommand()
143    {
144        return new SvnUntagCommand();
145    }
146
147    /**
148     * {@inheritDoc}
149     */
150    protected SvnCommand getUpdateCommand()
151    {
152        return new SvnUpdateCommand();
153    }
154
155    /**
156     * {@inheritDoc}
157     */
158    protected SvnCommand getListCommand()
159    {
160        return new SvnListCommand();
161    }
162
163    public SvnCommand getInfoCommand()
164    {
165        return new SvnInfoCommand();
166    }
167
168    /**
169     * {@inheritDoc}
170     */
171    protected SvnCommand getBlameCommand()
172    {
173        return new SvnBlameCommand();
174    }
175
176    /**
177     * {@inheritDoc}
178     */
179    protected SvnCommand getMkdirCommand()
180    {
181        return new SvnMkdirCommand();
182    }
183
184    /**
185     * {@inheritDoc}
186     */
187    protected String getRepositoryURL( File path )
188        throws ScmException
189    {
190        // Note: I need to supply just 1 absolute path, but ScmFileSet won't let me without
191        // a basedir (which isn't used here anyway), so use a dummy file.
192        SvnInfoCommand infoCmd = (SvnInfoCommand) getInfoCommand();
193        infoCmd.setLogger( this.getLogger() );
194        InfoScmResult result =
195            infoCmd.executeInfoCommand( null, new ScmFileSet( new File( "" ), path ), null, false, null );
196
197        if ( result.getInfoItems().size() != 1 )
198        {
199            throw new ScmRepositoryException(
200                "Cannot find URL: " + ( result.getInfoItems().size() == 0 ? "no" : "multiple" )
201                    + " items returned by the info command" );
202        }
203
204        return result.getInfoItems().get( 0 ).getURL();
205    }
206
207    @Override
208    public RemoteInfoScmResult remoteInfo( ScmProviderRepository repository, ScmFileSet fileSet,
209                                           CommandParameters parameters )
210        throws ScmException
211    {
212        SvnRemoteInfoCommand svnRemoteInfoCommand = new SvnRemoteInfoCommand();
213        return svnRemoteInfoCommand.executeRemoteInfoCommand( repository, fileSet, parameters );
214    }
215
216    @Override
217    public boolean remoteUrlExist( ScmProviderRepository repository, CommandParameters parameters )
218        throws ScmException
219    {
220        SvnRemoteInfoCommand svnRemoteInfoCommand = new SvnRemoteInfoCommand();
221        return svnRemoteInfoCommand.remoteUrlExist( repository, parameters );
222    }
223}