Simplify things

This commit is contained in:
René Pfeuffer
2018-06-20 16:08:51 +02:00
parent 7f19b5baff
commit 9d2d70f9df
9 changed files with 190 additions and 592 deletions

View File

@@ -1,54 +0,0 @@
/**
* Copyright (c) 2014, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.repository.client.spi;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* Add files to subversion repository.
*
* @author Sebastian Sdorra
* @since 1.51
*/
public final class SvnAddCommand extends SvnFileCommand implements AddCommand {
SvnAddCommand(File workingCopy, List<File> pendingFiles) {
super(workingCopy, pendingFiles);
}
@Override
public void add(String path) throws IOException {
append(path);
}
}

View File

@@ -0,0 +1,141 @@
package sonia.scm.repository.client.spi;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCClient;
import org.tmatesoft.svn.core.wc2.SvnCommit;
import org.tmatesoft.svn.core.wc2.SvnLog;
import org.tmatesoft.svn.core.wc2.SvnRevisionRange;
import org.tmatesoft.svn.core.wc2.SvnTarget;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.SvnUtil;
import sonia.scm.repository.client.api.RepositoryClientException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class SvnChangeWorker {
private final File workingCopy;
private final List<File> addedFiles = new ArrayList<>();
private final List<File> removedFiles = new ArrayList<>();
public SvnChangeWorker(File workingCopy) {
this.workingCopy = workingCopy;
}
public AddCommand addCommand() {
return new SvnAddCommand();
}
public RemoveCommand removeCommand() {
return new SvnRemoveCommand();
}
public CommitCommand commitCommand(SVNClientManager client) {
return new SvnCommitCommand(client);
}
private class SvnAddCommand implements AddCommand {
@Override
public void add(String path) throws IOException {
addedFiles.add(toFile(path));
}
}
private class SvnRemoveCommand implements RemoveCommand {
@Override
public void remove(String path) throws IOException {
removedFiles.add(toFile(path));
}
}
private class SvnCommitCommand implements CommitCommand {
private final SVNClientManager client;
private SvnCommitCommand(SVNClientManager client) {
this.client = client;
}
@Override
public Changeset commit(CommitRequest request) throws IOException {
SVNWCClient wClient = client.getWCClient();
// add files
try {
wClient.doAdd(addedFiles.toArray(new File[0]), true, false, false,
SVNDepth.INFINITY, false, false, false);
addedFiles.clear();
} catch (SVNException ex) {
throw new RepositoryClientException("failed to add files", ex);
}
// remove files
try {
Iterator<File> removeIt = removedFiles.iterator();
while (removeIt.hasNext()) {
File file = removeIt.next();
wClient.doDelete(file, false, true, false);
removeIt.remove();
}
} catch (SVNException ex) {
throw new RepositoryClientException("failed to remove files", ex);
}
SvnTarget workingCopyTarget = SvnTarget.fromFile(workingCopy);
Changeset changeset;
SVNCommitInfo info;
// commit files
try {
SvnCommit commit = client.getOperationFactory().createCommit();
commit.setDepth(SVNDepth.INFINITY);
commit.setCommitMessage(request.getMessage());
commit.setSingleTarget(workingCopyTarget);
info = commit.run();
SVNErrorMessage msg = info.getErrorMessage();
if (msg != null) {
throw new IOException(msg.getFullMessage());
}
} catch (SVNException ex) {
throw new RepositoryClientException("failed to commit", ex);
}
// get log for commit
try {
SVNRevision revision = SVNRevision.create(info.getNewRevision());
SvnLog log = client.getOperationFactory().createLog();
log.addRange(SvnRevisionRange.create(revision, revision));
log.setSingleTarget(workingCopyTarget);
changeset = SvnUtil.createChangeset(log.run());
} catch (SVNException ex) {
throw new RepositoryClientException("failed to create log entry for last commit", ex);
}
return changeset;
}
}
protected File toFile(String path) throws FileNotFoundException {
File file = new File(workingCopy, path);
if (!file.exists()) {
throw new FileNotFoundException("could not find file ".concat(path));
}
return file;
}
}

View File

