/** * Copyright 2012 Universitat Pompeu Fabra. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * */ package org.onexus.resource.manager.internal.providers; import org.apache.commons.io.monitor.FileAlterationMonitor; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.PullCommand; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.storage.file.FileRepositoryBuilder; import org.onexus.resource.api.IResourceListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.security.InvalidParameterException; import java.util.List; public class GitProjectProvider extends AbstractProjectProvider { private static final Logger LOGGER = LoggerFactory.getLogger(GitProjectProvider.class); public GitProjectProvider(String projectName, String projectUrl, File projectFolder, FileAlterationMonitor monitor, List<IResourceListener> listeners) throws InvalidParameterException { super(projectName, projectUrl, projectFolder, monitor, listeners); if (!projectFolder.exists()) { importProject(); } } @Override protected void importProject() { try { File projectFolder = getProjectFolder(); boolean cloneDone = true; if (!projectFolder.exists()) { projectFolder.mkdir(); cloneDone = false; } FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repository = builder.setWorkTree(projectFolder).readEnvironment().build(); Git git = new Git(repository); if (cloneDone) { PullCommand pull = git.pull(); pull.call(); } else { CloneCommand clone = git.cloneRepository(); clone.setBare(false); clone.setCloneAllBranches(true); clone.setDirectory(projectFolder).setURI(getProjectUrl().toString()); clone.call(); //TODO Checkout branch } } catch (Exception e) { LOGGER.error("Importing project '" + getProjectUrl() + "'", e); throw new InvalidParameterException("Error importing project. " + e.getMessage()); } } private class LogProgressMonitor implements ProgressMonitor { @Override public void start(int totalTasks) { } @Override public void beginTask(String title, int totalWork) { LOGGER.info(title + " #" + totalWork); } @Override public void update(int completed) { } @Override public void endTask() { } @Override public boolean isCancelled() { return false; } } }