package br.uff.ic.dyevc.tools.vcs.git;
//~--- non-JDK imports --------------------------------------------------------
import br.uff.ic.dyevc.exception.VCSException;
import org.apache.commons.io.FileUtils;
import org.eclipse.jgit.lib.StoredConfig;
import org.slf4j.LoggerFactory;
//~--- JDK imports ------------------------------------------------------------
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* This class provides several utilities to handle git repositories.
*
* @author Cristiano
*/
public final class GitTools {
/**
* Copies configuration from a source repository to a working clone and includes a
* remote configuration pointing to the source repository
* @param source the repository to copy configuration from
* @param target the repository to copy configuration to
* @throws br.uff.ic.dyevc.exception.VCSException
*/
public static void adjustTargetConfiguration(GitConnector source, GitConnector target) throws VCSException {
try {
LoggerFactory.getLogger(GitTools.class).trace("adjustTargetConfiguration -> Entry");
LoggerFactory.getLogger(GitTools.class).debug("Copying configuration from {} to {}",
source.getRepositoryPath(), target.getRepositoryPath());
File targetConfigFile = new File(target.getRepositoryPath());
String sourceConfigPath = source.getPath() + "/" + GitConnector.CONFIG_FILE;
FileUtils.copyFileToDirectory(new File(sourceConfigPath), targetConfigFile, false);
StoredConfig targetConfig = target.getRepository().getConfig();
targetConfig.setString(GitConnector.DEFAULT_REMOTE, target.getId(), GitConnector.KEY_FETCH,
GitConnector.FETCH_REFS_HEADS + ":" + GitConnector.REFS_REMOTES + target.getId()
+ "/*");
targetConfig.setString(GitConnector.DEFAULT_REMOTE, target.getId(), GitConnector.KEY_URL, source.getPath());
targetConfig.save();
LoggerFactory.getLogger(GitTools.class).debug("Finished copying configuration from {} to {}",
source.getRepositoryPath(), target.getRepositoryPath());
LoggerFactory.getLogger(GitTools.class).trace("adjustTargetConfiguration -> Exit");
} catch (IOException ex) {
Logger.getLogger(GitTools.class.getName()).log(Level.SEVERE,
"An error ocurred while copying configuration from " + source.getRepositoryPath() + " to "
+ target.getRepositoryPath() + ".", ex);
}
}
}