@@ -1,135 +0,0 @@
/**
* Copyright (c) 2014, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.repository.client.spi;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCClient;
import org.tmatesoft.svn.core.wc2.SvnCommit;
import org.tmatesoft.svn.core.wc2.SvnLog;
import org.tmatesoft.svn.core.wc2.SvnRevisionRange;
import org.tmatesoft.svn.core.wc2.SvnTarget;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.SvnUtil;
import sonia.scm.repository.client.api.RepositoryClientException;
/**
*
* @author Sebastian Sdorra
*/
public class SvnCommitCommand implements CommitCommand {
private final SVNClientManager client;
private final File workingCopy;
private final List<File> addedFiles;
private final List<File> removedFiles;
SvnCommitCommand(SVNClientManager client, File workingCopy, List<File> addedFiles, List<File> removedFiles) {
this.client = client;
this.workingCopy = workingCopy;
this.addedFiles = addedFiles;
this.removedFiles = removedFiles;
}
@Override
public Changeset commit(CommitRequest request) throws IOException {
SVNWCClient wClient = client.getWCClient();
// add files
try {
wClient.doAdd(addedFiles.toArray(new File[0]), true, false, false,
SVNDepth.INFINITY, false, false, false);
addedFiles.clear();
} catch (SVNException ex) {
throw new RepositoryClientException("failed to add files", ex);
}
// remove files
try {
Iterator<File> removeIt = removedFiles.iterator();
while (removeIt.hasNext()) {
File file = removeIt.next();
wClient.doDelete(file, false, true, false);
removeIt.remove();
}
} catch (SVNException ex) {
throw new RepositoryClientException("failed to remove files", ex);
}
SvnTarget workingCopyTarget = SvnTarget.fromFile(workingCopy);
Changeset changeset;
SVNCommitInfo info;
// commit files
try {
SvnCommit commit = client.getOperationFactory().createCommit();
commit.setDepth(SVNDepth.INFINITY);
commit.setCommitMessage(request.getMessage());
commit.setSingleTarget(workingCopyTarget);
info = commit.run();
SVNErrorMessage msg = info.getErrorMessage();
if (msg != null) {
throw new IOException(msg.getFullMessage());
}
} catch (SVNException ex) {
throw new RepositoryClientException("failed to commit", ex);
}
// get log for commit
try {
SVNRevision revision = SVNRevision.create(info.getNewRevision());
SvnLog log = client.getOperationFactory().createLog();
log.addRange(SvnRevisionRange.create(revision, revision));
log.setSingleTarget(workingCopyTarget);
changeset = SvnUtil.createChangeset(log.run());
} catch (SVNException ex) {
throw new RepositoryClientException("failed to create log entry for last commit", ex);
}
return changeset;
}
}

View File

@@ -1,62 +0,0 @@
/**
* Copyright (c) 2014, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.repository.client.spi;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
/**
* Abstract file based svn command.
*
* @author Sebastian Sdorra
* @since 1.51
*/
public abstract class SvnFileCommand {
private final File workingCopy;
private final List<File> pendingFiles;
protected SvnFileCommand(File workingCopy, List<File> pendingFiles) {
this.workingCopy = workingCopy;
this.pendingFiles = pendingFiles;
}
protected void append(String path) throws FileNotFoundException {
File file = new File(workingCopy, path);
if (!file.exists()) {
throw new FileNotFoundException("could not find file ".concat(path));
}
pendingFiles.add(file);
}
}

View File

@@ -1,54 +0,0 @@
/**
* Copyright (c) 2014, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.repository.client.spi;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* Remove files from subversion repository.
*
* @author Sebastian Sdorra
* @since 1.51
*/
public class SvnRemoveCommand extends SvnFileCommand implements RemoveCommand {
SvnRemoveCommand(File workingCopy, List<File> pendingFiles) {
super(workingCopy, pendingFiles);
}
@Override
public void remove(String path) throws IOException {
append(path);
}
}

View File

