/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.git.impl;
import org.eclipse.che.api.git.GitConnection;
import org.eclipse.che.api.git.GitConnectionFactory;
import org.eclipse.che.api.git.exception.GitException;
import org.eclipse.che.api.git.params.AddParams;
import org.eclipse.che.api.git.params.CommitParams;
import org.eclipse.che.api.git.shared.GitUser;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.lang.IoUtil;
import org.eclipse.che.commons.subject.SubjectImpl;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import static java.nio.file.Files.createDirectories;
import static java.nio.file.Files.delete;
import static java.nio.file.Files.exists;
import static java.nio.file.Files.write;
import static java.util.Collections.singletonList;
import static org.eclipse.che.api.core.util.LineConsumerFactory.NULL;
import static org.eclipse.che.dto.server.DtoFactory.newDto;
/**
* @author Sergii Kabashniuk
*/
public class GitTestUtil {
public static final String CONTENT = "git repository content\n";
public static GitConnection connectToGitRepositoryWithContent(GitConnectionFactory connectionFactory, File repository)
throws GitException, IOException {
GitConnection connection = connectToInitializedGitRepository(connectionFactory, repository);
addFile(connection, "README.txt", CONTENT);
connection.add(AddParams.create(singletonList("README.txt")));
connection.commit(CommitParams.create("Initial commit"));
return connection;
}
public static GitConnection connectToInitializedGitRepository(GitConnectionFactory connectionFactory, File repository)
throws GitException, IOException {
GitConnection connection = getTestUserConnection(connectionFactory, repository);
connection.init(false);
return connection;
}
public static void cleanupTestRepo(File testRepo) {
IoUtil.deleteRecursive(testRepo);
}
public static GitConnection getTestUserConnection(GitConnectionFactory connectionFactory, File repository) throws GitException {
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("codenvy", "codenvy", null, false));
return connectionFactory.getConnection(repository, NULL);
}
public static GitUser getTestGitUser() {
return newDto(GitUser.class).withName("test_name").withEmail("test@email");
}
public static File addFile(GitConnection connection, String name, String content) throws IOException {
return addFile(connection.getWorkingDir().toPath(), name, content);
}
public static File addFile(Path parent, String name, String content) throws IOException {
if (!exists(parent)) {
createDirectories(parent);
}
return write(parent.resolve(name), content.getBytes()).toFile();
}
public static void deleteFile(GitConnection connection, String name) throws IOException {
delete(connection.getWorkingDir().toPath().resolve(name));
}
}