package com.cadrlife.devsearch.agent.service.cvs; import java.io.File; import java.util.List; import org.apache.commons.lang.StringUtils; import org.netbeans.lib.cvsclient.Client; import org.netbeans.lib.cvsclient.command.Command; import org.netbeans.lib.cvsclient.command.GlobalOptions; import org.netbeans.lib.cvsclient.command.checkout.CheckoutCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.cadrlife.devsearch.agent.service.RepoService; import com.cadrlife.devsearch.cvsnavigator.CvsConnection; import com.cadrlife.devsearch.cvsnavigator.CvsCredentials; import com.cadrlife.devsearch.cvsnavigator.CvsErrorCollectingListener; import com.cadrlife.devsearch.cvsnavigator.CvsModuleList; import com.cadrlife.devsearch.domain.Project; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; public class CvsService extends RepoService { private static final Logger LOG = LoggerFactory.getLogger(CvsService.class); private String cvsTempDir; private CvsCredentials cvsCredentials; private Client client; private GlobalOptions cvsOptions; private CvsErrorCollectingListener errorListener = new CvsErrorCollectingListener(); public CvsService(CvsCredentials cvsCredentials, String cvsTempDir, String checkoutDir) { this.cvsCredentials = cvsCredentials; this.cvsTempDir = cvsTempDir; client = CvsConnection.openClient(cvsCredentials.getCvsRoot(), cvsCredentials.getPassword(), checkoutDir); client.getEventManager().addCVSListener(errorListener); cvsOptions = new GlobalOptions(); cvsOptions.setCVSRoot(cvsCredentials.getCvsRoot()); } public List <Project> findAllProjects() { try { List <String> projectNames = new CvsModuleList().getModules(cvsCredentials, cvsTempDir); projectNames.remove("CVSROOT"); LOG.info("Found " + projectNames.size() + " projects in CVS:[" + StringUtils.join(projectNames, ", ") + "]"); return findProjectsByAnyName(projectNames); } catch (Exception e) { throw new RuntimeException("Could not get modules", e); } } @Override public void updateProject(File file, Project project) { String projectName = project.getName(); checkout(file, projectName); setLastChanged(file, project); } private void setLastChanged(File file, Project project) { project.setLastChangedDate(FileListingVisitor.findLastModifiedDate(file.toPath())); } private void executeCommand(Command command) { try { errorListener.clear(); boolean success = client.executeCommand(command, cvsOptions); if (!success) { LOG.error("{} {} Error dump: {}", command.getCVSCommand(), command.getCVSArguments(), errorListener.getErrorMessages()); throw new RuntimeException("CVS Command returned failure. See log above."); } } catch (Exception e) { LOG.error("{} {} Error dump: {}", command.getCVSCommand(), command.getCVSArguments(), errorListener.getErrorMessages()); throw new RuntimeException("CVS Command blew up. See stacktrace and log above", e); } } private void checkout(File file, String projectName) { String absolutePath = file.getAbsolutePath(); CheckoutCommand command = new CheckoutCommand(); command.setModule(projectName); client.setLocalPath(file.toPath().getParent().toString()); LOG.info("CHECKOUT on {} to '{}'", projectName, absolutePath); executeCommand(command); } @Override public String getSourceType() { return "cvs"; } public CvsCredentials getCvsCredentials() { return cvsCredentials; } // }