@@ -31,14 +31,12 @@
package sonia.scm.repository.client.spi; package sonia.scm.repository.client.spi;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNClientManager;
import sonia.scm.repository.client.api.ClientCommand; import sonia.scm.repository.client.api.ClientCommand;
import java.io.File;
import java.util.Set;
/** /**
* Subversion repository client provider. * Subversion repository client provider.
* *
@@ -54,27 +52,27 @@ public class SvnRepositoryClientProvider extends RepositoryClientProvider {
private final SVNClientManager client; private final SVNClientManager client;
private final File workingCopy; private final File workingCopy;
private final List<File> addedFiles = new ArrayList<>(); private final SvnChangeWorker changeWorker;
private final List<File> removedFiles = new ArrayList<>();
SvnRepositoryClientProvider(SVNClientManager client, File workingCopy) { SvnRepositoryClientProvider(SVNClientManager client, File workingCopy) {
changeWorker = new SvnChangeWorker(workingCopy);
this.client = client; this.client = client;
this.workingCopy = workingCopy; this.workingCopy = workingCopy;
} }
@Override @Override
public SvnAddCommand getAddCommand() { public AddCommand getAddCommand() {
return new SvnAddCommand(workingCopy, addedFiles); return changeWorker.addCommand();
} }
@Override @Override
public SvnRemoveCommand getRemoveCommand() { public RemoveCommand getRemoveCommand() {
return new SvnRemoveCommand(workingCopy, removedFiles); return changeWorker.removeCommand();
} }
@Override @Override
public SvnCommitCommand getCommitCommand() { public CommitCommand getCommitCommand() {
return new SvnCommitCommand(client, workingCopy, addedFiles, removedFiles); return changeWorker.commitCommand(client);
} }
@Override @Override

View File

@@ -32,97 +32,38 @@
package sonia.scm.repository.client.api; package sonia.scm.repository.client.api;
//~--- non-JDK imports --------------------------------------------------------
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.repository.client.spi.AddCommand; import sonia.scm.repository.client.spi.AddCommand;
import sonia.scm.util.Util; import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException; import java.io.IOException;
/** /**
*
* @author Sebastian Sdorra
* @since 1.18 * @since 1.18
*/ */
public final class AddCommandBuilder public final class AddCommandBuilder {
{
/** private static final Logger logger = LoggerFactory.getLogger(AddCommandBuilder.class);
* the logger for AddCommandBuilder
*/
private static final Logger logger =
LoggerFactory.getLogger(AddCommandBuilder.class);
//~--- constructors --------------------------------------------------------- private final AddCommand command;
/** AddCommandBuilder(AddCommand command) {
* Constructs ...
*
*
* @param directory
* @param command
*/
AddCommandBuilder(AddCommand command)
{
this.command = command; this.command = command;
} }
//~--- methods -------------------------------------------------------------- public AddCommandBuilder add(String... paths) throws IOException {
for (String p : paths) {
/**
* Method description
*
*
* @param path
* @param pathes
*
* @return
*
* @throws IOException
*/
public AddCommandBuilder add(String path, String... pathes) throws IOException
{
add(path);
if (Util.isNotEmpty(pathes))
{
for (String p : pathes)
{
add(p); add(p);
} }
}
return this; return this;
} }
/** private void add(String path) throws IOException {
* Method description if (Util.isNotEmpty(path)) {
*
*
* @param path
*
* @throws IOException
*/
private void add(String path) throws IOException
{
if (Util.isNotEmpty(path))
{
if (logger.isDebugEnabled())
{
logger.debug("add path {}", path); logger.debug("add path {}", path);
}
command.add(path); command.add(path);
} }
} }
//~--- fields ---------------------------------------------------------------
/** Field description */
private AddCommand command;
} }

View File

@@ -32,98 +32,37 @@
package sonia.scm.repository.client.api; package sonia.scm.repository.client.api;
//~--- non-JDK imports --------------------------------------------------------
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.repository.client.spi.RemoveCommand; import sonia.scm.repository.client.spi.RemoveCommand;
import sonia.scm.util.Util; import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException; import java.io.IOException;
/** /**
*
* @author Sebastian Sdorra
* @since 1.18 * @since 1.18
*/ */
public final class RemoveCommandBuilder public final class RemoveCommandBuilder {
{
/** private static final Logger logger = LoggerFactory.getLogger(RemoveCommandBuilder.class);
* the logger for RemoveCommandBuilder
*/
private static final Logger logger =
LoggerFactory.getLogger(RemoveCommandBuilder.class);
//~--- constructors --------------------------------------------------------- private final RemoveCommand command;
/** RemoveCommandBuilder(RemoveCommand command) {
* Constructs ...
*
*
* @param directory
* @param command
*/
RemoveCommandBuilder(RemoveCommand command)
{
this.command = command; this.command = command;
} }
//~--- methods -------------------------------------------------------------- public RemoveCommandBuilder remove(String... paths) throws IOException {
for (String p : paths) {
/**
* Method description
*
*
* @param path
* @param pathes
*
* @return
*
* @throws IOException
*/
public RemoveCommandBuilder remove(String path, String... pathes)
throws IOException
{
remove(path);
if (Util.isNotEmpty(pathes))
{
for (String p : pathes)
{
remove(p); remove(p);
} }
}
return this; return this;
} }
/** private void remove(String path) throws IOException {
* Method description if (Util.isNotEmpty(path)) {
*
*
* @param path
*
* @throws IOException
*/
private void remove(String path) throws IOException
{
if (Util.isNotEmpty(path))
{
if (logger.isDebugEnabled())
{
logger.debug("add path {}", path); logger.debug("add path {}", path);
}
command.remove(path); command.remove(path);
} }
} }
//~--- fields ---------------------------------------------------------------
/** Field description */
private RemoveCommand command;
} }

