Skip to content

Commit

Permalink
Ability to specify Gradle version
Browse files Browse the repository at this point in the history
Fixes #76
  • Loading branch information
lptr committed Jul 25, 2014
1 parent c536f66 commit b265821
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 28 deletions.
4 changes: 4 additions & 0 deletions pride-core/src/main/java/com/prezi/gradle/pride/Pride.java
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,10 @@ public static File getPrideVersionFile(File configDirectory) {
return new File(configDirectory, PRIDE_VERSION_FILE);
}

public static File getPrideConfigFile(File configDirectory) {
return new File(configDirectory, PRIDE_CONFIG_FILE);
}

public File getRootDirectory() {
return rootDirectory;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class CliConfiguration {
public static final String REPO_CACHE_ALWAYS = "repo.cache.always";
public static final String REPO_RECURSIVE = "repo.recursive.always";
public static final String COMMAND_UPDATE_REFRESH_DEPENDENCIES = "command.update.refresh_dependencies.always";
public static final String GRADLE_VERSION = "gradle.version";

public static class Defaults extends MapConfiguration {
public Defaults() {
Expand All @@ -21,6 +22,7 @@ public Defaults() {
setProperty(REPO_CACHE_ALWAYS, true);
setProperty(REPO_RECURSIVE, false);
setProperty(COMMAND_UPDATE_REFRESH_DEPENDENCIES, false);
setProperty(GRADLE_VERSION, null);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.prezi.gradle.pride.cli;

import com.google.common.base.Strings;
import com.prezi.gradle.pride.Module;
import com.prezi.gradle.pride.Pride;
import com.prezi.gradle.pride.PrideException;
Expand All @@ -19,40 +20,53 @@
import java.io.FileOutputStream;
import java.io.IOException;

@SuppressWarnings("ResultOfMethodCallIgnored")
public class PrideInitializer {

private static final Logger logger = LoggerFactory.getLogger(PrideInitializer.class);
private static final String DO_NOT_MODIFY_WARNING =
"//\n" +
"// DO NOT MODIFY -- This file is generated by Pride, and will be\n" +
"// overwritten whenever the pride itself is changed.\n//\n";
private static final ThreadLocal<GradleConnector> gradleConnector = new ThreadLocal<GradleConnector>() {
@Override
protected GradleConnector initialValue() {
logger.info("Starting Gradle connector");
return GradleConnector.newConnector();
}
};
private final ThreadLocal<GradleConnector> gradleConnector;
private final String gradleVersion;

public PrideInitializer(final String gradleVersion) {
this.gradleVersion = gradleVersion;
this.gradleConnector = new ThreadLocal<GradleConnector>() {
@Override
protected GradleConnector initialValue() {
logger.info("Starting Gradle connector");
GradleConnector connector = GradleConnector.newConnector();
if (!Strings.isNullOrEmpty(gradleVersion)) {
connector.useGradleVersion(gradleVersion);
}
return connector;
}
};
}

public static Pride create(final File prideDirectory, Configuration configuration, VcsManager vcsManager) throws IOException {
public Pride create(final File prideDirectory, Configuration configuration, VcsManager vcsManager) throws IOException {
logger.info("Initializing " + prideDirectory);
prideDirectory.mkdirs();
FileUtils.forceMkdir(prideDirectory);

File configDirectory = Pride.getPrideConfigDirectory(prideDirectory);
FileUtils.deleteDirectory(configDirectory);
configDirectory.mkdirs();
FileUtils.forceMkdir(configDirectory);
FileUtils.write(Pride.getPrideVersionFile(configDirectory), "0\n");
if (!Strings.isNullOrEmpty(gradleVersion)) {
FileUtils.write(Pride.getPrideConfigFile(configDirectory), CliConfiguration.GRADLE_VERSION + " = " + gradleVersion + "\n");
}
//noinspection ResultOfMethodCallIgnored
Pride.getPrideModulesFile(configDirectory).createNewFile();

Pride pride = Pride.getPride(prideDirectory, configuration, vcsManager);
reinitialize(pride);
return pride;
}

public static void reinitialize(final Pride pride) throws IOException {
public void reinitialize(final Pride pride) throws IOException {
File buildFile = pride.getGradleBuildFile();
buildFile.delete();
FileUtils.deleteQuietly(buildFile);
FileUtils.write(buildFile, DO_NOT_MODIFY_WARNING);
FileOutputStream buildOut = new FileOutputStream(buildFile, true);
try {
Expand All @@ -62,17 +76,17 @@ public static void reinitialize(final Pride pride) throws IOException {
}

final File settingsFile = pride.getGradleSettingsFile();
settingsFile.delete();
FileUtils.deleteQuietly(settingsFile);
FileUtils.write(settingsFile, DO_NOT_MODIFY_WARNING);
for (Module module : pride.getModules()) {
File moduleDirectory = new File(pride.getRootDirectory(), module.getName());
if (Pride.isValidModuleDirectory(moduleDirectory)) {
PrideInitializer.initializeModule(pride, moduleDirectory, settingsFile);
initializeModule(pride, moduleDirectory, settingsFile);
}
}
}

private static void initializeModule(Pride pride, final File moduleDirectory, final File settingsFile) {
private void initializeModule(Pride pride, final File moduleDirectory, final File settingsFile) {
ProjectConnection connection = gradleConnector.get().forProjectDirectory(moduleDirectory).connect();
try {
final String relativePath = pride.getRootDirectory().toURI().relativize(moduleDirectory.toURI()).toString();
Expand Down Expand Up @@ -100,7 +114,7 @@ private static void initializeModule(Pride pride, final File moduleDirectory, fi
}
}

public static void refreshDependencies(Pride pride) {
public void refreshDependencies(Pride pride) {
logger.info("Refreshing dependencies");
ProjectConnection connection = gradleConnector.get().forProjectDirectory(pride.getRootDirectory()).connect();
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@

import com.google.common.base.Strings;
import com.prezi.gradle.pride.cli.CliConfiguration;
import io.airlift.command.Option;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.PropertiesConfiguration;

import java.util.Arrays;

public abstract class AbstractConfiguredCommand extends AbstractCommand {
@Option(name = "--gradle-version",
title = "version",
description = "Use specified Gradle version")
private String explicitGradleVersion;

@Override
final public Integer call() throws Exception {
PropertiesConfiguration globalConfiguration = loadGlobalConfiguration();
Expand All @@ -18,6 +24,10 @@ final public Integer call() throws Exception {

abstract protected int executeWithConfiguration(Configuration globalConfig) throws Exception;

protected String getGradleVersion(Configuration config) {
return override(config, CliConfiguration.GRADLE_VERSION, explicitGradleVersion);
}

protected static boolean override(Configuration config, String property, Boolean override) {
if (override != null) {
config.setProperty(property, override);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public boolean apply(String it) {
pride.save();

try {
PrideInitializer.reinitialize(pride);
new PrideInitializer(getGradleVersion(config)).reinitialize(pride);
} catch (Exception ex) {
throw new PrideException("There was a problem reinitializing the pride. Fix the errors above, and try again with\n\n\tpride init --force", ex);
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@ public class InitCommand extends AbstractConfiguredCommand {
description = "Do not add existing modules in the pride directory to the pride")
private boolean explicitNoAddExisting;

@Option(name = "--gradle-version",
title = "version",
description = "Use specified Gradle version")
private String explicitGradleVersion;

@Override
protected int executeWithConfiguration(Configuration globalConfig) throws Exception {
boolean prideExistsAlready = Pride.containsPride(getPrideDirectory());
Expand All @@ -44,7 +39,8 @@ protected int executeWithConfiguration(Configuration globalConfig) throws Except
logger.debug("Exception was", ex);
}
}
final Pride pride = PrideInitializer.create(getPrideDirectory(), globalConfig, getVcsManager());
PrideInitializer prideInitializer = new PrideInitializer(getGradleVersion(config));
final Pride pride = prideInitializer.create(getPrideDirectory(), globalConfig, getVcsManager());

if (!explicitNoAddExisting) {
logger.debug("Adding existing modules");
Expand All @@ -64,7 +60,7 @@ public boolean accept(File path) {
}
if (addedAny) {
pride.save();
PrideInitializer.reinitialize(pride);
prideInitializer.reinitialize(pride);
}
}
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ public boolean apply(String moduleName) {
pride.save();

// Re-initialize pride
PrideInitializer.reinitialize(pride);
new PrideInitializer(getGradleVersion(pride.getConfiguration())).reinitialize(pride);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void executeInPride(Pride pride) throws IOException {
}

if (refreshDependencies) {
PrideInitializer.refreshDependencies(pride);
new PrideInitializer(getGradleVersion(config)).refreshDependencies(pride);
}
}
}

0 comments on commit b265821

Please sign in to comment.