Skip to content

Commit a3b7675

Browse files
committed
group requests that share the same classpath
1 parent 6c4068f commit a3b7675

File tree

1 file changed

+29
-16
lines changed

1 file changed

+29
-16
lines changed

job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/DslScriptLoader.groovy

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,30 @@ class DslScriptLoader {
4343

4444
// Otherwise baseScript won't take effect
4545
GroovyClassLoader groovyClassLoader = new GroovyClassLoader(parentClassLoader, config)
46-
GroovyScriptEngine engine
46+
4747
try {
48-
URL[] urlRoots = scriptRequests*.urlRoots.flatten().unique()
49-
engine = new GroovyScriptEngine(urlRoots, groovyClassLoader)
50-
engine.config = config
48+
runScriptsWithClassLoader(scriptRequests, groovyClassLoader, config)
49+
} finally {
50+
if (groovyClassLoader instanceof Closeable) {
51+
((Closeable) groovyClassLoader).close()
52+
}
53+
}
54+
}
5155

52-
Binding binding = createBinding()
56+
private GeneratedItems runScriptsWithClassLoader(Collection<ScriptRequest> scriptRequests,
57+
GroovyClassLoader groovyClassLoader,
58+
CompilerConfiguration config) {
59+
GeneratedItems generatedItems = new GeneratedItems()
5360

54-
GeneratedItems generatedItems = new GeneratedItems()
55-
scriptRequests.each { ScriptRequest scriptRequest ->
56-
JobParent jobParent = runScript(scriptRequest, engine, binding)
61+
// group requests that share the same classpath
62+
scriptRequests.groupBy { it.urlRoots*.toString().sort() }.values().each { List<ScriptRequest> requestSet ->
63+
GroovyScriptEngine engine
64+
try {
65+
engine = new GroovyScriptEngine(requestSet.first().urlRoots, groovyClassLoader)
66+
engine.config = config
67+
68+
requestSet.each { ScriptRequest scriptRequest ->
69+
JobParent jobParent = runScript(scriptRequest, engine)
5770

5871
boolean ignoreExisting = scriptRequest.ignoreExisting
5972
generatedItems.configFiles.addAll(extractGeneratedConfigFiles(jobParent, ignoreExisting))
@@ -64,19 +77,19 @@ class DslScriptLoader {
6477
scheduleJobsToRun(jobParent.queueToBuild)
6578
}
6679

67-
return generatedItems
68-
} finally {
69-
if (engine?.groovyClassLoader instanceof Closeable) {
70-
((Closeable) engine.groovyClassLoader).close()
71-
}
72-
if (groovyClassLoader instanceof Closeable) {
73-
((Closeable) groovyClassLoader).close()
80+
} finally {
81+
if (engine?.groovyClassLoader instanceof Closeable) {
82+
((Closeable) engine.groovyClassLoader).close()
83+
}
7484
}
7585
}
86+
generatedItems
7687
}
7788

78-
private JobParent runScript(ScriptRequest scriptRequest, GroovyScriptEngine engine, Binding binding) {
89+
private JobParent runScript(ScriptRequest scriptRequest, GroovyScriptEngine engine) {
7990
LOGGER.log(Level.FINE, String.format("Request for ${scriptRequest.location}"))
91+
92+
Binding binding = createBinding()
8093
try {
8194
Script script
8295
if (scriptRequest.body != null) {

0 commit comments

Comments
 (0)