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

View File

@ -54,4 +54,9 @@ final class Build {
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.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
}
}

View File

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

View File

@ -23,7 +23,7 @@ final class SsgBuild extends AbstractBuildCommand {
it,
[new DefaultBuildScriptConfiguratorFactory(
new File('.'),
this.staticSiteGenerator::getBuildScriptClassLoader
{ this.staticSiteGenerator.buildScriptClassLoader }
)],
this.scriptArgs
)

View File

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

View File

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