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