From 4c2de7ef43fd56b3f9f34701ee4378a7d5540abe Mon Sep 17 00:00:00 2001 From: Dawid Weiss Date: Wed, 24 Mar 2021 15:38:34 +0100 Subject: [PATCH] Correct soft task ordering between tidy and any other dependency of regenerate. --- gradle/generation/jflex.gradle | 2 +- gradle/generation/regenerate.gradle | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gradle/generation/jflex.gradle b/gradle/generation/jflex.gradle index f08d340af2d..8f6f5ca65ea 100644 --- a/gradle/generation/jflex.gradle +++ b/gradle/generation/jflex.gradle @@ -134,7 +134,7 @@ configure(project(":lucene:analysis:common")) { heapSize = "12g" doFirst { - logger.lifecycle("Regenerating UAX29URLEmailTokenizerImpl. This may take a long time (and requires tons of memory).") + logger.lifecycle("Regenerating UAX29URLEmailTokenizerImpl. This may take a long time (and requires ${heapSize} of memory!).") } doLast { diff --git a/gradle/generation/regenerate.gradle b/gradle/generation/regenerate.gradle index 322c27a73b2..6e3f29a4e44 100644 --- a/gradle/generation/regenerate.gradle +++ b/gradle/generation/regenerate.gradle @@ -30,12 +30,26 @@ configure([ group "generation" } - // Make sure tidy dependency runs after any other generation task. + // Make sure 'tidy' and its dependencies run after any other task in the dependencies + // of 'regenerate'. This ensures proper execution ordering so that tidy tasks run + // after whatever has been generated is complete. afterEvaluate { Set deps = regenerate.getTaskDependencies().getDependencies(regenerate) def tidy = deps.find { it.name == "tidy" } if (tidy) { - tidy.mustRunAfter (deps - [tidy]) + TaskDependency dep = tidy.taskDependencies + Set visited = new HashSet<>() + Queue queue = new ArrayDeque<>() + queue.add(tidy) + while (!queue.isEmpty()) { + Task t = queue.removeFirst() + if (visited.add(t)) { + queue.addAll(dep.getDependencies(t)) + } + } + + def otherDeps = deps - [tidy] + visited.each { Task t -> t.mustRunAfter(otherDeps) } } } } \ No newline at end of file