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