Small bug fixes; everything working.

This commit is contained in:
JesseBrault0709 2023-06-14 12:59:54 +02:00
parent f44f2df797
commit c18438ff6a
8 changed files with 38 additions and 28 deletions

View File

@ -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) {

View File

@ -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 })"
}
} }

View File

@ -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
} }
} }

View File

@ -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 = []

View File

@ -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
) )

View File

@ -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 {

View File

@ -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)
] ]