Small bug fixes; everything working.
This commit is contained in:
parent
f44f2df797
commit
c18438ff6a
@ -18,10 +18,10 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
|
||||
private static final Marker enter = MarkerFactory.getMarker('enter')
|
||||
private static final Marker exit = MarkerFactory.getMarker('exit')
|
||||
|
||||
private final Collection<URL> buildScriptClassLoaderUrls
|
||||
private final @Nullable File buildScript
|
||||
private final Collection<Build> builds = []
|
||||
|
||||
private boolean ranBuildScript = false
|
||||
private GroovyClassLoader buildScriptClassLoader
|
||||
|
||||
/**
|
||||
@ -34,6 +34,7 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
|
||||
Collection<URL> buildScriptClassLoaderUrls,
|
||||
@Nullable File buildScript = null
|
||||
) {
|
||||
this.buildScriptClassLoaderUrls = buildScriptClassLoaderUrls
|
||||
this.buildScript = buildScript
|
||||
}
|
||||
|
||||
@ -53,9 +54,7 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
|
||||
this.builds.addAll(result)
|
||||
} else if (this.buildScript.exists() && this.buildScript.isFile()) {
|
||||
logger.info('running buildScript: {}', this.buildScript)
|
||||
def buildScriptRunner = new BuildScriptRunner([
|
||||
this.buildScript.parentFile.toURI().toURL()
|
||||
])
|
||||
def buildScriptRunner = new BuildScriptRunner(this.buildScriptClassLoaderUrls)
|
||||
this.buildScriptClassLoader = buildScriptRunner.getBuildScriptClassLoader()
|
||||
def result = buildScriptRunner.runBuildScript(
|
||||
this.buildScript.name,
|
||||
@ -67,7 +66,6 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
|
||||
} else {
|
||||
throw new IllegalArgumentException("given buildScript ${ this.buildScript } either does not exist or is not a file")
|
||||
}
|
||||
this.ranBuildScript = true
|
||||
|
||||
logger.trace(exit, '')
|
||||
}
|
||||
@ -91,9 +89,7 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator {
|
||||
) {
|
||||
logger.trace(enter, 'buildName: {}, diagnosticsConsumer: {}', buildName, diagnosticsConsumer)
|
||||
|
||||
if (!this.ranBuildScript) {
|
||||
this.runBuildScript(configuratorFactories, buildScriptArgs)
|
||||
}
|
||||
this.runBuildScript(configuratorFactories, buildScriptArgs)
|
||||
|
||||
def build = this.builds.find { it.name == buildName }
|
||||
if (!build) {
|
||||
|
@ -54,4 +54,9 @@ final class Build {
|
||||
concat(this, other)
|
||||
}
|
||||
|
||||
@Override
|
||||
String toString() {
|
||||
"Build(name: ${ this.name }, siteSpec: ${ this.siteSpec }, globals: ${ this.globals })"
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,12 +5,20 @@ import groovy.transform.NullCheck
|
||||
import groovy.transform.stc.ClosureParams
|
||||
import groovy.transform.stc.SimpleType
|
||||
import org.codehaus.groovy.control.CompilerConfiguration
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.slf4j.Marker
|
||||
import org.slf4j.MarkerFactory
|
||||
|
||||
import java.util.function.Consumer
|
||||
|
||||
@NullCheck
|
||||
final class BuildScriptRunner {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(BuildScriptRunner)
|
||||
private static final Marker enter = MarkerFactory.getMarker('ENTER')
|
||||
private static final Marker exit = MarkerFactory.getMarker('EXIT')
|
||||
|
||||
private static Collection<Build> runBase(BuildScriptBase base) {
|
||||
base.run()
|
||||
BuildSpecUtil.getBuilds(base.getBuildSpecs())
|
||||
@ -55,17 +63,15 @@ final class BuildScriptRunner {
|
||||
Map<String, Object> binding,
|
||||
Consumer<BuildScriptBase> configureBuildScript
|
||||
) {
|
||||
Class<?> scriptClass = this.buildScriptClassLoader.loadClass(
|
||||
ExtensionUtil.stripExtension(scriptName),
|
||||
true,
|
||||
false,
|
||||
false
|
||||
)
|
||||
logger.trace(enter, 'scriptName: {}, binding: {}', scriptName, binding)
|
||||
Class<?> scriptClass = this.buildScriptClassLoader.loadClass(ExtensionUtil.stripExtension(scriptName))
|
||||
def scriptObject = scriptClass.getConstructor().newInstance()
|
||||
assert scriptObject instanceof BuildScriptBase
|
||||
scriptObject.setBinding(new Binding(binding))
|
||||
configureBuildScript.accept(scriptObject)
|
||||
runBase(scriptObject)
|
||||
def result = runBase(scriptObject)
|
||||
logger.trace(exit, 'result: {}', result)
|
||||
result
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -48,13 +48,18 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
|
||||
logger.traceEntry('requestedBuild: {}', requestedBuild)
|
||||
|
||||
if (this.staticSiteGenerator == null) {
|
||||
this.staticSiteGenerator = new CliBasedStaticSiteGenerator(
|
||||
this.buildScript,
|
||||
[
|
||||
this.buildScript.parentFile.toURI().toURL(),
|
||||
*this.buildSrcDirs.collect { it.toURI().toURL() }
|
||||
]
|
||||
)
|
||||
final Collection<URL> buildScriptUrls = []
|
||||
|
||||
def buildScriptParentFile = this.buildScript.parentFile
|
||||
if (buildScriptParentFile == null) {
|
||||
buildScriptUrls.add(new File('.').toURI().toURL())
|
||||
} else {
|
||||
buildScriptUrls.add(buildScriptParentFile.toURI().toURL())
|
||||
}
|
||||
|
||||
buildScriptUrls.addAll(this.buildSrcDirs.collect { it.toURI().toURL() })
|
||||
|
||||
this.staticSiteGenerator = new CliBasedStaticSiteGenerator(this.buildScript, buildScriptUrls)
|
||||
}
|
||||
|
||||
final Collection<Diagnostic> diagnostics = []
|
||||
|
@ -23,7 +23,7 @@ final class SsgBuild extends AbstractBuildCommand {
|
||||
it,
|
||||
[new DefaultBuildScriptConfiguratorFactory(
|
||||
new File('.'),
|
||||
this.staticSiteGenerator::getBuildScriptClassLoader
|
||||
{ this.staticSiteGenerator.buildScriptClassLoader }
|
||||
)],
|
||||
this.scriptArgs
|
||||
)
|
||||
|
@ -46,7 +46,7 @@ final class SsgInit extends AbstractSubCommand {
|
||||
|
||||
if (meaty) {
|
||||
file('ssgBuilds.groovy').tap {
|
||||
copyResourceToFile('ssgBuilds.groovy', it)
|
||||
copyResourceToFile('ssgBuildsMeaty.groovy', it)
|
||||
}
|
||||
} else {
|
||||
file('ssgBuilds.groovy').tap {
|
||||
|
@ -15,11 +15,9 @@ final class CliBasedStaticSiteGeneratorTests {
|
||||
def baseDir = File.createTempDir()
|
||||
SsgInit.init(baseDir, true)
|
||||
|
||||
def groovyClassLoader = new GroovyClassLoader()
|
||||
[baseDir.toURI().toURL(), new File(baseDir, 'buildSrc').toURI().toURL()]
|
||||
.each(groovyClassLoader::addURL)
|
||||
def urls = [baseDir.toURI().toURL(), new File(baseDir, 'buildSrc').toURI().toURL()]
|
||||
|
||||
def ssg = new CliBasedStaticSiteGenerator(new File(baseDir, 'ssgBuilds.groovy'), [])
|
||||
def ssg = new CliBasedStaticSiteGenerator(new File(baseDir, 'ssgBuilds.groovy'), urls)
|
||||
def configuratorFactories = [
|
||||
new DefaultBuildScriptConfiguratorFactory(baseDir, ssg::getBuildScriptClassLoader)
|
||||
]
|
||||
|
Loading…
Reference in New Issue
Block a user