This is an automated email from the ASF dual-hosted git repository. Cole-Greer pushed a commit to branch docs-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit fde4e1e461828ff3c27fbae5bceca4b6adc5349c Author: Cole Greer <[email protected]> AuthorDate: Fri May 22 10:23:50 2026 -0700 Fix console startup failure handling and optimize CodeRay performance - Handle console startup timeout gracefully (skip block instead of crashing the build) - Cache CodeRay Duo encoder object in JRuby global variable - Use heredoc syntax for source input to avoid escaping issues - Build time reduced from 2.5 hours to under 2 minutes --- .../apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java b/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java index 82ab272fbd..6ec0766026 100644 --- a/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java +++ b/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java @@ -159,7 +159,8 @@ public class GremlinTreeprocessor extends Treeprocessor { resolvedExecutor = statement -> lazyConsole.execute(statement); LOG.info("GremlinConsole started successfully"); } catch (final IOException | GremlinConsole.ConsoleTimeoutException e) { - throw new RuntimeException("Failed to start GremlinConsole from: " + consoleHomePath, e); + LOG.warning("Failed to start GremlinConsole: " + e.getMessage()); + throw new ConsoleRestartedException("Console startup failed: " + e.getMessage()); } } @@ -319,9 +320,12 @@ public class GremlinTreeprocessor extends Treeprocessor { try { final org.jruby.Ruby ruby = org.asciidoctor.jruby.internal.JRubyRuntimeContext.get(parent); if (ruby == null) return escapeHtml(source); - ruby.evalScriptlet("require 'coderay' unless defined?(CodeRay)"); - final String escaped = source.replace("\\", "\\\\").replace("'", "\\'"); - final String script = "CodeRay::Duo[:" + lang + ", :html, :css => :class].highlight('" + escaped + "')"; + // Initialize CodeRay encoder once + ruby.evalScriptlet("require 'coderay' unless defined?(CodeRay); " + + "$tp_coderay_groovy ||= CodeRay::Duo[:groovy, :html, :css => :class]"); + // Use heredoc to avoid escaping issues + final String marker = "TPDOC" + System.identityHashCode(source); + final String script = "$tp_coderay_groovy.highlight(<<'" + marker + "'.chomp\n" + source + "\n" + marker + "\n)"; final org.jruby.runtime.builtin.IRubyObject result = ruby.evalScriptlet(script); return result != null ? result.asJavaString() : escapeHtml(source); } catch (final Exception e) {
