Skip to content

Commit

Permalink
Fix JENKINS-20078
Browse files Browse the repository at this point in the history
Added caching to the private macro lookup
  • Loading branch information
slide committed Mar 8, 2014
1 parent 39b82a9 commit 6dfefca
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions src/main/java/hudson/plugins/emailext/plugins/ContentBuilder.java
@@ -1,5 +1,6 @@
package hudson.plugins.emailext.plugins;

import hudson.CopyOnWrite;
import hudson.model.AbstractBuild;
import hudson.model.TaskListener;
import hudson.plugins.emailext.ExtendedEmailPublisher;
Expand All @@ -25,6 +26,9 @@
*
*/
public class ContentBuilder {

@CopyOnWrite
private static volatile List<TokenMacro> privateMacros;

private static final String DEFAULT_BODY = "\\$DEFAULT_CONTENT|\\$\\{DEFAULT_CONTENT\\}";
private static final String DEFAULT_SUBJECT = "\\$DEFAULT_SUBJECT|\\$\\{DEFAULT_SUBJECT\\}";
Expand Down Expand Up @@ -61,10 +65,10 @@ public String transformText(String origText, ExtendedEmailPublisherContext conte
DEFAULT_PRESEND_SCRIPT, defaultPresendScript);

try {
List<TokenMacro> privateMacros = getPrivateMacros();
List<TokenMacro> macros = new ArrayList<TokenMacro>(getPrivateMacros());
if(additionalMacros != null)
privateMacros.addAll(additionalMacros);
newText = TokenMacro.expandAll(context.getBuild(), context.getListener(), newText, false, privateMacros);
macros.addAll(additionalMacros);
newText = TokenMacro.expandAll(context.getBuild(), context.getListener(), newText, false, macros);
} catch (MacroEvaluationException e) {
context.getListener().getLogger().println("Error evaluating token: " + e.getMessage());
} catch (Exception e) {
Expand All @@ -80,15 +84,18 @@ public String transformText(String origText, ExtendedEmailPublisher publisher, A
}

public static List<TokenMacro> getPrivateMacros() {
List<TokenMacro> macros = new ArrayList<TokenMacro>();
if(privateMacros != null)
return privateMacros;

privateMacros = new ArrayList<TokenMacro>();
ClassLoader cl = Jenkins.getInstance().pluginManager.uberClassLoader;
for (final IndexItem<EmailToken, TokenMacro> item : Index.load(EmailToken.class, TokenMacro.class, cl)) {
try {
macros.add(item.instance());
privateMacros.add(item.instance());
} catch (Exception e) {
// ignore errors loading tokens
}
}
return macros;
return privateMacros;
}
}

0 comments on commit 6dfefca

Please sign in to comment.