Index: core/src/main/java/hudson/model/AbstractItem.java =================================================================== --- core/src/main/java/hudson/model/AbstractItem.java (revision 21263) +++ core/src/main/java/hudson/model/AbstractItem.java (working copy) @@ -166,7 +166,7 @@ } public String getShortUrl() { - return getParent().getUrlChildPrefix()+'/'+getName()+'/'; + return getParent().getUrlChildPrefix()+'/'+Util.rawEncode(getName())+'/'; } public String getSearchUrl() { Index: core/src/main/java/hudson/matrix/MatrixProject.java =================================================================== --- core/src/main/java/hudson/matrix/MatrixProject.java (revision 21263) +++ core/src/main/java/hudson/matrix/MatrixProject.java (working copy) @@ -81,6 +81,7 @@ import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.TokenList; import org.kohsuke.stapler.HttpResponse; /** @@ -326,7 +327,7 @@ for (File v : valuesDir) { Map<String,String> c = new HashMap<String, String>(combination); - c.put(axis,v.getName()); + c.put(axis,TokenList.decode(v.getName())); try { XmlFile config = Items.getConfigFile(v); @@ -443,7 +444,7 @@ public File getRootDirFor(Combination combination) { File f = getConfigurationsDir(); for (Entry<String, String> e : combination.entrySet()) - f = new File(f,"axis-"+e.getKey()+'/'+e.getValue()); + f = new File(f,"axis-"+e.getKey()+'/'+Util.rawEncode(e.getValue())); f.getParentFile().mkdirs(); return f; } Index: core/src/main/java/hudson/matrix/MatrixBuild.java =================================================================== --- core/src/main/java/hudson/matrix/MatrixBuild.java (revision 21263) +++ core/src/main/java/hudson/matrix/MatrixBuild.java (working copy) @@ -82,7 +82,15 @@ public final class RunPtr { public final Combination combination; private RunPtr(Combination c) { this.combination=c; } - public MatrixRun getRun() { return MatrixBuild.this.getRun(combination); } + + public MatrixRun getRun() { + return MatrixBuild.this.getRun(combination); + } + + public String getShortUrl() { + return Util.rawEncode(combination.toString()); + } + public String getTooltip() { MatrixRun r = getRun(); if(r!=null) return r.getIconColor().getDescription(); Index: core/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix.jelly =================================================================== --- core/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix.jelly (revision 21263) +++ core/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix.jelly (working copy) @@ -34,7 +34,7 @@ <img src="${imagesURL}/24x24/grey.gif" tooltip="${%Not run}" alt="${%Not run}"/> </j:when> <j:otherwise> - <a href="${p.combination}/"> + <a href="${p.shortUrl}/"> <img src="${imagesURL}/24x24/${b.buildStatusUrl}" tooltip="${p.tooltip}" alt="${p.tooltip}"/> <j:if test="${empty(o.x) and empty(o.y)}"> ${p.combination.toString(o.z)}