View File

@@ -29,191 +29,75 @@
* *
*/ */
package sonia.scm.repository.client.api; package sonia.scm.repository.client.api;
//~--- non-JDK imports --------------------------------------------------------
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.repository.client.spi.RepositoryClientProvider; import sonia.scm.repository.client.spi.RepositoryClientProvider;
import sonia.scm.util.IOUtil; import sonia.scm.util.IOUtil;
//~--- JDK imports ------------------------------------------------------------
import java.io.Closeable; import java.io.Closeable;
import java.io.File; import java.io.File;
/** public final class RepositoryClient implements Closeable {
*
* @author Sebastian Sdorra
* @since 1.18
*/
public final class RepositoryClient implements Closeable
{
/** private static final Logger logger = LoggerFactory.getLogger(RepositoryClient.class);
* the logger for RepositoryClient
*/
private static final Logger logger =
LoggerFactory.getLogger(RepositoryClient.class);
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*
* @param directory
* @param clientProvider
*/
RepositoryClient(RepositoryClientProvider clientProvider) RepositoryClient(RepositoryClientProvider clientProvider)
{ {
this.clientProvider = clientProvider; this.clientProvider = clientProvider;
} }
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*/
@Override @Override
public void close() public void close() {
{
if (logger.isTraceEnabled())
{
logger.trace("close client provider"); logger.trace("close client provider");
}
IOUtil.close(clientProvider); IOUtil.close(clientProvider);
} }
//~--- get methods ---------------------------------------------------------- public AddCommandBuilder getAddCommand() {
/**
* Method description
*
*
* @return
*/
public AddCommandBuilder getAddCommand()
{
if (logger.isTraceEnabled())
{
logger.trace("create add command"); logger.trace("create add command");
}
return new AddCommandBuilder(clientProvider.getAddCommand()); return new AddCommandBuilder(clientProvider.getAddCommand());
} }
/** public BranchCommandBuilder getBranchCommand() {
* Method description
*
*
* @return
*/
public BranchCommandBuilder getBranchCommand()
{
if (logger.isTraceEnabled())
{
logger.trace("create branch command"); logger.trace("create branch command");
}
return new BranchCommandBuilder(clientProvider.getBranchCommand()); return new BranchCommandBuilder(clientProvider.getBranchCommand());
} }
/** public CommitCommandBuilder getCommitCommand() {
* Method description
*
*
* @return
*/
public CommitCommandBuilder getCommitCommand()
{
if (logger.isTraceEnabled())
{
logger.trace("create commit command"); logger.trace("create commit command");
}
return new CommitCommandBuilder(clientProvider.getCommitCommand()); return new CommitCommandBuilder(clientProvider.getCommitCommand());
} }
/** public PushCommandBuilder getPushCommand() {
* Method description
*
*
* @return
*/
public PushCommandBuilder getPushCommand()
{
if (logger.isTraceEnabled())
{
logger.trace("create push command"); logger.trace("create push command");
}
return new PushCommandBuilder(clientProvider.getPushCommand()); return new PushCommandBuilder(clientProvider.getPushCommand());
} }
/** public RemoveCommandBuilder getRemoveCommand() {
* Method description
*
*
* @return
*/
public RemoveCommandBuilder getRemoveCommand()
{
if (logger.isTraceEnabled())
{
logger.trace("create remove command"); logger.trace("create remove command");
}
return new RemoveCommandBuilder(clientProvider.getRemoveCommand()); return new RemoveCommandBuilder(clientProvider.getRemoveCommand());
} }
/** public TagCommandBuilder getTagCommand() {
* Method description
*
*
* @return
*/
public TagCommandBuilder getTagCommand()
{
if (logger.isTraceEnabled())
{
logger.trace("create tag command"); logger.trace("create tag command");
}
return new TagCommandBuilder(clientProvider.getTagCommand()); return new TagCommandBuilder(clientProvider.getTagCommand());
} }
/**
* Returns the working copy of the repository.
*
* @return working copy
* @since 1.51
*/
public File getWorkingCopy() { public File getWorkingCopy() {
return clientProvider.getWorkingCopy(); return clientProvider.getWorkingCopy();
} }
/** public boolean isCommandSupported(ClientCommand command) {
* Method description
*
*
* @param command
*
* @return
*/
public boolean isCommandSupported(ClientCommand command)
{
return clientProvider.getSupportedClientCommands().contains(command); return clientProvider.getSupportedClientCommands().contains(command);
} }
//~--- fields ---------------------------------------------------------------
/** Field description */
private final RepositoryClientProvider clientProvider; private final RepositoryClientProvider clientProvider;
} }