[jenkins] 01/01: Imported Upstream version 1.565.3+plugins
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Sat Oct 25 00:21:07 BST 2014
This is an automated email from the git hooks/post-receive script.
ebourg-guest pushed a commit to annotated tag upstream/1.565.3+plugins
in repository jenkins.
commit c10ff1378ae41fdb1f774f68414c4a70847b154e
Author: Emmanuel Bourg <ebourg at apache.org>
Date: Fri Oct 10 18:10:06 2014 +0200
Imported Upstream version 1.565.3+plugins
---
plugins/matrix-auth-plugin/.gitignore | 2 +
plugins/matrix-auth-plugin/pom.xml | 37 +
.../security/AuthorizationMatrixProperty.java | 324 +++++++
.../GlobalMatrixAuthorizationStrategy.java | 372 ++++++++
.../ProjectMatrixAuthorizationStrategy.java | 135 +++
.../AuthorizationMatrixProperty/config.jelly | 36 +
.../config_da.properties | 23 +
.../config_de.properties | 1 +
.../config_es.properties | 23 +
.../config_fr.properties | 23 +
.../config_ja.properties | 23 +
.../config_pt_BR.properties | 23 +
.../config_tr.properties | 23 +
.../config_zh_CN.properties | 1 +
.../config_zh_TW.properties | 23 +
.../help-blocksInheritance.html | 9 +
.../GlobalMatrixAuthorizationStrategy/config.jelly | 175 ++++
.../config_da.properties | 27 +
.../config_de.properties | 28 +
.../config_es.properties | 28 +
.../config_fi.properties | 23 +
.../config_fr.properties | 27 +
.../config_ja.properties | 29 +
.../config_nb_NO.properties | 26 +
.../config_nl.properties | 27 +
.../config_pt_BR.properties | 26 +
.../config_ru.properties | 28 +
.../config_sv_SE.properties | 28 +
.../config_tr.properties | 26 +
.../config_zh_CN.properties | 28 +
.../config_zh_TW.properties | 30 +
.../help-user-group.jelly | 13 +
.../help-user-group_ja.jelly | 11 +
.../help-user-group_zh_TW.jelly | 11 +
.../GlobalMatrixAuthorizationStrategy/help.html | 19 +
.../GlobalMatrixAuthorizationStrategy/help_de.html | 20 +
.../GlobalMatrixAuthorizationStrategy/help_fr.html | 26 +
.../GlobalMatrixAuthorizationStrategy/help_ja.html | 19 +
.../help_pt_BR.html | 20 +
.../GlobalMatrixAuthorizationStrategy/help_ru.html | 20 +
.../GlobalMatrixAuthorizationStrategy/help_tr.html | 19 +
.../help_zh_CN.html | 13 +
.../help_zh_TW.html | 15 +
.../ProjectMatrixAuthorizationStrategy/help.html | 11 +
.../help_de.html | 13 +
.../help_ja.html | 10 +
.../help_zh_CN.html | 9 +
.../help_zh_TW.html | 11 +
.../src/main/resources/hudson/security/table.css | 60 ++
.../src/main/resources/index.jelly | 3 +
.../plugins/matrixauth/Messages.properties | 24 +
.../plugins/matrixauth/Messages_da.properties | 24 +
.../plugins/matrixauth/Messages_de.properties | 24 +
.../plugins/matrixauth/Messages_es.properties | 24 +
.../plugins/matrixauth/Messages_fr.properties | 24 +
.../plugins/matrixauth/Messages_ja.properties | 24 +
.../plugins/matrixauth/Messages_nl.properties | 23 +
.../plugins/matrixauth/Messages_pt_BR.properties | 23 +
.../plugins/matrixauth/Messages_ru.properties | 23 +
.../plugins/matrixauth/Messages_tr.properties | 23 +
.../plugins/matrixauth/Messages_zh_CN.properties | 24 +
.../plugins/matrixauth/Messages_zh_TW.properties | 24 +
plugins/matrix-project-plugin/.gitignore | 2 +
plugins/matrix-project-plugin/pom.xml | 94 ++
.../src/main/java/hudson/matrix/Axis.java | 265 ++++++
.../main/java/hudson/matrix/AxisDescriptor.java | 67 ++
.../src/main/java/hudson/matrix/AxisList.java | 108 +++
.../src/main/java/hudson/matrix/Combination.java | 265 ++++++
.../java/hudson/matrix/DefaultAxisDescriptor.java | 48 +
.../matrix/DefaultMatrixExecutionStrategyImpl.java | 303 +++++++
.../src/main/java/hudson/matrix/FilterScript.java | 136 +++
.../src/main/java/hudson/matrix/JDKAxis.java | 72 ++
.../src/main/java/hudson/matrix/LabelAxis.java | 85 ++
.../src/main/java/hudson/matrix/LabelExpAxis.java | 97 ++
.../src/main/java/hudson/matrix/Layouter.java | 225 +++++
.../main/java/hudson/matrix/LinkedLogRotator.java | 77 ++
.../java/hudson/matrix/MatrixAggregatable.java | 69 ++
.../main/java/hudson/matrix/MatrixAggregator.java | 105 +++
.../src/main/java/hudson/matrix/MatrixBuild.java | 410 +++++++++
.../main/java/hudson/matrix/MatrixChildAction.java | 39 +
.../java/hudson/matrix/MatrixConfiguration.java | 432 +++++++++
.../hudson/matrix/MatrixConfigurationSorter.java | 36 +
.../MatrixConfigurationSorterDescriptor.java | 27 +
.../hudson/matrix/MatrixExecutionStrategy.java | 60 ++
.../matrix/MatrixExecutionStrategyDescriptor.java | 48 +
.../src/main/java/hudson/matrix/MatrixProject.java | 988 +++++++++++++++++++++
.../src/main/java/hudson/matrix/MatrixRun.java | 186 ++++
.../matrix/NoopMatrixConfigurationSorter.java | 33 +
.../src/main/java/hudson/matrix/TextAxis.java | 34 +
.../matrix/listeners/MatrixBuildListener.java | 84 ++
.../src/main/java/hudson/matrix/package.html | 27 +
.../java/hudson/tasks/test/MatrixTestResult.java | 77 ++
.../hudson/tasks/test/TestResultAggregator.java | 60 ++
.../config.groovy | 28 +
.../config.properties | 24 +
.../config_da.properties | 29 +
.../config_de.properties | 30 +
.../config_ja.properties | 31 +
.../config_pt_BR.properties | 29 +
.../config_zh_TW.properties | 31 +
.../help-hasTouchStoneCombinationFilter.html | 5 +
.../help-hasTouchStoneCombinationFilter_de.html | 10 +
.../help-hasTouchStoneCombinationFilter_ja.html | 5 +
.../help-hasTouchStoneCombinationFilter_zh_TW.html | 5 +
.../help-runSequentially.html | 5 +
.../help-runSequentially_de.html | 6 +
.../help-runSequentially_ja.html | 4 +
.../help-runSequentially_zh_TW.html | 4 +
.../resources/hudson/matrix/JDKAxis/config.jelly | 33 +
.../resources/hudson/matrix/LabelAxis/config.jelly | 66 ++
.../hudson/matrix/LabelAxis/config_da.properties | 26 +
.../hudson/matrix/LabelAxis/config_de.properties | 26 +
.../hudson/matrix/LabelAxis/config_es.properties | 26 +
.../hudson/matrix/LabelAxis/config_ja.properties | 26 +
.../hudson/matrix/LabelAxis/config_pt.properties | 27 +
.../matrix/LabelAxis/config_zh_TW.properties | 26 +
.../hudson/matrix/LabelAxis/help-labels.html | 27 +
.../hudson/matrix/LabelAxis/help-labels_de.html | 30 +
.../hudson/matrix/LabelAxis/help-labels_fr.html | 34 +
.../hudson/matrix/LabelAxis/help-labels_ja.html | 23 +
.../hudson/matrix/LabelAxis/help-labels_nl.html | 15 +
.../hudson/matrix/LabelAxis/help-labels_pt_BR.html | 27 +
.../hudson/matrix/LabelAxis/help-labels_ru.html | 28 +
.../hudson/matrix/LabelAxis/help-labels_tr.html | 26 +
.../hudson/matrix/LabelAxis/help-labels_zh_TW.html | 21 +
.../resources/hudson/matrix/LabelAxis/help.html | 5 +
.../hudson/matrix/LabelAxis/help_zh_TW.html | 4 +
.../hudson/matrix/LabelExpAxis/config.jelly | 32 +
.../matrix/LabelExpAxis/config_es.properties | 24 +
.../matrix/LabelExpAxis/config_ja.properties | 25 +
.../matrix/LabelExpAxis/config_pt.properties | 25 +
.../matrix/LabelExpAxis/config_zh_TW.properties | 24 +
.../hudson/matrix/LabelExpAxis/help-labelExpr.html | 4 +
.../matrix/LabelExpAxis/help-labelExpr_ja.html | 4 +
.../matrix/LabelExpAxis/help-labelExpr_zh_TW.html | 4 +
.../resources/hudson/matrix/LabelExpAxis/help.html | 4 +
.../hudson/matrix/LabelExpAxis/help_ja.html | 4 +
.../hudson/matrix/LabelExpAxis/help_zh_TW.html | 4 +
.../hudson/matrix/MatrixBuild/ajaxMatrix.jelly | 48 +
.../matrix/MatrixBuild/ajaxMatrix_da.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_de.properties | 1 +
.../matrix/MatrixBuild/ajaxMatrix_es.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_fr.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_it.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_ja.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_nl.properties | 3 +
.../matrix/MatrixBuild/ajaxMatrix_pt.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_pt_BR.properties | 23 +
.../matrix/MatrixBuild/ajaxMatrix_ru.properties | 4 +
.../matrix/MatrixBuild/ajaxMatrix_zh_TW.properties | 23 +
.../matrix/MatrixBuild/confirmDeleteAll.jelly | 43 +
.../matrix/MatrixBuild/confirmDeleteAll.properties | 23 +
.../MatrixBuild/confirmDeleteAll_de.properties | 25 +
.../MatrixBuild/confirmDeleteAll_es.properties | 26 +
.../MatrixBuild/confirmDeleteAll_ja.properties | 27 +
.../MatrixBuild/confirmDeleteAll_pt.properties | 27 +
.../MatrixBuild/confirmDeleteAll_ru.properties | 4 +
.../MatrixBuild/confirmDeleteAll_zh_TW.properties | 25 +
.../hudson/matrix/MatrixBuild/delete.jelly | 34 +
.../hudson/matrix/MatrixBuild/delete_ca.properties | 3 +
.../hudson/matrix/MatrixBuild/delete_cs.properties | 4 +
.../hudson/matrix/MatrixBuild/delete_de.properties | 24 +
.../hudson/matrix/MatrixBuild/delete_es.properties | 24 +
.../hudson/matrix/MatrixBuild/delete_ja.properties | 25 +
.../hudson/matrix/MatrixBuild/delete_ko.properties | 4 +
.../hudson/matrix/MatrixBuild/delete_pl.properties | 4 +
.../hudson/matrix/MatrixBuild/delete_pt.properties | 25 +
.../matrix/MatrixBuild/delete_pt_BR.properties | 5 +
.../hudson/matrix/MatrixBuild/delete_ru.properties | 4 +
.../matrix/MatrixBuild/delete_zh_CN.properties | 4 +
.../matrix/MatrixBuild/delete_zh_TW.properties | 24 +
.../resources/hudson/matrix/MatrixBuild/main.jelly | 28 +
.../matrix/MatrixConfigurationSorter/config.groovy | 1 +
.../hudson/matrix/MatrixProject/ajaxMatrix.jelly | 47 +
.../matrix/MatrixProject/ajaxMatrix_da.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_de.properties | 1 +
.../matrix/MatrixProject/ajaxMatrix_es.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_fi.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_fr.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_it.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_ja.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_pl.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_pt.properties | 24 +
.../MatrixProject/ajaxMatrix_pt_BR.properties | 23 +
.../matrix/MatrixProject/ajaxMatrix_ro.properties | 3 +
.../matrix/MatrixProject/ajaxMatrix_ru.properties | 3 +
.../MatrixProject/ajaxMatrix_sv_SE.properties | 3 +
.../MatrixProject/ajaxMatrix_zh_CN.properties | 23 +
.../MatrixProject/ajaxMatrix_zh_TW.properties | 23 +
.../matrix/MatrixProject/configure-entries.jelly | 97 ++
.../MatrixProject/configure-entries_da.properties | 27 +
.../MatrixProject/configure-entries_de.properties | 30 +
.../MatrixProject/configure-entries_es.properties | 32 +
.../MatrixProject/configure-entries_fr.properties | 35 +
.../MatrixProject/configure-entries_ja.properties | 33 +
.../MatrixProject/configure-entries_ko.properties | 6 +
.../MatrixProject/configure-entries_nl.properties | 31 +
.../MatrixProject/configure-entries_pt.properties | 33 +
.../configure-entries_pt_BR.properties | 38 +
.../MatrixProject/configure-entries_ru.properties | 33 +
.../MatrixProject/configure-entries_sk.properties | 5 +
.../configure-entries_sv_SE.properties | 5 +
.../MatrixProject/configure-entries_tr.properties | 35 +
.../configure-entries_zh_TW.properties | 32 +
.../MatrixProject/help-childCustomWorkspace.html | 28 +
.../help-childCustomWorkspace_zh_TW.html | 24 +
.../matrix/MatrixProject/help-slaveAffinity.html | 9 +
.../hudson/matrix/MatrixProject/index.jelly | 62 ++
.../matrix/MatrixProject/index_ar.properties | 3 +
.../matrix/MatrixProject/index_cs.properties | 23 +
.../matrix/MatrixProject/index_da.properties | 23 +
.../matrix/MatrixProject/index_de.properties | 24 +
.../matrix/MatrixProject/index_es.properties | 25 +
.../matrix/MatrixProject/index_fi.properties | 23 +
.../matrix/MatrixProject/index_fr.properties | 24 +
.../matrix/MatrixProject/index_he.properties | 4 +
.../matrix/MatrixProject/index_hu.properties | 3 +
.../matrix/MatrixProject/index_it.properties | 23 +
.../matrix/MatrixProject/index_ja.properties | 25 +
.../matrix/MatrixProject/index_ko.properties | 4 +
.../matrix/MatrixProject/index_nl.properties | 23 +
.../matrix/MatrixProject/index_pl.properties | 23 +
.../matrix/MatrixProject/index_pt.properties | 26 +
.../matrix/MatrixProject/index_pt_BR.properties | 25 +
.../matrix/MatrixProject/index_ro.properties | 4 +
.../matrix/MatrixProject/index_ru.properties | 24 +
.../matrix/MatrixProject/index_sv_SE.properties | 4 +
.../matrix/MatrixProject/index_tr.properties | 23 +
.../matrix/MatrixProject/index_uk.properties | 4 +
.../matrix/MatrixProject/index_zh_CN.properties | 23 +
.../matrix/MatrixProject/index_zh_TW.properties | 26 +
.../hudson/matrix/MatrixProject/newJobDetail.jelly | 28 +
.../matrix/MatrixProject/newJobDetail.properties | 25 +
.../MatrixProject/newJobDetail_ar.properties | 3 +
.../MatrixProject/newJobDetail_da.properties | 23 +
.../MatrixProject/newJobDetail_de.properties | 27 +
.../MatrixProject/newJobDetail_es.properties | 26 +
.../MatrixProject/newJobDetail_et.properties | 3 +
.../MatrixProject/newJobDetail_fi.properties | 3 +
.../MatrixProject/newJobDetail_fr.properties | 26 +
.../MatrixProject/newJobDetail_hi_IN.properties | 3 +
.../MatrixProject/newJobDetail_it.properties | 23 +
.../MatrixProject/newJobDetail_ja.properties | 24 +
.../MatrixProject/newJobDetail_ko.properties | 23 +
.../MatrixProject/newJobDetail_nb_NO.properties | 23 +
.../MatrixProject/newJobDetail_nl.properties | 23 +
.../MatrixProject/newJobDetail_pl.properties | 23 +
.../MatrixProject/newJobDetail_pt.properties | 26 +
.../MatrixProject/newJobDetail_pt_BR.properties | 23 +
.../MatrixProject/newJobDetail_ru.properties | 23 +
.../MatrixProject/newJobDetail_sv_SE.properties | 23 +
.../MatrixProject/newJobDetail_tr.properties | 23 +
.../MatrixProject/newJobDetail_uk.properties | 3 +
.../MatrixProject/newJobDetail_zh_CN.properties | 23 +
.../MatrixProject/newJobDetail_zh_TW.properties | 24 +
.../resources/hudson/matrix/Messages.properties | 41 +
.../resources/hudson/matrix/Messages_da.properties | 33 +
.../resources/hudson/matrix/Messages_de.properties | 40 +
.../resources/hudson/matrix/Messages_es.properties | 39 +
.../resources/hudson/matrix/Messages_fr.properties | 30 +
.../resources/hudson/matrix/Messages_ja.properties | 40 +
.../resources/hudson/matrix/Messages_nl.properties | 31 +
.../resources/hudson/matrix/Messages_pt.properties | 40 +
.../hudson/matrix/Messages_pt_BR.properties | 42 +
.../resources/hudson/matrix/Messages_ru.properties | 30 +
.../resources/hudson/matrix/Messages_tr.properties | 31 +
.../hudson/matrix/Messages_zh_CN.properties | 37 +
.../hudson/matrix/Messages_zh_TW.properties | 39 +
.../resources/hudson/matrix/TextAxis/config.jelly | 32 +
.../hudson/matrix/TextAxis/config_da.properties | 24 +
.../hudson/matrix/TextAxis/config_de.properties | 24 +
.../hudson/matrix/TextAxis/config_es.properties | 24 +
.../hudson/matrix/TextAxis/config_ja.properties | 24 +
.../hudson/matrix/TextAxis/config_pt.properties | 24 +
.../hudson/matrix/TextAxis/config_zh_TW.properties | 24 +
.../hudson/matrix/TextAxis/help-valueString.html | 4 +
.../matrix/TextAxis/help-valueString_de.html | 5 +
.../matrix/TextAxis/help-valueString_fr.html | 4 +
.../matrix/TextAxis/help-valueString_ja.html | 4 +
.../matrix/TextAxis/help-valueString_nl.html | 3 +
.../matrix/TextAxis/help-valueString_pt_BR.html | 3 +
.../matrix/TextAxis/help-valueString_ru.html | 3 +
.../matrix/TextAxis/help-valueString_tr.html | 3 +
.../matrix/TextAxis/help-valueString_zh_TW.html | 4 +
.../hudson/tasks/test/MatrixTestResult/index.jelly | 72 ++
.../src/main/resources/index.jelly | 29 +
.../lib/hudson/matrix-project/matrix.jelly | 103 +++
.../lib/hudson/matrix-project/matrix_ar.properties | 3 +
.../lib/hudson/matrix-project/matrix_cs.properties | 23 +
.../lib/hudson/matrix-project/matrix_da.properties | 24 +
.../lib/hudson/matrix-project/matrix_de.properties | 24 +
.../lib/hudson/matrix-project/matrix_es.properties | 24 +
.../lib/hudson/matrix-project/matrix_fi.properties | 23 +
.../lib/hudson/matrix-project/matrix_fr.properties | 24 +
.../lib/hudson/matrix-project/matrix_he.properties | 3 +
.../lib/hudson/matrix-project/matrix_it.properties | 23 +
.../lib/hudson/matrix-project/matrix_ja.properties | 24 +
.../lib/hudson/matrix-project/matrix_ko.properties | 3 +
.../lib/hudson/matrix-project/matrix_nl.properties | 24 +
.../lib/hudson/matrix-project/matrix_pl.properties | 24 +
.../hudson/matrix-project/matrix_pt_BR.properties | 24 +
.../hudson/matrix-project/matrix_pt_PT.properties | 23 +
.../lib/hudson/matrix-project/matrix_ro.properties | 3 +
.../lib/hudson/matrix-project/matrix_ru.properties | 24 +
.../hudson/matrix-project/matrix_sv_SE.properties | 4 +
.../lib/hudson/matrix-project/matrix_tr.properties | 24 +
.../lib/hudson/matrix-project/matrix_uk.properties | 3 +
.../hudson/matrix-project/matrix_zh_CN.properties | 23 +
.../hudson/matrix-project/matrix_zh_TW.properties | 24 +
.../resources/lib/hudson/matrix-project/taglib | 0
.../src/main/webapp/help/matrix/axes.html | 22 +
.../src/main/webapp/help/matrix/axes_de.html | 24 +
.../src/main/webapp/help/matrix/axes_fr.html | 30 +
.../src/main/webapp/help/matrix/axes_ja.html | 21 +
.../src/main/webapp/help/matrix/axes_nl.html | 15 +
.../src/main/webapp/help/matrix/axes_pt_BR.html | 22 +
.../src/main/webapp/help/matrix/axes_ru.html | 24 +
.../src/main/webapp/help/matrix/axes_tr.html | 20 +
.../src/main/webapp/help/matrix/axes_zh_TW.html | 21 +
.../main/webapp/help/matrix/combinationfilter.html | 54 ++
.../webapp/help/matrix/combinationfilter_de.html | 55 ++
.../webapp/help/matrix/combinationfilter_fr.html | 54 ++
.../webapp/help/matrix/combinationfilter_ja.html | 49 +
.../help/matrix/combinationfilter_zh_TW.html | 47 +
.../src/main/webapp/help/matrix/jdk.html | 12 +
.../src/main/webapp/help/matrix/jdk_de.html | 15 +
.../src/main/webapp/help/matrix/jdk_fr.html | 15 +
.../src/main/webapp/help/matrix/jdk_ja.html | 10 +
.../src/main/webapp/help/matrix/jdk_nl.html | 8 +
.../src/main/webapp/help/matrix/jdk_pt_BR.html | 12 +
.../src/main/webapp/help/matrix/jdk_ru.html | 13 +
.../src/main/webapp/help/matrix/jdk_tr.html | 11 +
.../src/main/webapp/help/matrix/jdk_zh_TW.html | 10 +
.../matrix/MatrixProjectCustomWorkspaceTest.groovy | 147 +++
.../groovy/hudson/matrix/MatrixProjectTest.groovy | 522 +++++++++++
.../CombinationFilterUsingBuildParamsTest.java | 304 +++++++
.../test/java/hudson/matrix/CombinationTest.java | 62 ++
.../matrix/MatrixConfigurationSorterTest.java | 48 +
.../hudson/matrix/MatrixProjectDependencyTest.java | 41 +
.../src/test/java/hudson/matrix/MatrixRunTest.java | 55 ++
.../src/test/java/hudson/matrix/MatrixTest.java | 76 ++
.../MatrixProjectTest/testUpgrade/config.xml | 1 +
.../testUpgrade/jobs/x/config.xml | 19 +
.../test/resources/hudson/matrix/echo-property.pom | 70 ++
.../src/test/resources/hudson/matrix/runMatrix.xml | 39 +
345 files changed, 13370 insertions(+)
diff --git a/plugins/matrix-auth-plugin/.gitignore b/plugins/matrix-auth-plugin/.gitignore
new file mode 100644
index 0000000..37cf854
--- /dev/null
+++ b/plugins/matrix-auth-plugin/.gitignore
@@ -0,0 +1,2 @@
+target
+work
diff --git a/plugins/matrix-auth-plugin/pom.xml b/plugins/matrix-auth-plugin/pom.xml
new file mode 100644
index 0000000..a9f1da1
--- /dev/null
+++ b/plugins/matrix-auth-plugin/pom.xml
@@ -0,0 +1,37 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.jenkins-ci.plugins</groupId>
+ <artifactId>plugin</artifactId>
+ <version>1.535</version>
+ </parent>
+ <artifactId>matrix-auth</artifactId>
+ <version>1.2</version>
+ <packaging>hpi</packaging>
+ <name>Matrix Authorization Strategy Plugin</name>
+ <description>Offers matrix-based security authorization strategies (global and per-project).</description>
+ <url>http://wiki.jenkins-ci.org/display/JENKINS/Matrix+Authorization+Strategy+Plugin</url>
+ <licenses>
+ <license>
+ <name>MIT</name>
+ <url>http://www.opensource.org/licenses/mit-license.php</url>
+ </license>
+ </licenses>
+ <scm>
+ <connection>scm:git:git://github.com/jenkinsci/${project.artifactId}-plugin.git</connection>
+ <developerConnection>scm:git:git at github.com:jenkinsci/${project.artifactId}-plugin.git</developerConnection>
+ <url>https://github.com/jenkinsci/${project.artifactId}-plugin</url>
+ </scm>
+ <repositories>
+ <repository>
+ <id>repo.jenkins-ci.org</id>
+ <url>http://repo.jenkins-ci.org/public/</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>repo.jenkins-ci.org</id>
+ <url>http://repo.jenkins-ci.org/public/</url>
+ </pluginRepository>
+ </pluginRepositories>
+</project>
diff --git a/plugins/matrix-auth-plugin/src/main/java/hudson/security/AuthorizationMatrixProperty.java b/plugins/matrix-auth-plugin/src/main/java/hudson/security/AuthorizationMatrixProperty.java
new file mode 100644
index 0000000..4c68737
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/java/hudson/security/AuthorizationMatrixProperty.java
@@ -0,0 +1,324 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc., Peter Hayes, Tom Huybrechts
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.security;
+
+import hudson.diagnosis.OldDataMonitor;
+import hudson.model.Item;
+import hudson.model.Job;
+import hudson.model.JobProperty;
+import hudson.model.JobPropertyDescriptor;
+import jenkins.model.Jenkins;
+import hudson.Extension;
+import hudson.util.FormValidation;
+import hudson.util.RobustReflectionConverter;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.io.IOException;
+
+import net.sf.json.JSONObject;
+
+import org.acegisecurity.acls.sid.Sid;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.QueryParameter;
+import org.kohsuke.stapler.AncestorInPath;
+
+import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+
+import javax.servlet.ServletException;
+
+/**
+ * {@link JobProperty} to associate ACL for each project.
+ *
+ * <p>
+ * Once created (and initialized), this object becomes immutable.
+ */
+public class AuthorizationMatrixProperty extends JobProperty<Job<?, ?>> {
+
+ private transient SidACL acl = new AclImpl();
+
+ /**
+ * List up all permissions that are granted.
+ *
+ * Strings are either the granted authority or the principal, which is not
+ * distinguished.
+ */
+ private final Map<Permission, Set<String>> grantedPermissions = new HashMap<Permission, Set<String>>();
+
+ private Set<String> sids = new HashSet<String>();
+
+ private boolean blocksInheritance = false;
+
+ private AuthorizationMatrixProperty() {
+ }
+
+ public AuthorizationMatrixProperty(Map<Permission, Set<String>> grantedPermissions) {
+ // do a deep copy to be safe
+ for (Entry<Permission,Set<String>> e : grantedPermissions.entrySet())
+ this.grantedPermissions.put(e.getKey(),new HashSet<String>(e.getValue()));
+ }
+
+ public Set<String> getGroups() {
+ return sids;
+ }
+
+ /**
+ * Returns all SIDs configured in this matrix, minus "anonymous"
+ *
+ * @return Always non-null.
+ */
+ public List<String> getAllSIDs() {
+ Set<String> r = new HashSet<String>();
+ for (Set<String> set : grantedPermissions.values())
+ r.addAll(set);
+ r.remove("anonymous");
+
+ String[] data = r.toArray(new String[r.size()]);
+ Arrays.sort(data);
+ return Arrays.asList(data);
+ }
+
+ /**
+ * Returns all the (Permission,sid) pairs that are granted, in the multi-map form.
+ *
+ * @return
+ * read-only. never null.
+ */
+ public Map<Permission,Set<String>> getGrantedPermissions() {
+ return Collections.unmodifiableMap(grantedPermissions);
+ }
+
+ /**
+ * Adds to {@link #grantedPermissions}. Use of this method should be limited
+ * during construction, as this object itself is considered immutable once
+ * populated.
+ */
+ protected void add(Permission p, String sid) {
+ Set<String> set = grantedPermissions.get(p);
+ if (set == null)
+ grantedPermissions.put(p, set = new HashSet<String>());
+ set.add(sid);
+ sids.add(sid);
+ }
+
+ @Extension
+ public static class DescriptorImpl extends JobPropertyDescriptor {
+ @Override
+ public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
+ formData = formData.getJSONObject("useProjectSecurity");
+ if (formData.isNullObject())
+ return null;
+
+ AuthorizationMatrixProperty amp = new AuthorizationMatrixProperty();
+
+ // Disable inheritance, if so configured
+ amp.setBlocksInheritance(!formData.getJSONObject("blocksInheritance").isNullObject());
+
+ for (Map.Entry<String, Object> r : (Set<Map.Entry<String, Object>>) formData.getJSONObject("data").entrySet()) {
+ String sid = r.getKey();
+ if (r.getValue() instanceof JSONObject) {
+ for (Map.Entry<String, Boolean> e : (Set<Map.Entry<String, Boolean>>) ((JSONObject) r
+ .getValue()).entrySet()) {
+ if (e.getValue()) {
+ Permission p = Permission.fromId(e.getKey());
+ amp.add(p, sid);
+ }
+ }
+ }
+ }
+ return amp;
+ }
+
+ @Override
+ public boolean isApplicable(Class<? extends Job> jobType) {
+ // only applicable when ProjectMatrixAuthorizationStrategy is in charge
+ return Jenkins.getInstance().getAuthorizationStrategy() instanceof ProjectMatrixAuthorizationStrategy;
+ }
+
+ @Override
+ public String getDisplayName() {
+ return "Authorization Matrix";
+ }
+
+ public List<PermissionGroup> getAllGroups() {
+ List<PermissionGroup> r = new ArrayList<PermissionGroup>();
+ for (PermissionGroup pg : PermissionGroup.getAll()) {
+ if (pg.hasPermissionContainedBy(PermissionScope.ITEM))
+ r.add(pg);
+ }
+ return r;
+ }
+
+ public boolean showPermission(Permission p) {
+ return p.getEnabled() && p.isContainedBy(PermissionScope.ITEM);
+ }
+
+ public FormValidation doCheckName(@AncestorInPath Job project, @QueryParameter String value) throws IOException, ServletException {
+ return GlobalMatrixAuthorizationStrategy.DESCRIPTOR.doCheckName_(value, project, Item.CONFIGURE);
+ }
+ }
+
+ private final class AclImpl extends SidACL {
+ protected Boolean hasPermission(Sid sid, Permission p) {
+ if (AuthorizationMatrixProperty.this.hasPermission(toString(sid),p))
+ return true;
+ return null;
+ }
+ }
+
+ public SidACL getACL() {
+ return acl;
+ }
+
+ /**
+ * Sets the flag to block inheritance
+ *
+ * @param blocksInheritance
+ */
+ private void setBlocksInheritance(boolean blocksInheritance) {
+ this.blocksInheritance = blocksInheritance;
+ }
+
+ /**
+ * Returns true if the authorization matrix is configured to block
+ * inheritance from the parent.
+ *
+ * @return
+ */
+ public boolean isBlocksInheritance() {
+ return this.blocksInheritance;
+ }
+
+ /**
+ * Checks if the given SID has the given permission.
+ */
+ public boolean hasPermission(String sid, Permission p) {
+ for (; p != null; p = p.impliedBy) {
+ Set<String> set = grantedPermissions.get(p);
+ if (set != null && set.contains(sid))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the permission is explicitly given, instead of implied through {@link Permission#impliedBy}.
+ */
+ public boolean hasExplicitPermission(String sid, Permission p) {
+ Set<String> set = grantedPermissions.get(p);
+ return set != null && set.contains(sid);
+ }
+
+ /**
+ * Works like {@link #add(Permission, String)} but takes both parameters
+ * from a single string of the form <tt>PERMISSIONID:sid</tt>
+ */
+ private void add(String shortForm) {
+ int idx = shortForm.indexOf(':');
+ Permission p = Permission.fromId(shortForm.substring(0, idx));
+ if (p==null)
+ throw new IllegalArgumentException("Failed to parse '"+shortForm+"' --- no such permission");
+ add(p, shortForm.substring(idx + 1));
+ }
+
+ /**
+ * Persist {@link ProjectMatrixAuthorizationStrategy} as a list of IDs that
+ * represent {@link ProjectMatrixAuthorizationStrategy#grantedPermissions}.
+ */
+ public static final class ConverterImpl implements Converter {
+ public boolean canConvert(Class type) {
+ return type == AuthorizationMatrixProperty.class;
+ }
+
+ public void marshal(Object source, HierarchicalStreamWriter writer,
+ MarshallingContext context) {
+ AuthorizationMatrixProperty amp = (AuthorizationMatrixProperty) source;
+
+ if (amp.isBlocksInheritance()) {
+ writer.startNode("blocksInheritance");
+ writer.setValue("true");
+ writer.endNode();
+ }
+
+ for (Entry<Permission, Set<String>> e : amp.grantedPermissions
+ .entrySet()) {
+ String p = e.getKey().getId();
+ for (String sid : e.getValue()) {
+ writer.startNode("permission");
+ writer.setValue(p + ':' + sid);
+ writer.endNode();
+ }
+ }
+ }
+
+ public Object unmarshal(HierarchicalStreamReader reader,
+ final UnmarshallingContext context) {
+ AuthorizationMatrixProperty as = new AuthorizationMatrixProperty();
+
+ String prop = reader.peekNextChild();
+
+ if (prop!=null && prop.equals("useProjectSecurity")) {
+ reader.moveDown();
+ reader.getValue(); // we used to use this but not any more.
+ reader.moveUp();
+ prop = reader.peekNextChild();
+ }
+ else if ("blocksInheritance".equals(prop)) {
+ reader.moveDown();
+ as.setBlocksInheritance("true".equals(reader.getValue()));
+ reader.moveUp();
+ }
+
+ while (reader.hasMoreChildren()) {
+ reader.moveDown();
+ try {
+ as.add(reader.getValue());
+ } catch (IllegalArgumentException ex) {
+ Logger.getLogger(AuthorizationMatrixProperty.class.getName())
+ .log(Level.WARNING,"Skipping a non-existent permission",ex);
+ RobustReflectionConverter.addErrorInContext(context, ex);
+ }
+ reader.moveUp();
+ }
+
+ if (GlobalMatrixAuthorizationStrategy.migrateHudson2324(as.grantedPermissions))
+ OldDataMonitor.report(context, "1.301");
+
+ return as;
+ }
+ }
+}
diff --git a/plugins/matrix-auth-plugin/src/main/java/hudson/security/GlobalMatrixAuthorizationStrategy.java b/plugins/matrix-auth-plugin/src/main/java/hudson/security/GlobalMatrixAuthorizationStrategy.java
new file mode 100644
index 0000000..fad49fd
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/java/hudson/security/GlobalMatrixAuthorizationStrategy.java
@@ -0,0 +1,372 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.security;
+
+import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import hudson.diagnosis.OldDataMonitor;
+import hudson.model.Descriptor;
+import jenkins.model.Jenkins;
+import hudson.model.Item;
+import hudson.util.FormValidation;
+import hudson.util.FormValidation.Kind;
+import hudson.util.VersionNumber;
+import hudson.util.RobustReflectionConverter;
+import hudson.Functions;
+import hudson.Extension;
+import hudson.model.User;
+import net.sf.json.JSONObject;
+import org.acegisecurity.AuthenticationException;
+import org.acegisecurity.userdetails.UsernameNotFoundException;
+import org.acegisecurity.acls.sid.Sid;
+import org.jenkinsci.plugins.matrixauth.Messages;
+import org.kohsuke.stapler.Stapler;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.QueryParameter;
+import org.springframework.dao.DataAccessException;
+
+import javax.servlet.ServletException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Role-based authorization via a matrix.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+// TODO: think about the concurrency commitment of this class
+public class GlobalMatrixAuthorizationStrategy extends AuthorizationStrategy {
+ private transient SidACL acl = new AclImpl();
+
+ /**
+ * List up all permissions that are granted.
+ *
+ * Strings are either the granted authority or the principal,
+ * which is not distinguished.
+ */
+ private final Map<Permission,Set<String>> grantedPermissions = new HashMap<Permission, Set<String>>();
+
+ private final Set<String> sids = new HashSet<String>();
+
+ /**
+ * Adds to {@link #grantedPermissions}.
+ * Use of this method should be limited during construction,
+ * as this object itself is considered immutable once populated.
+ */
+ public void add(Permission p, String sid) {
+ if (p==null)
+ throw new IllegalArgumentException();
+ Set<String> set = grantedPermissions.get(p);
+ if(set==null)
+ grantedPermissions.put(p,set = new HashSet<String>());
+ set.add(sid);
+ sids.add(sid);
+ }
+
+ /**
+ * Works like {@link #add(Permission, String)} but takes both parameters
+ * from a single string of the form <tt>PERMISSIONID:sid</tt>
+ */
+ private void add(String shortForm) {
+ int idx = shortForm.indexOf(':');
+ Permission p = Permission.fromId(shortForm.substring(0, idx));
+ if (p==null)
+ throw new IllegalArgumentException("Failed to parse '"+shortForm+"' --- no such permission");
+ add(p,shortForm.substring(idx+1));
+ }
+
+ @Override
+ public SidACL getRootACL() {
+ return acl;
+ }
+
+ public Set<String> getGroups() {
+ return sids;
+ }
+
+ /**
+ * Due to HUDSON-2324, we want to inject Item.READ permission to everyone who has Hudson.READ,
+ * to remain backward compatible.
+ * @param grantedPermissions
+ */
+ /*package*/ static boolean migrateHudson2324(Map<Permission,Set<String>> grantedPermissions) {
+ boolean result = false;
+ if(Jenkins.getInstance().isUpgradedFromBefore(new VersionNumber("1.300.*"))) {
+ Set<String> f = grantedPermissions.get(Jenkins.READ);
+ if (f!=null) {
+ Set<String> t = grantedPermissions.get(Item.READ);
+ if (t!=null)
+ result = t.addAll(f);
+ else {
+ t = new HashSet<String>(f);
+ result = true;
+ }
+ grantedPermissions.put(Item.READ,t);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Checks if the given SID has the given permission.
+ */
+ public boolean hasPermission(String sid, Permission p) {
+ for(; p!=null; p=p.impliedBy) {
+ Set<String> set = grantedPermissions.get(p);
+ if(set!=null && set.contains(sid) && p.getEnabled())
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the permission is explicitly given, instead of implied through {@link Permission#impliedBy}.
+ */
+ public boolean hasExplicitPermission(String sid, Permission p) {
+ Set<String> set = grantedPermissions.get(p);
+ return set != null && set.contains(sid) && p.getEnabled();
+ }
+
+ /**
+ * Returns all SIDs configured in this matrix, minus "anonymous"
+ *
+ * @return
+ * Always non-null.
+ */
+ public List<String> getAllSIDs() {
+ Set<String> r = new HashSet<String>();
+ for (Set<String> set : grantedPermissions.values())
+ r.addAll(set);
+ r.remove("anonymous");
+
+ String[] data = r.toArray(new String[r.size()]);
+ Arrays.sort(data);
+ return Arrays.asList(data);
+ }
+
+ private final class AclImpl extends SidACL {
+ protected Boolean hasPermission(Sid p, Permission permission) {
+ if(GlobalMatrixAuthorizationStrategy.this.hasPermission(toString(p),permission))
+ return true;
+ return null;
+ }
+ }
+
+ @Extension
+ public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
+
+ /**
+ * Persist {@link GlobalMatrixAuthorizationStrategy} as a list of IDs that
+ * represent {@link GlobalMatrixAuthorizationStrategy#grantedPermissions}.
+ */
+ public static class ConverterImpl implements Converter {
+ public boolean canConvert(Class type) {
+ return type==GlobalMatrixAuthorizationStrategy.class;
+ }
+
+ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
+ GlobalMatrixAuthorizationStrategy strategy = (GlobalMatrixAuthorizationStrategy)source;
+
+ // Output in alphabetical order for readability.
+ SortedMap<Permission, Set<String>> sortedPermissions = new TreeMap<Permission, Set<String>>(Permission.ID_COMPARATOR);
+ sortedPermissions.putAll(strategy.grantedPermissions);
+ for (Entry<Permission, Set<String>> e : sortedPermissions.entrySet()) {
+ String p = e.getKey().getId();
+ List<String> sids = new ArrayList<String>(e.getValue());
+ Collections.sort(sids);
+ for (String sid : sids) {
+ writer.startNode("permission");
+ writer.setValue(p+':'+sid);
+ writer.endNode();
+ }
+ }
+
+ }
+
+ public Object unmarshal(HierarchicalStreamReader reader, final UnmarshallingContext context) {
+ GlobalMatrixAuthorizationStrategy as = create();
+
+ while (reader.hasMoreChildren()) {
+ reader.moveDown();
+ try {
+ as.add(reader.getValue());
+ } catch (IllegalArgumentException ex) {
+ Logger.getLogger(GlobalMatrixAuthorizationStrategy.class.getName())
+ .log(Level.WARNING,"Skipping a non-existent permission",ex);
+ RobustReflectionConverter.addErrorInContext(context, ex);
+ }
+ reader.moveUp();
+ }
+
+ if (migrateHudson2324(as.grantedPermissions))
+ OldDataMonitor.report(context, "1.301");
+
+ return as;
+ }
+
+ protected GlobalMatrixAuthorizationStrategy create() {
+ return new GlobalMatrixAuthorizationStrategy();
+ }
+ }
+
+ public static class DescriptorImpl extends Descriptor<AuthorizationStrategy> {
+ protected DescriptorImpl(Class<? extends GlobalMatrixAuthorizationStrategy> clazz) {
+ super(clazz);
+ }
+
+ public DescriptorImpl() {
+ }
+
+ public String getDisplayName() {
+ return Messages.GlobalMatrixAuthorizationStrategy_DisplayName();
+ }
+
+ @Override
+ public AuthorizationStrategy newInstance(StaplerRequest req, JSONObject formData) throws FormException {
+ GlobalMatrixAuthorizationStrategy gmas = create();
+ Map<String,Object> data = formData.getJSONObject("data");
+ for(Map.Entry<String,Object> r : data.entrySet()) {
+ String sid = r.getKey();
+ if (!(r.getValue() instanceof JSONObject)) {
+ throw new FormException("not an object: " + formData, "data");
+ }
+ Map<String,Object> value = (JSONObject) r.getValue();
+ for (Map.Entry<String,Object> e : value.entrySet()) {
+ if (!(e.getValue() instanceof Boolean)) {
+ throw new FormException("not an boolean: " + formData, "data");
+ }
+ if ((Boolean) e.getValue()) {
+ Permission p = Permission.fromId(e.getKey());
+ gmas.add(p,sid);
+ }
+ }
+ }
+ return gmas;
+ }
+
+ protected GlobalMatrixAuthorizationStrategy create() {
+ return new GlobalMatrixAuthorizationStrategy();
+ }
+
+ public List<PermissionGroup> getAllGroups() {
+ List<PermissionGroup> groups = new ArrayList<PermissionGroup>(PermissionGroup.getAll());
+ groups.remove(PermissionGroup.get(Permission.class));
+ return groups;
+ }
+
+ public boolean showPermission(Permission p) {
+ return p.getEnabled();
+ }
+
+ public FormValidation doCheckName(@QueryParameter String value ) throws IOException, ServletException {
+ return doCheckName_(value, Jenkins.getInstance(), Jenkins.ADMINISTER);
+ }
+
+ public FormValidation doCheckName_(String value, AccessControlled subject, Permission permission) throws IOException, ServletException {
+ if(!subject.hasPermission(permission)) return FormValidation.ok(); // can't check
+
+ final String v = value.substring(1,value.length()-1);
+ SecurityRealm sr = Jenkins.getInstance().getSecurityRealm();
+ String ev = Functions.escape(v);
+
+ if(v.equals("authenticated"))
+ // system reserved group
+ return FormValidation.respond(Kind.OK, makeImg("user.png") +ev);
+
+ try {
+ try {
+ sr.loadUserByUsername(v);
+ return FormValidation.respond(Kind.OK, makeImg("person.png")+ev);
+ } catch (UserMayOrMayNotExistException e) {
+ // undecidable, meaning the user may exist
+ return FormValidation.respond(Kind.OK, ev);
+ } catch (UsernameNotFoundException e) {
+ // fall through next
+ } catch (DataAccessException e) {
+ // fall through next
+ } catch (AuthenticationException e) {
+ // other seemingly unexpected error.
+ return FormValidation.error(e,"Failed to test the validity of the user name "+v);
+ }
+
+ try {
+ sr.loadGroupByGroupname(v);
+ return FormValidation.respond(Kind.OK, makeImg("user.png") +ev);
+ } catch (UserMayOrMayNotExistException e) {
+ // undecidable, meaning the group may exist
+ return FormValidation.respond(Kind.OK, ev);
+ } catch (UsernameNotFoundException e) {
+ // fall through next
+ } catch (DataAccessException e) {
+ // fall through next
+ } catch (AuthenticationException e) {
+ // other seemingly unexpected error.
+ return FormValidation.error(e,"Failed to test the validity of the group name "+v);
+ }
+
+ // couldn't find it. it doesn't exist
+ return FormValidation.respond(Kind.ERROR, makeImg("error.png") +ev);
+ } catch (Exception e) {
+ // if the check fails miserably, we still want the user to be able to see the name of the user,
+ // so use 'ev' as the message
+ return FormValidation.error(e,ev);
+ }
+ }
+
+ private String makeImg(String gif) {
+ return String.format("<img src='%s%s/images/16x16/%s' style='margin-right:0.2em'>", Stapler.getCurrentRequest().getContextPath(), Jenkins.RESOURCE_PATH, gif);
+ }
+ }
+
+ @Extension public static final class PermissionAdderImpl extends PermissionAdder {
+
+ @Override public boolean add(AuthorizationStrategy strategy, User user, Permission perm) {
+ if (strategy instanceof GlobalMatrixAuthorizationStrategy) {
+ ((GlobalMatrixAuthorizationStrategy) strategy).add(perm, user.getId());
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ }
+
+ private static final Logger LOGGER = Logger.getLogger(GlobalMatrixAuthorizationStrategy.class.getName());
+}
+
diff --git a/plugins/matrix-auth-plugin/src/main/java/hudson/security/ProjectMatrixAuthorizationStrategy.java b/plugins/matrix-auth-plugin/src/main/java/hudson/security/ProjectMatrixAuthorizationStrategy.java
new file mode 100644
index 0000000..0173e5b
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/java/hudson/security/ProjectMatrixAuthorizationStrategy.java
@@ -0,0 +1,135 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc., Seiji Sogabe, Tom Huybrechts
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.security;
+
+import hudson.model.AbstractItem;
+import hudson.model.Descriptor;
+import jenkins.model.Jenkins;
+import hudson.model.Item;
+import hudson.model.ItemGroup;
+import hudson.model.Job;
+import hudson.util.RobustReflectionConverter;
+import hudson.Extension;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.mapper.Mapper;
+import com.thoughtworks.xstream.core.JVM;
+import org.jenkinsci.plugins.matrixauth.Messages;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * {@link GlobalMatrixAuthorizationStrategy} plus per-project ACL.
+ *
+ * <p>
+ * Per-project ACL is stored in {@link AuthorizationMatrixProperty}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class ProjectMatrixAuthorizationStrategy extends GlobalMatrixAuthorizationStrategy {
+ @Override
+ public ACL getACL(Job<?,?> project) {
+ AuthorizationMatrixProperty amp = project.getProperty(AuthorizationMatrixProperty.class);
+ if (amp != null) {
+ SidACL projectAcl = amp.getACL();
+
+ if (!amp.isBlocksInheritance()) {
+ projectAcl = projectAcl.newInheritingACL(getACL(project.getParent()));
+ }
+
+ return projectAcl;
+ } else {
+ return getACL(project.getParent());
+ }
+ }
+
+ public SidACL getACL(ItemGroup g) {
+ if (g instanceof Item) {
+ Item item = (Item) g;
+ return (SidACL)item.getACL();
+ }
+ return getRootACL();
+ }
+
+ @Override
+ public SidACL getACL(AbstractItem item) {
+ return getACL(item.getParent());
+ }
+
+ @Override
+ public Set<String> getGroups() {
+ Set<String> r = new HashSet<String>();
+ r.addAll(super.getGroups());
+ for (Job<?,?> j : Jenkins.getInstance().getItems(Job.class)) {
+ AuthorizationMatrixProperty amp = j.getProperty(AuthorizationMatrixProperty.class);
+ if (amp != null)
+ r.addAll(amp.getGroups());
+ }
+ return r;
+ }
+
+ @Extension
+ public static final Descriptor<AuthorizationStrategy> DESCRIPTOR = new DescriptorImpl() {
+ @Override
+ protected GlobalMatrixAuthorizationStrategy create() {
+ return new ProjectMatrixAuthorizationStrategy();
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Messages.ProjectMatrixAuthorizationStrategy_DisplayName();
+ }
+ };
+
+ public static class ConverterImpl extends GlobalMatrixAuthorizationStrategy.ConverterImpl {
+ private RobustReflectionConverter ref;
+
+ public ConverterImpl(Mapper m) {
+ ref = new RobustReflectionConverter(m,new JVM().bestReflectionProvider());
+ }
+
+ @Override
+ protected GlobalMatrixAuthorizationStrategy create() {
+ return new ProjectMatrixAuthorizationStrategy();
+ }
+
+ @Override
+ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
+ String name = reader.peekNextChild();
+ if(name!=null && (name.equals("permission") || name.equals("useProjectSecurity")))
+ // the proper serialization form
+ return super.unmarshal(reader, context);
+ else
+ // remain compatible with earlier problem where we used reflection converter
+ return ref.unmarshal(reader,context);
+ }
+
+ @Override
+ public boolean canConvert(Class type) {
+ return type==ProjectMatrixAuthorizationStrategy.class;
+ }
+ }
+}
+
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config.jelly b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config.jelly
new file mode 100644
index 0000000..0b0e6a1
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config.jelly
@@ -0,0 +1,36 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Tom Huybrechts
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
+ <f:optionalBlock name="useProjectSecurity" title="${%Enable project-based security}" checked="${instance!=null}">
+ <f:nested>
+ <table style="width:100%">
+ <f:optionalBlock field="blocksInheritance"
+ title="${%Block inheritance of global authorization matrix}" />
+ <st:include class="hudson.security.GlobalMatrixAuthorizationStrategy" page="config.jelly"/>
+ </table>
+ </f:nested>
+ </f:optionalBlock>
+</j:jelly>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_da.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_da.properties
new file mode 100644
index 0000000..b51d973
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_da.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=Sl\u00e5 projektbaseret adgangskontrol til
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_de.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_de.properties
new file mode 100644
index 0000000..09962df
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_de.properties
@@ -0,0 +1 @@
+Enable\ project-based\ security=Projektbasierte Sicherheit aktivieren
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_es.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_es.properties
new file mode 100644
index 0000000..ff2d469
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_es.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=Habilitar seguridad en el projecto
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_fr.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_fr.properties
new file mode 100644
index 0000000..eaa01eb
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_fr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=Activer la s�curit� bas�e projet
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_ja.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_ja.properties
new file mode 100644
index 0000000..3adb7b6
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_ja.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=\u6A29\u9650\u8A2D\u5B9A(\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5358\u4F4D)\u306E\u6709\u52B9\u5316
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_pt_BR.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_pt_BR.properties
new file mode 100644
index 0000000..55c8f81
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_pt_BR.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=Habilitar seguran\u00e7a baseada em projeto
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_tr.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_tr.properties
new file mode 100644
index 0000000..bcc98aa
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_tr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=Proje tabanl\u0131 g\u00fcvenlik ayarlar\u0131n\u0131 devreye al
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_zh_CN.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_zh_CN.properties
new file mode 100644
index 0000000..d7d400a
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_zh_CN.properties
@@ -0,0 +1 @@
+Enable\ project-based\ security=\u542f\u7528\u9879\u76ee\u5b89\u5168
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_zh_TW.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_zh_TW.properties
new file mode 100644
index 0000000..cac3d88
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/config_zh_TW.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Enable\ project-based\ security=\u555f\u7528\u5c08\u6848\u578b\u5b89\u5168\u6027\u8a2d\u5b9a
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/help-blocksInheritance.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/help-blocksInheritance.html
new file mode 100644
index 0000000..74a3d94
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/AuthorizationMatrixProperty/help-blocksInheritance.html
@@ -0,0 +1,9 @@
+<div>
+ If checked, the global configuration matrix will not be inherited.
+ This allows you to configure a job that has a more strict access control list than the rest of the global permission set.
+ <br />
+ <br />
+ <b>WARNING</b>: because the parent ACL will not be inherited, it is possible to revoke your own configuration access accidentally.
+ If you enable this setting, please also remember to grant yourself or your group configuration access so that you do not lock yourself out of the job.
+ Otherwise the only ways to get back in will be to disable project-based security in global configuration, or manually edit the permissions list in the project's XML configuration.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config.jelly b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config.jelly
new file mode 100644
index 0000000..51a70d8
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config.jelly
@@ -0,0 +1,175 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2011, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
+ <f:block xmlns:local="local">
+ <j:set var="groups" value="${descriptor.allGroups}"/>
+ <d:taglib uri="local">
+ <!-- generate one row for the sid name @sid -->
+ <d:tag name="row">
+ <td class="left-most">${title}</td>
+ <j:forEach var="g" items="${groups}">
+ <j:forEach var="p" items="${g.permissions}">
+ <j:if test="${descriptor.showPermission(p)}">
+ <td width="*">
+ <f:checkbox name="[${p.id}]" checked="${instance.hasExplicitPermission(attrs.sid,p)}"/>
+ </td>
+ </j:if>
+ </j:forEach>
+ </j:forEach>
+ <td class="stop" style="text-align:left;">
+ <a href="#" class="toggleall">
+ <img alt="${%Toggle all}" src="${imagesURL}/16x16/edit-select-all.png" height="16" width="16"/>
+ </a>
+ <j:if test="${attrs.sid!='anonymous'}">
+ <a href="#" class="remove">
+ <img alt="${%Remove user/group}" src="${imagesURL}/16x16/stop.png" height="16" width="16"/>
+ </a>
+ </j:if>
+ </td>
+ </d:tag>
+ </d:taglib>
+ <link rel="stylesheet" href="${rootURL}${app.VIEW_RESOURCE_PATH}/hudson/security/table.css" type="text/css" />
+ <j:set var="strategyid" value="${descriptor.jsonSafeClassName}" />
+ <table id="${strategyid}" class="center-align global-matrix-authorization-strategy-table" name="data">
+
+ <!-- The first row will show grouping -->
+ <tr class="group-row">
+ <td rowspan="2" class="pane-header blank">
+ ${%User/group}
+ </td>
+ <j:forEach var="g" items="${groups}">
+ <j:set var="cnt" value="${0}" />
+ <j:forEach var="p" items="${g.permissions}">
+ <j:if test="${descriptor.showPermission(p)}">
+ <j:set var="cnt" value="${cnt+1}"/>
+ </j:if>
+ </j:forEach>
+
+ <td class="pane-header" colspan="${cnt}">
+ ${g.title}
+ </td>
+ </j:forEach>
+ <td rowspan="2" class="stop" />
+ </tr>
+ <!-- The second row for individual permission -->
+ <tr class="caption-row">
+ <j:forEach var="g" items="${groups}">
+ <j:forEach var="p" items="${g.permissions}">
+ <j:if test="${descriptor.showPermission(p)}">
+ <th class="pane" tooltip="${p.description}">
+ ${p.name}
+ </th>
+ </j:if>
+ </j:forEach>
+ </j:forEach>
+ </tr>
+
+ <j:forEach var="sid" items="${instance.allSIDs}">
+ <tr name="[${sid}]" class="permission-row">
+ <local:row title="${sid}" sid="${sid}"/>
+ </tr>
+ </j:forEach>
+ <tr name="anonymous">
+ <local:row sid="anonymous" title="${%Anonymous}" />
+ </tr>
+
+
+ <!-- template row to be used for adding a new row -->
+ <j:set var="id" value="${h.generateId()}"/>
+ <tr id="${id}" style="display:none" class="permission-row">
+ <local:row sid="${null}" />
+ </tr>
+ </table>
+ <table style="margin-top:0.5em; margin-left: 2em; width: 100%">
+ <tr><td colspan="3">
+ ${%User/group to add}:
+ <input type="text" id="${id}text" />
+ <input type="button" value="${%Add}" id="${id}button"/>
+ </td><td align="right">
+ <a href="#" class="help-button" helpURL="${rootURL}${descriptor.find('hudson.security.GlobalMatrixAuthorizationStrategy$DescriptorImpl').getHelpFile('user-group')}"><img src="${imagesURL}/16x16/help.png" alt="[help]" height="16" width="16"/></a>
+ </td></tr>
+ <f:helpArea />
+ </table>
+ <script>
+ (function() {
+ <!-- place master outside the DOM tree so that it won't creep into the submitted form -->
+ var master = document.getElementById('${id}');
+ var table = master.parentNode;
+ table.removeChild(master);
+
+ makeButton($$('${id}button'), function (e) {
+ <!-- when 'add' is clicked... -->
+ var name = $$('${id}text').value;
+ if(name=="") {
+ alert("Please enter a user name or a group name");
+ return;
+ }
+ if(findElementsBySelector(table,"TR").find(function(n){return n.getAttribute("name")=='['+name+']';})!=null) {
+ alert("Entry for '"+name+"' already exists");
+ return;
+ }
+
+ if(document.importNode!=null)
+ copy = document.importNode(master,true);
+ else
+ copy = master.cloneNode(true); <!-- for IE -->
+ copy.removeAttribute("id");
+ copy.removeAttribute("style");
+ copy.firstChild.innerHTML = name;
+ copy.setAttribute("name",'['+name+']');
+ table.appendChild(copy);
+ Behaviour.applySubtree(findAncestor(table,"TABLE"),true);
+ });
+ })();
+
+ Behaviour.specify("#${strategyid} TD.stop A.remove", 'GlobalMatrixAuthorizationStrategy', 0, function(e) {
+ e.onclick = function() {
+ var tr = findAncestor(this,"TR");
+ tr.parentNode.removeChild(tr);
+ return false;
+ }
+ e = null; <!-- avoid memory leak -->
+ });
+ Behaviour.specify("#${strategyid} TD.stop A.toggleall", 'GlobalMatrixAuthorizationStrategy', 0, function(e) {
+ e.onclick = function() {
+ var tr = findAncestor(this,"TR");
+ var inputs = tr.getElementsByTagName("INPUT");
+ for(var i=0; i<inputs.length; i++){
+ if(inputs[i].type == "checkbox") inputs[i].checked = !inputs[i].checked;
+ }
+ return false;
+ };
+ e = null; <!-- avoid memory leak -->
+ });
+ <j:if test="${empty(descriptorPath)}">
+ <j:set var="descriptorPath" value="${descriptor.descriptorFullUrl}"/>
+ </j:if>
+ <!-- validates the name -->
+ Behaviour.specify("#${strategyid} TR.permission-row", 'GlobalMatrixAuthorizationStrategy', 0, function(e) {
+ FormChecker.delayedCheck("${descriptorPath}/checkName?value="+encodeURIComponent(e.getAttribute("name")),"GET",e.firstChild);
+ });
+ </script>
+ </f:block>
+</j:jelly>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_da.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_da.properties
new file mode 100644
index 0000000..78c79a3
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_da.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Anonymous=Anonym
+User/group\ to\ add=Brugergruppe der skal tilf\u00f8jes
+Add=Tilf\u00f8j
+Remove\ user/group=Fjern user/gruppe
+User/group=Bruger/gruppe
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_de.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_de.properties
new file mode 100644
index 0000000..09e5858
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_de.properties
@@ -0,0 +1,28 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Remove\ user/group=Nutzer/Gruppe entfernen
+Toggle\ all=Alles ausw\u00E4hlen
+User/group=Benutzer/Gruppe
+Anonymous=Anonym
+User/group\ to\ add=Weitere Benutzer/Gruppe
+Add=Hinzuf�gen
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_es.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_es.properties
new file mode 100644
index 0000000..3ef3712
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_es.properties
@@ -0,0 +1,28 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+User/group=Usuario/Grupo
+Anonymous=An�nimo
+User/group\ to\ add=Usuario/Grupo para a�adir
+Add=A�adir
+Remove\ user/group=Borrar usuario/grupo
+Toggle\ all=Cambiar todo
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_fi.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_fi.properties
new file mode 100644
index 0000000..f293ef2
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_fi.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Remove\ user/group=Poista k\u00E4ytt\u00E4j\u00E4/ryhm\u00E4
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_fr.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_fr.properties
new file mode 100644
index 0000000..fbb1cc4
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_fr.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Remove\ user/group=Supprimer utilisateur/groupe
+User/group=Utilisateur/groupe
+Anonymous=Anonyme
+User/group\ to\ add=Utilisateur/groupe � ajouter
+Add=Ajouter
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_ja.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_ja.properties
new file mode 100644
index 0000000..e5c4ae2
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_ja.properties
@@ -0,0 +1,29 @@
+# The MIT License
+#
+# Copyright (c) 2004-2012, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Add=\u8ffd\u52a0
+Anonymous=\u533f\u540d\u30e6\u30fc\u30b6\u30fc
+User/group=\u30e6\u30fc\u30b6\u30fc/\u30b0\u30eb\u30fc\u30d7
+User/group\ to\ add=\u8ffd\u52a0\u3059\u308b\u30e6\u30fc\u30b6\u30fc/\u30b0\u30eb\u30fc\u30d7
+
+Toggle\ all=\u3059\u3079\u3066\u53cd\u8ee2
+Remove\ user/group=\u30e6\u30fc\u30b6/\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_nb_NO.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_nb_NO.properties
new file mode 100644
index 0000000..06f66ca
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_nb_NO.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Add=Legg til
+Anonymous=Anonym
+User/group=Bruker/gruppe
+User/group\ to\ add=Bruker/gruppe \u00E5 legge til
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_nl.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_nl.properties
new file mode 100644
index 0000000..c9769d6
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_nl.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Remove\ user/group=Verwijder gebruiker/groep
+User/group=Gebruiker/groep
+Anonymous=Anoniem
+User/group\ to\ add=Toe te voegen gebruiker/groep
+Add=Voeg toe
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_pt_BR.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_pt_BR.properties
new file mode 100644
index 0000000..d68585a
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_pt_BR.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+User/group=Usu\u00E1rios/Grupo
+Anonymous=An\u00f4nimo
+User/group\ to\ add=Usu\u00e1rio/grupo para adicionar
+Add=Adicionar
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_ru.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_ru.properties
new file mode 100644
index 0000000..acd0573
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_ru.properties
@@ -0,0 +1,28 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Remove\ user/group=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F/\u0433\u0440\u0443\u043F\u043F\u0443
+Toggle\ all=\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u0441\u0451
+User/group=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c/\u0433\u0440\u0443\u043f\u043f\u0430
+Anonymous=\u0410\u043d\u043e\u043d\u0438\u043c
+User/group\ to\ add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f/\u0433\u0440\u0443\u043f\u043f\u0443
+Add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_sv_SE.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_sv_SE.properties
new file mode 100644
index 0000000..80304b1
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_sv_SE.properties
@@ -0,0 +1,28 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Add=L\u00E4gg till
+Anonymous=Anonym
+Remove\ user/group=Ta bort anv\u00E4ndare/grupp
+Toggle\ all=V\u00E4xla alla
+User/group=Anv\u00E4ndare/grupp
+User/group\ to\ add=Anv\u00E4ndare/grupp att l\u00E4gga till
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_tr.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_tr.properties
new file mode 100644
index 0000000..2339130
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_tr.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+User/group=Kullan\u0131c\u0131/grup
+Anonymous=Bilinmeyen
+User/group\ to\ add=Eklenecek grup
+Add=Ekle
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_zh_CN.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_zh_CN.properties
new file mode 100644
index 0000000..76b6f20
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_zh_CN.properties
@@ -0,0 +1,28 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Remove\ user/group=\u79FB\u9664\u7528\u6237/\u7EC4
+Toggle\ all=\u5C55\u5F00\u5168\u90E8
+User/group=\u7528\u6237/\u7ec4
+Anonymous=\u533f\u540d\u7528\u6237
+User/group\ to\ add=\u6dfb\u52a0\u7528\u6237/\u7ec4
+Add=\u6dfb\u52a0
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_zh_TW.properties b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_zh_TW.properties
new file mode 100644
index 0000000..a39c6fc
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/config_zh_TW.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Copyright (c) 2004-2013, Sun Microsystems, Inc., Chunghwa Telecom Co., Ltd.,
+# and Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Toggle\ all=\u53cd\u5411\u9078\u53d6
+Remove\ user/group=\u79fb\u9664\u4f7f\u7528\u8005\u6216\u7fa4\u7d44
+
+User/group=\u4f7f\u7528\u8005\u6216\u7fa4\u7d44
+Anonymous=\u533f\u540d\u4f7f\u7528\u8005
+User/group\ to\ add=\u8981\u65b0\u589e\u7684\u4f7f\u7528\u8005\u6216\u7fa4\u7d44
+Add=\u65b0\u589e
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group.jelly b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group.jelly
new file mode 100644
index 0000000..194301b
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group.jelly
@@ -0,0 +1,13 @@
+<?jelly escape-by-default='true'?>
+<l:ajax xmlns:l="/lib/layout">
+ <div>
+ Different security realm has different conventions about group names.
+ The best way to go about it is to login and see what group names you belong to,
+ by going to <a href="${rootURL}/whoAmI" target="_new">this diagnostics page</a>.
+
+ <p>
+ A special group "authenticated" is also available, which represents all
+ authenticated (logged in) users.
+ </p>
+ </div>
+</l:ajax>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group_ja.jelly b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group_ja.jelly
new file mode 100644
index 0000000..39bd6e2
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group_ja.jelly
@@ -0,0 +1,11 @@
+<?jelly escape-by-default='true'?>
+<l:ajax xmlns:l="/lib/layout">
+<div>
+ ユーザー情報の取得先によってグループ名は異なる記法が使われることがあります。
+ 最善の方法は、一度ユーザーでログインして、この<a href="${rootURL}/whoAmI" target="_new">診断ページ</a>に行って実際にJenkinsが使っているグループ名を見ることです。
+ <p>
+ 接頭辞である"ROLE_"と大文字であるか小文字であるかを変更するには、Jenkinsのアーカイブに含まれる<tt>WEB-INF/security/LDAPBindSecurityRealm.groovy</tt>を編集して、
+ 再起動します。
+ </p>
+</div>
+</l:ajax>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group_zh_TW.jelly b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group_zh_TW.jelly
new file mode 100644
index 0000000..59d4bbd
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help-user-group_zh_TW.jelly
@@ -0,0 +1,11 @@
+<?jelly escape-by-default='true'?>
+<l:ajax xmlns:l="/lib/layout">
+ <div>
+ 不同的安全性領域對群組名稱有不一樣的慣例。
+ 最好的方法就是登入後,到<a href="${rootURL}/whoAmI" target="_new">診斷頁</a>看您所屬的群組名稱。
+
+ <p>
+ 另外,還可以使用特別群組 "authenticated" 來代表所有驗證通過 (已登入) 的使用者。
+ </p>
+ </div>
+</l:ajax>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help.html
new file mode 100644
index 0000000..c34beb4
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help.html
@@ -0,0 +1,19 @@
+<div>
+ In this scheme, you can configure who can do what by using a big table.
+
+ <p>
+ Each column represents a permission. Hover the mouse over the permission names to get
+ more information about what they represent.
+
+ <p>
+ Each row represents a user or a group (often called 'role', depending on the security realm.)
+ This includes a special user 'anonymous', which represents unauthenticated users, as well
+ as 'authenticated', which represents all authenticated users (IOW, everyone except anonymous users.)
+ Use the text box below the table to add new users/groups/roles to the table, and click the
+ <tt>[x]</tt> icon to remove it from the table.
+
+ <p>
+ Permissions are additive. That is, if an user X is in group A, B, and C, then
+ the permissions that this user actually has are the union of all permissions given to
+ X, A, B, C, and anonymous.
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_de.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_de.html
new file mode 100644
index 0000000..a651b71
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_de.html
@@ -0,0 +1,20 @@
+<div>
+ In dieser Tabelle können Sie angeben, wer zu welchen Aktionen berechtigt ist.
+ <p>
+ Jede Spalte entspricht einer Berechtigung. Fahren Sie mit der Maus über die
+ Namen der Berechtigungen, um mehr Informationen darüber zu erhalten, was sie
+ bedeuten.
+ <p>
+ Jede Zeile entspricht einem Benutzer oder einer Benutzergruppe (je nach
+ Benutzerverzeichnis oft auch als "Rolle" bezeichnet). Die Zeilen beinhalten
+ auch die besonderen Benutzer 'anonymous' bzw. 'authenticated', welche
+ nichtangemeldete bzw. angemeldete Benutzer repräsentieren,
+
+ Verwenden Sie das untenstehende Textfeld, um neue Benutzer/Gruppen/Rollen zur Tabelle
+ hinzuzufügen und klicken Sie auf das <tt>[x]</tt>-Symbol, um sie wieder von der
+ Tabelle zu entfernen.
+ <p>
+ Berechtigungen sind additiv. Dies bedeutet, dass ein Benutzer X, der Mitglied
+ in den Gruppen A, B und C ist, die Vereinigungsmenge aller Berechtigungen
+ besitzt, die X, A, B, C und dem Benutzer 'anonymous' erteilt wurden.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_fr.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_fr.html
new file mode 100644
index 0000000..2467997
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_fr.html
@@ -0,0 +1,26 @@
+<div>
+ <!-- OUTDATED -->
+ Cette option vous permet de configurer qui fait quoi dans un grand tableau.
+
+ <p>
+ Chaque colonne représente une autorisation. Faites glisser la souris au
+ dessus du nom d'une autorisation pour obtenir plus d'information sur
+ ce qu'elle représente.
+
+ <p>
+ Chaque ligne représente un utilisateur ou un groupe (souvent appelé
+ 'rôle', selon les royaumes -realms- de sécurité).
+ On y trouve un utilisateur spécial 'anonymous' qui représente
+ les utilisateurs non authentifiés, ainsi qu'un utilisateur 'authenticated',
+ qui représente les utilisateurs authentifiés (c-à-d, tout le monde, à
+ l'exception des utilisateurs anonymes).
+ Utilisez le texte sous la table pour ajouter des nouveaux
+ utilisateurs/groupes/rôles à la table et cliquez sur l'icône
+ <tt>[x]</tt> pour les supprimer.
+
+ <p>
+ Les autorisations s'ajoutent les unes aux autres. En clair, si un
+ utilisateur X est présent dans les groupes A, B et C, alors les
+ autorisations associées à cet utilisateur sont l'union de toutes les
+ autorisations accordées à X, A, B, C et anonymous.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_ja.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_ja.html
new file mode 100644
index 0000000..2d3401b
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_ja.html
@@ -0,0 +1,19 @@
+<div>
+ 大きな表形式で、誰が何をできるのか設定します。
+
+ <p>
+ 各列はパーミッションを表します。パーミッション名の上にマウスをあわせると、
+ そのパーミッションの詳細が表示されます。
+
+ <p>
+ 各行はユーザーかグループ(セキュリティ・レルムでは、'ロール'とも呼ばれます)を表します。
+ この中には、Jenkinsにログインしていない匿名ユーザーをあらわす特別な「anonymous」と、
+ また、全てのログイン済みユーザーをあらわす特別な「authenticated」という名前を使うこともできます。
+ 表の下にあるテキストボックスを使用して、ユーザー/グループ/ロールを表に追加し、
+ <tt>[x]</tt> のアイコンをクリックすると、表から削除します。
+
+ <p>
+ パーミッションは追加式です。つまり、ユーザーXがグループA、B、Cに所属しているなら、
+ このユーザーが実際に持つパーミッションは、
+ ユーザーX、グループA、B、Cおよび匿名ユーザーに与えられた全てのパーミッションの和になります。
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_pt_BR.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_pt_BR.html
new file mode 100644
index 0000000..1b5c049
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_pt_BR.html
@@ -0,0 +1,20 @@
+<div>
+ <!-- OUTDATED -->
+ Neste esquema, você pode configurar quem pode fazer o quê usando uma grande tabela.
+
+ <p>
+ Cada coluna representa uma permissão. Passe o mouse sobre os nomes das permissões para
+ obter mais informação sobre o que elas representam.
+
+ <p>
+ Cada linha representa um usuário ou grupo (frequentemente chamado de 'papel',
+ dependendo do domínio de segurança.)
+ Isto inclui um usuário especial chamado 'anonymous', que representa os usuários não autenticados.
+ Use a caixa de texto abaixo da tabela para adicionar novos usuários/grupos/papéis na tabela, e clique
+ no ícone <tt>[x]</tt> para remover da tabela.
+
+ <p>
+ Permissões são cumulativas. Ou seja, se um usuário X está nos grupos A, B, e C, então
+ as permissões que este usuário na verdade tem é a únião de todas as permissões dadas para
+ X, A, B, C, e anônimos.
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_ru.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_ru.html
new file mode 100644
index 0000000..36f4e2b
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_ru.html
@@ -0,0 +1,20 @@
+<div>
+ <!-- OUTDATED -->
+ В этом режиме вы можете явно указать допустимые операции, используя матрицу привилегий.
+
+ <p>
+ Каждая колонка представляет собой привилегию. Наведите курсор мыши на имя привелегии
+ для получения большей информации о её предназначении.
+
+ <p>
+ Каждая строка представляет собой пользователя или группу (обычно называемая "ролью", в
+ зависимости от используемого модуля безопасности). Список включает также специального
+ пользователя Аноним, который представляет собой неаутентифицированного пользователя.
+ Чтобы добавить нового пользователя/группу/роль в таблицу, используйте поле ввода под таблицей.
+ Чтобы удалить пользователя/группу/роль нажмите кнопку <tt>[x]</tt> в правой колонке.
+
+ <p>
+ Привилегии аддитивны, то есть если пользователь X состоит в группах A, B и C, тогда
+ реальные привилегии пользователя - объединение всех привилегий данных конкретно пользователю,
+ группам A, B и C и анонимному пользователю.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_tr.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_tr.html
new file mode 100644
index 0000000..44d3893
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_tr.html
@@ -0,0 +1,19 @@
+<div>
+ <!-- OUTDATED -->
+ Bu şemada, tabloyu kullanarak kimin ne yapabileceğini belirleyebilirsiniz.
+
+ <p>
+ Her kolon bir yetkiyi temsil eder. Mouse ile yetki isimlerinin üzerine
+ gelerek, daha fazla bilgi alabilirsiniz.
+
+ <p>
+ Her satır bir kullanıcı veya grubu temsil eder (Güvenlik alanına bağlı olarak, "rol" olarak da
+ adlandırılabilir). Bu satırların içerisinde yetkisiz kullanıcıları temsilen bilinmeyen (anonymous)
+ kullanıcı da yer almaktadır. Aşağıdaki metin kutusunu kullanarak, tabloya kullanıcı/grup/rol ekleyebilir,
+ <tt>[x]</tt> ikonuna tıklayarak bunları silebilirsiniz.
+
+ <p>
+ Yetkilendirme, kullanıcı ve ait olduğu grupların yetkilerinin birleşim kümesi ile hesaplanır.
+ Yani X kullanıcısı, A, B ve C gruplarına dahilse, yetkileri X, A, B, C ve bilinmeyen kullanıcıya
+ verilen yetkilerinin birleşim kümesidir.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_zh_CN.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_zh_CN.html
new file mode 100644
index 0000000..72cdd35
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_zh_CN.html
@@ -0,0 +1,13 @@
+<div>
+ 在这种授权模型中,你可以通过一个大的表格来配置什么用户可以做什么事.
+
+ <p>
+ 每一列代表一个权限.把鼠标移动到权限名称上可以查看更详细的权限说明信息.
+
+ <p>
+ 每一行代表一个用户或组(通常称为'角色',取决于安全域.),这其中包含特殊用户'anonymous',其代表未登录用户,同样还有'authenticated',其代表所有已认证的用户(也就是除了匿名用户的所有用户.)
+ 可以使用表格下方的输入框来添加新的用户/组/角色到表格中,并且可以点击<tt>[x]</tt>图标将其从表格中删除.
+
+ <p>
+ 权限是追加的,这说明如果一个用户X在A,B,C三个组中,那么X的权限是联合了X,A,B,C和匿名用户的所有权限.
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_zh_TW.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_zh_TW.html
new file mode 100644
index 0000000..18b7e9a
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/GlobalMatrixAuthorizationStrategy/help_zh_TW.html
@@ -0,0 +1,15 @@
+<div>
+ 在這種配置下,您可以透過一張大表格,設定每個人可以做的每件事。
+
+ <p>
+ 每一欄都表示一項權限。將滑鼠游標移到權限名稱上,可以看到權限代表的意義說明。
+
+ <p>
+ 一行就是一個使用者或群組 (依據安全性領域不同,一般也叫做「角色」)。
+ 包括 "anonymous" 特殊使用者,代表沒有通過驗證的人;
+ 另外也有 "authenticated",代表所有驗證通過的人 (換句話說,就是除了匿名使用者以外的所有人)。
+ 透過表格下方的文字方塊可以新增使用者、群組、角色進來,按一下 <tt>[x]</tt> 圖示可以把它由表格中移掉。
+
+ <p>
+ 權限會累加。也就是說,如果 X 使用者在 A, B, C 三個群組中,則該使用者實際的權限會是 X, A, B, C 及匿名使用者權限的聯集。
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help.html
new file mode 100644
index 0000000..0d2bdeb
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help.html
@@ -0,0 +1,11 @@
+<div>
+ This mode is an extension to "Matrix-based security" that allows additional ACL matrix to be defined
+ for each project separately (which is done on the job configuration screen.)
+
+ <p>
+ This allows you to say things like "Joe can access project A, B, and C but he can't see D."
+ See the help of "Matrix-based security" for the concept of matrix-based security in general.
+
+ <p>
+ ACLs are additive, so the access rights granted below will be effective for all the projects.
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_de.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_de.html
new file mode 100644
index 0000000..ced065c
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_de.html
@@ -0,0 +1,13 @@
+<div>
+ Dieser Modus erweitert die "Matrix-basierte Sicherheit" um eine zusätzliche ACL-Rechtematrix,
+ die für jedes Projekt individuell festgelegt werden kann (in der Konfigurationsmaske des jeweiligen Jobs).
+
+ <p>
+ Dies erlaubt Ihnen eine Rechtevergabe wie z.B. "Joe darf auf Projekt A, B und C zugreifen - er
+ soll aber Projekt D nicht sehen dürfen". Lesen Sie den Hilfetext bei "Matrix-basierte Sicherheit",
+ um mehr über das Konzept der matrix-basierten Sicherheit im Allgemeinen zu erfahren.
+
+ <p>
+ ACL-Rechte sind additiv. Dies bedeutet, dass die untenstehend erteilten Rechte für alle
+ Projekte als erteilt gelten.
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_ja.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_ja.html
new file mode 100644
index 0000000..771a8be
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_ja.html
@@ -0,0 +1,10 @@
+<div>
+ "行列による権限設定"の拡張し、プロジェクト毎に行列による権限設定することができます(ジョブの設定画面で行います)。
+
+ <p>
+ 例えば、"JoeはプロジェクトA、B、Cにアクセスできるが、Dは参照できない"といったことができます。
+ 行列による権限設定のコンセプトについては、"行列による権限設定"のヘルプを参照してください。
+
+ <p>
+ ここで設定した権限は、すべてのプロジェクトの権限に追加されます。
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_zh_CN.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_zh_CN.html
new file mode 100644
index 0000000..5cdd5cd
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_zh_CN.html
@@ -0,0 +1,9 @@
+<div>
+ 这个授权模型扩展自"安全矩阵",允许把下面的ACL(访问控制列表)矩阵附加到每个项目定义中(在Job配置页面).
+
+ <p>
+ 这允许你宣布类似这样的声明"约翰能够访问A,B和C,但是不能访问D." 查看"安全矩阵"的帮助文档来了解安全矩阵.
+
+ <p>
+ ACL配置是追加的,就是说下面的访问控制会追加到所有的项目配置中。
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_zh_TW.html b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_zh_TW.html
new file mode 100644
index 0000000..59856a2
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/ProjectMatrixAuthorizationStrategy/help_zh_TW.html
@@ -0,0 +1,11 @@
+<div>
+ 這是「矩陣型安全性」的擴充,可以分別對專案定義額外的存取控制清單 (ACL) 矩陣
+ (在作業設定畫面裡調整)。
+
+ <p>
+ 讓您能做到「Joe 可以看到 A, B, C 專案,但是看不到 D」這種程度的設定。
+ 可以看看「矩陣型安全性」的說明,了解矩陣型安全性的基本概念。
+
+ <p>
+ ACL 會逐一累加,所以下列授與的存取權限會影響到每一個專案。
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/hudson/security/table.css b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/table.css
new file mode 100644
index 0000000..3a83f93
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/hudson/security/table.css
@@ -0,0 +1,60 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+.global-matrix-authorization-strategy-table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px solid #D3D7CF;
+}
+
+.global-matrix-authorization-strategy-table TH {
+ padding: 0.2em;
+}
+
+.global-matrix-authorization-strategy-table TD.blank {
+ vertical-align: middle;
+ padding: 0.2em;
+}
+
+.global-matrix-authorization-strategy-table .caption-row TH {
+ font-weight: lighter;
+ writing-mode: tb-rl; /* works in IE, not FF */
+ padding: 0;
+}
+
+.global-matrix-authorization-strategy-table TD {
+ border: 1px solid #D3D7CF;
+}
+
+.global-matrix-authorization-strategy-table TD.left-most {
+ text-align: left;
+ border-left: none;
+ white-space: nowrap;
+}
+
+.global-matrix-authorization-strategy-table TD.stop {
+ border-top: 1px solid white;
+ border-right: 1px solid white;
+ border-bottom: 1px solid white;
+ white-space: nowrap;
+}
diff --git a/plugins/matrix-auth-plugin/src/main/resources/index.jelly b/plugins/matrix-auth-plugin/src/main/resources/index.jelly
new file mode 100644
index 0000000..164c34d
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/index.jelly
@@ -0,0 +1,3 @@
+<div>
+ Offers matrix-based security authorization strategies (global and per-project).
+</div>
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages.properties
new file mode 100644
index 0000000..785f7d1
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=Matrix-based security
+ProjectMatrixAuthorizationStrategy.DisplayName=Project-based Matrix Authorization Strategy
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_da.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_da.properties
new file mode 100644
index 0000000..6b3354e
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_da.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+ProjectMatrixAuthorizationStrategy.DisplayName=Projektbaseret matriceauthentificering
+GlobalMatrixAuthorizationStrategy.DisplayName=Matricebaseret sikkerhed
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_de.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_de.properties
new file mode 100644
index 0000000..bd78042
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_de.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=Matrix-basierte Sicherheit
+ProjectMatrixAuthorizationStrategy.DisplayName=Projektbasierte Matrix-Zugriffssteuerung
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_es.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_es.properties
new file mode 100644
index 0000000..fa77504
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_es.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=Configuraci\u00f3n de seguridad
+ProjectMatrixAuthorizationStrategy.DisplayName=Estrategia de seguridad para el proyecto
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_fr.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_fr.properties
new file mode 100644
index 0000000..d365a5f
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_fr.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=S\u00e9curit\u00e9 bas\u00e9e sur une matrice
+ProjectMatrixAuthorizationStrategy.DisplayName=Strat\u00e9gie d''authorisation matricielle bas\u00e9e sur les projets
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_ja.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_ja.properties
new file mode 100644
index 0000000..e7b3490
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_ja.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=\u884c\u5217\u306b\u3088\u308b\u6a29\u9650\u8a2d\u5b9a
+ProjectMatrixAuthorizationStrategy.DisplayName=\u884c\u5217\u306b\u3088\u308b\u6a29\u9650\u8a2d\u5b9a(\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5358\u4f4d)
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_nl.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_nl.properties
new file mode 100644
index 0000000..f224042
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_nl.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=Matrix-gebaseerde beveiliging
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_pt_BR.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_pt_BR.properties
new file mode 100644
index 0000000..0196867
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_pt_BR.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=Seguran\u00e7a baseada em matriz
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_ru.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_ru.properties
new file mode 100644
index 0000000..ceb2505
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_ru.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=\u041c\u0430\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_tr.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_tr.properties
new file mode 100644
index 0000000..cac816a
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_tr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=Matris-temelli G\u00fcvenlik
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_zh_CN.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_zh_CN.properties
new file mode 100644
index 0000000..02e0079
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_zh_CN.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=\u5b89\u5168\u77e9\u9635
+ProjectMatrixAuthorizationStrategy.DisplayName=\u9879\u76ee\u77e9\u9635\u6388\u6743\u7b56\u7565
diff --git a/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_zh_TW.properties b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_zh_TW.properties
new file mode 100644
index 0000000..dbba455
--- /dev/null
+++ b/plugins/matrix-auth-plugin/src/main/resources/org/jenkinsci/plugins/matrixauth/Messages_zh_TW.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright 2013 Jesse Glick.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalMatrixAuthorizationStrategy.DisplayName=\u77e9\u9663\u578b\u5b89\u5168\u6027
+ProjectMatrixAuthorizationStrategy.DisplayName=\u5c08\u6848\u578b\u77e9\u9663\u6388\u6b0a\u7b56\u7565
diff --git a/plugins/matrix-project-plugin/.gitignore b/plugins/matrix-project-plugin/.gitignore
new file mode 100644
index 0000000..37cf854
--- /dev/null
+++ b/plugins/matrix-project-plugin/.gitignore
@@ -0,0 +1,2 @@
+target
+work
diff --git a/plugins/matrix-project-plugin/pom.xml b/plugins/matrix-project-plugin/pom.xml
new file mode 100644
index 0000000..34a27f6
--- /dev/null
+++ b/plugins/matrix-project-plugin/pom.xml
@@ -0,0 +1,94 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.jenkins-ci.plugins</groupId>
+ <artifactId>plugin</artifactId>
+ <version>1.561</version>
+ </parent>
+ <artifactId>matrix-project</artifactId>
+ <version>1.3</version>
+ <packaging>hpi</packaging>
+ <name>Matrix Project Plugin</name>
+ <description>Multi-configuration (matrix) project type.</description>
+ <url>https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Project+Plugin</url>
+ <licenses>
+ <license>
+ <name>MIT License</name>
+ <url>http://opensource.org/licenses/MIT</url>
+ </license>
+ </licenses>
+ <scm>
+ <connection>scm:git:git://github.com/jenkinsci/${project.artifactId}-plugin.git</connection>
+ <developerConnection>scm:git:git at github.com:jenkinsci/${project.artifactId}-plugin.git</developerConnection>
+ <url>https://github.com/jenkinsci/${project.artifactId}-plugin</url>
+ <tag>matrix-project-1.3</tag>
+ </scm>
+ <repositories>
+ <repository>
+ <id>repo.jenkins-ci.org</id>
+ <url>http://repo.jenkins-ci.org/public/</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>repo.jenkins-ci.org</id>
+ <url>http://repo.jenkins-ci.org/public/</url>
+ </pluginRepository>
+ </pluginRepositories>
+ <dependencies>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.8.5</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <version>1.4.10</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>1.4.10</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.gmaven</groupId>
+ <artifactId>gmaven-plugin</artifactId>
+ <configuration>
+ <providerSelection>1.7</providerSelection>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.gmaven.runtime</groupId>
+ <artifactId>gmaven-runtime-1.7</artifactId>
+ <version>1.3</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Axis.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Axis.java
new file mode 100644
index 0000000..faec450
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Axis.java
@@ -0,0 +1,265 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.DescriptorExtensionList;
+import hudson.ExtensionPoint;
+import hudson.RestrictedSince;
+import hudson.Util;
+import hudson.matrix.MatrixBuild.MatrixBuildExecution;
+import hudson.model.AbstractDescribableImpl;
+import jenkins.model.Jenkins;
+import hudson.util.QuotedStringTokenizer;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * Configuration axis.
+ *
+ * <p>
+ * This class represents a single dimension of the configuration matrix.
+ * For example, the JAX-WS RI test configuration might include
+ * one axis "container={glassfish,tomcat,jetty}" and another axis
+ * "stax={sjsxp,woodstox}", and so on.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class Axis extends AbstractDescribableImpl<Axis> implements Comparable<Axis>, Iterable<String>, ExtensionPoint {
+ /**
+ * Name of this axis.
+ * Used as a variable name.
+ *
+ * @deprecated as of 1.373
+ * Use {@link #getName()}
+ */
+ public final String name;
+
+ /**
+ * Possible values for this axis.
+ *
+ * @deprecated as of 1.373
+ * Use {@link #getValues()}
+ */
+ @Restricted(NoExternalUse.class)
+ @RestrictedSince("1.463")
+ public final List<String> values;
+
+ public Axis(String name, List<String> values) {
+ if (values == null || values.isEmpty()) {
+ values = Collections.emptyList();
+ }
+ this.name = name;
+ this.values = new ArrayList<String>(values);
+ }
+
+ public Axis(String name, String... values) {
+ this(name,Arrays.asList(values));
+ }
+
+ /**
+ * Used to build {@link Axis} from form.
+ *
+ * Axis with empty values need to be removed later.
+ */
+ @DataBoundConstructor
+ public Axis(String name, String valueString) {
+ this.name = name;
+ this.values = new ArrayList<String>(Arrays.asList(Util.tokenize(valueString)));
+ }
+
+ /**
+ * Returns true if this axis is a system-reserved axis
+ * that <strike>has</strike> used to have af special treatment.
+ *
+ * @deprecated as of 1.373
+ * System vs user difference are generalized into extension point.
+ */
+ public boolean isSystem() {
+ return false;
+ }
+
+ public Iterator<String> iterator() {
+ return getValues().iterator();
+ }
+
+ public int size() {
+ return getValues().size();
+ }
+
+ public String value(int index) {
+ return getValues().get(index);
+ }
+
+ /**
+ * The inverse of {@link #value(int)}.
+ */
+ public int indexOf(String value) {
+ return values.indexOf(value);
+ }
+
+ /**
+ * Axis is fully ordered so that we can convert between a list of axis
+ * and a string unambiguously.
+ */
+ public int compareTo(Axis that) {
+ return this.name.compareTo(that.name);
+ }
+
+ /**
+ * Name of this axis.
+ * Used as a variable name.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Possible values for this axis.
+ */
+ public List<String> getValues() {
+ return Collections.unmodifiableList(values);
+ }
+
+ /**
+ * Called right at the beginning of {@link MatrixBuild} execution to allow {@link Axis} to update {@link #values}
+ * based on the current build.
+ *
+ * <p>
+ * Historically, axes values are considered static. They were assumed to reflect what the user has typed in,
+ * and their values are changed only when the project is reconfigured. So abstractions are built around this
+ * notion, and so for example {@link MatrixProject} has the current axes and their values, which it uses
+ * to render its UI.
+ *
+ * <p>
+ * So when the need was identified to change the values of axes per build, we decided that this be represented
+ * as a kind of project configuration update (where a project gets reconfigured every time a build runs), and
+ * this call back was added to allow {@link Axis} to update the next return value from the {@link #getValues()}
+ * (which is typically done by updating {@link #values}.)
+ *
+ * <p>
+ * While it is not strictly required, because of these historical reasons, UI will look better if
+ * Future calls to {@link Axis#getValues()} return the same values as what this method returns (until
+ * the next rebuild call).
+ *
+ * @param context
+ * The ongoing build. Never null.
+ * @return
+ * Never null. Returns the updated set of values.
+ * @since 1.471
+ */
+ public List<String> rebuild(MatrixBuildExecution context) {
+ return getValues();
+ }
+
+ @Override
+ public AxisDescriptor getDescriptor() {
+ return (AxisDescriptor)super.getDescriptor();
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder().append(name).append("={").append(Util.join(values,",")).append('}').toString();
+ }
+
+ /**
+ * Used for generating the config UI.
+ * If the axis is big and occupies a lot of space, use newline for separator
+ * to display multi-line text.
+ */
+ public String getValueString() {
+ int len=0;
+ for (String value : values)
+ len += value.length();
+ char delim = len>30 ? '\n' : ' ';
+ // Build string connected with delimiter, quoting as needed
+ StringBuilder buf = new StringBuilder(len+values.size()*3);
+ for (String value : values)
+ buf.append(delim).append(QuotedStringTokenizer.quote(value,""));
+ return buf.substring(1);
+ }
+
+ /**
+ * Parses the submitted form (where possible values are
+ * presented as a list of checkboxes) and creates an axis
+ */
+ public static Axis parsePrefixed(StaplerRequest req, String name) {
+ List<String> values = new ArrayList<String>();
+ String prefix = name+'.';
+
+ Enumeration e = req.getParameterNames();
+ while (e.hasMoreElements()) {
+ String paramName = (String) e.nextElement();
+ if(paramName.startsWith(prefix))
+ values.add(paramName.substring(prefix.length()));
+ }
+ if(values.isEmpty())
+ return null;
+ return new Axis(name,values);
+ }
+
+ /**
+ * Previously we used to persist {@link Axis}, but now those are divided into subtypes.
+ * So upon deserialization, resolve to the proper type.
+ */
+ public Object readResolve() {
+ if (getClass()!=Axis.class) return this;
+
+ /*
+ This method is necessary only because earlier versions of Jenkins treated
+ axis names "label" and "jdk" differently,
+ plus Axis was a concrete class, and we need to be able to read that back.
+ So this measure is not needed for newly added Axes.
+ */
+ if (getName().equals("jdk"))
+ return new JDKAxis(getValues());
+ if (getName().equals("label"))
+ return new LabelAxis(getName(),getValues());
+ return new TextAxis(getName(),getValues());
+ }
+
+ /**
+ * Returns all the registered {@link AxisDescriptor}s.
+ */
+ public static DescriptorExtensionList<Axis,AxisDescriptor> all() {
+ return Jenkins.getInstance().<Axis,AxisDescriptor>getDescriptorList(Axis.class);
+ }
+
+ /**
+ * Converts the selected value (which is among {@link #values}) and adds that to the given map,
+ * which serves as the build variables.
+ */
+ public void addBuildVariable(String value, Map<String,String> map) {
+ map.put(name,value);
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/AxisDescriptor.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/AxisDescriptor.java
new file mode 100644
index 0000000..7d93505
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/AxisDescriptor.java
@@ -0,0 +1,67 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010, InfraDNA, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.Util;
+import hudson.model.Descriptor;
+import hudson.model.Failure;
+import jenkins.model.Jenkins;
+import hudson.util.FormValidation;
+import org.kohsuke.stapler.QueryParameter;
+
+/**
+ * {@link Descriptor} for {@link Axis}
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public abstract class AxisDescriptor extends Descriptor<Axis> {
+ protected AxisDescriptor(Class<? extends Axis> clazz) {
+ super(clazz);
+ }
+
+ protected AxisDescriptor() {
+ }
+
+ /**
+ * Return false if the user shouldn't be able to create thie axis from the UI.
+ */
+ public boolean isInstantiable() {
+ return true;
+ }
+
+ /**
+ * Makes sure that the given name is good as a axis name.
+ */
+ public FormValidation doCheckName(@QueryParameter String value) {
+ if(Util.fixEmpty(value)==null)
+ return FormValidation.ok();
+
+ try {
+ Jenkins.checkGoodName(value);
+ return FormValidation.ok();
+ } catch (Failure e) {
+ return FormValidation.error(e.getMessage());
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/AxisList.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/AxisList.java
new file mode 100644
index 0000000..4ff672d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/AxisList.java
@@ -0,0 +1,108 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.thoughtworks.xstream.XStream;
+import hudson.Util;
+import hudson.util.RobustCollectionConverter;
+
+import javax.annotation.Nullable;
+import java.util.*;
+
+/**
+ * List of {@link Axis}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class AxisList extends ArrayList<Axis> {
+ public AxisList() {
+ }
+
+ public AxisList(Collection<? extends Axis> c) {
+ super(c);
+ }
+
+ public AxisList(Axis... c) {
+ this(Arrays.asList(c));
+ }
+
+ public Axis find(String name) {
+ for (Axis a : this) {
+ if(a.name.equals(name))
+ return a;
+ }
+ return null;
+ }
+
+ /**
+ * Creates a subset of the list that only contains the type assignable to the specified type.
+ */
+ public AxisList subList(Class<? extends Axis> subType) {
+ return new AxisList(Util.filter(this,subType));
+ }
+
+ @Override
+ public boolean add(Axis axis) {
+ return axis!=null && super.add(axis);
+ }
+
+ /**
+ * List up all the possible combinations of this list.
+ */
+ public Iterable<Combination> list() {
+ List<Set<String>> axesList = Lists.newArrayList();
+ for (Axis axis : this)
+ axesList.add(new LinkedHashSet<String>(axis.getValues()));
+
+ return Iterables.transform(Sets.cartesianProduct(axesList), new Function<List<String>, Combination>() {
+ public Combination apply(@Nullable List<String> strings) {
+ assert strings != null;
+ return new Combination(AxisList.this, strings);
+ }
+ });
+ }
+
+ /**
+ * {@link com.thoughtworks.xstream.converters.Converter} implementation for XStream.
+ */
+ public static final class ConverterImpl extends RobustCollectionConverter {
+ public ConverterImpl(XStream xs) {
+ super(xs);
+ }
+
+ @Override
+ public boolean canConvert(Class type) {
+ return type==AxisList.class;
+ }
+
+ @Override
+ protected Object createCollection(Class type) {
+ return new AxisList();
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Combination.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Combination.java
new file mode 100644
index 0000000..9ce0a4d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Combination.java
@@ -0,0 +1,265 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import groovy.lang.Binding;
+import hudson.Util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+/**
+ * A particular combination of {@link Axis} values.
+ *
+ * For example, when axes are "x={1,2},y={3,4}", then
+ * [x=1,y=3] is a combination (out of 4 possible combinations)
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class Combination extends TreeMap<String,String> implements Comparable<Combination> {
+
+ public Combination(AxisList axisList, List<String> values) {
+ for(int i=0; i<axisList.size(); i++)
+ super.put(axisList.get(i).getName(),values.get(i));
+ }
+
+ public Combination(AxisList axisList,String... values) {
+ this(axisList,Arrays.asList(values));
+ }
+
+ public Combination(Map<String,String> keyValuePairs) {
+ for (Map.Entry<String, String> e : keyValuePairs.entrySet())
+ super.put(e.getKey(),e.getValue());
+ }
+
+ public String get(Axis a) {
+ return get(a.getName());
+ }
+
+ /**
+ * Obtains the continuous unique index number of this {@link Combination}
+ * in the given {@link AxisList}.
+ */
+ public int toIndex(AxisList axis) {
+ int r = 0;
+ for (Axis a : axis) {
+ r *= a.size();
+ r += a.indexOf(get(a));
+ }
+ return r;
+ }
+
+ /**
+ * Evaluates the given Groovy expression with values bound from this combination.
+ *
+ * <p>
+ * For example, if this combination is a=X,b=Y, then expressions like <tt>a=="X"</tt> would evaluate to
+ * true.
+ */
+ public boolean evalGroovyExpression(AxisList axes, String expression) {
+ return evalGroovyExpression(axes, expression, new Binding());
+ }
+
+ /**
+ * @see #evalGroovyExpression(AxisList, String)
+ * @since 1.515
+ * @deprecated as of 1.528
+ * Use {@link FilterScript#apply(hudson.matrix.MatrixBuild.MatrixBuildExecution, Combination)}
+ */
+ public boolean evalGroovyExpression(AxisList axes, String expression, Binding binding) {
+ return FilterScript.parse(expression).apply(axes, this, binding);
+ }
+
+ public int compareTo(Combination that) {
+ int d = this.size()-that.size();
+ if(d!=0) return d;
+
+ Iterator<Map.Entry<String,String>> itr = this.entrySet().iterator();
+ Iterator<Map.Entry<String,String>> jtr = that.entrySet().iterator();
+ while(itr.hasNext()) {
+ Map.Entry<String,String> i = itr.next();
+ Map.Entry<String,String> j = jtr.next();
+
+ d = i.getKey().compareTo(j.getKey());
+ if(d!=0) return d;
+ d = i.getValue().compareTo(j.getValue());
+ if(d!=0) return d;
+ }
+ return 0;
+ }
+
+ /**
+ * Works like {@link #toString()} but only include the given axes.
+ */
+ public String toString(Collection<Axis> subset) {
+ if(size()==1 && subset.size()==1)
+ return values().iterator().next();
+
+ StringBuilder buf = new StringBuilder();
+ for (Axis a : subset) {
+ if(buf.length()>0) buf.append(',');
+ buf.append(a.getName()).append('=').append(get(a));
+ }
+ if(buf.length()==0) buf.append("default"); // special case to avoid 0-length name.
+ return buf.toString();
+ }
+
+ /**
+ * Gets the values that correspond to the specified axes, in their order.
+ */
+ public List<String> values(Collection<? extends Axis> axes) {
+ List<String> r = new ArrayList<String>(axes.size());
+ for (Axis a : axes)
+ r.add(get(a));
+ return r;
+ }
+
+ /**
+ * Converts to the ID string representation:
+ * <tt>axisName=value,axisName=value,...</tt>
+ *
+ * @param sep1
+ * The separator between multiple axes.
+ * @param sep2
+ * The separator between axis name and value.
+ */
+ public String toString(char sep1, char sep2) {
+ StringBuilder buf = new StringBuilder();
+ for (Map.Entry<String,String> e : entrySet()) {
+ if(buf.length()>0) buf.append(sep1);
+ buf.append(e.getKey()).append(sep2).append(e.getValue());
+ }
+ if(buf.length()==0) buf.append("default"); // special case to avoid 0-length name.
+ return buf.toString();
+ }
+
+ @Override
+ public String toString() {
+ return toString(',','=');
+ }
+
+ /**
+ * Gets the 8 character-wide hash code for this combination
+ */
+ public String digest() {
+ return Util.getDigestOf(toString());
+ }
+
+ /**
+ * Reverse operation of {@link #toString()}.
+ */
+ public static Combination fromString(String id) {
+ if(id.equals("default"))
+ return new Combination(Collections.<String,String>emptyMap());
+
+ Map<String,String> m = new HashMap<String,String>();
+ StringTokenizer tokens = new StringTokenizer(id, ",");
+ while(tokens.hasMoreTokens()) {
+ String token = tokens.nextToken();
+ int idx = token.indexOf('=');
+ if(idx<0)
+ throw new IllegalArgumentException("Can't parse "+id);
+ m.put(token.substring(0,idx),token.substring(idx+1));
+ }
+ return new Combination(m);
+ }
+
+ /**
+ * Creates compact string representation suitable for display purpose.
+ *
+ * <p>
+ * The string is made compact by looking for {@link Axis} whose values
+ * are unique, and omit the axis name.
+ */
+ public String toCompactString(AxisList axes) {
+ Set<String> nonUniqueAxes = new HashSet<String>();
+ Map<String,Axis> axisByValue = new HashMap<String,Axis>();
+
+ for (Axis a : axes) {
+ for (String v : a.getValues()) {
+ Axis old = axisByValue.put(v,a);
+ if(old!=null) {
+ // these two axes have colliding values
+ nonUniqueAxes.add(old.getName());
+ nonUniqueAxes.add(a.getName());
+ }
+ }
+ }
+
+ StringBuilder buf = new StringBuilder();
+ for (Map.Entry<String,String> e : entrySet()) {
+ if(buf.length()>0) buf.append(',');
+ if(nonUniqueAxes.contains(e.getKey()))
+ buf.append(e.getKey()).append('=');
+ buf.append(e.getValue());
+ }
+ if(buf.length()==0) buf.append("default"); // special case to avoid 0-length name.
+ return buf.toString();
+ }
+
+ // read-only
+ @Override
+ public void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void putAll(Map<? extends String, ? extends String> map) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String put(String key, String value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String remove(Object key) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Duck-typing for boolean expressions.
+ *
+ * @see Combination#evalGroovyExpression(AxisList,String)
+ */
+ public static final class BooleanCategory {
+ /**
+ * x -> y
+ */
+ public static Boolean implies(Boolean lhs, Boolean rhs) {
+ return !lhs || rhs;
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/DefaultAxisDescriptor.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/DefaultAxisDescriptor.java
new file mode 100644
index 0000000..96fb461
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/DefaultAxisDescriptor.java
@@ -0,0 +1,48 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010, InfraDNA, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.Extension;
+
+/**
+ * {@link AxisDescriptor} for manually entered default axis.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+ at Extension
+public class DefaultAxisDescriptor extends AxisDescriptor {
+ public DefaultAxisDescriptor() {
+ super(Axis.class);
+ }
+
+ @Override
+ public String getDisplayName() {
+ return "Axis";
+ }
+
+ @Override
+ public boolean isInstantiable() {
+ return false;
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/DefaultMatrixExecutionStrategyImpl.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/DefaultMatrixExecutionStrategyImpl.java
new file mode 100644
index 0000000..5c1f4eb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/DefaultMatrixExecutionStrategyImpl.java
@@ -0,0 +1,303 @@
+package hudson.matrix;
+
+import groovy.lang.GroovyRuntimeException;
+import hudson.AbortException;
+import hudson.Extension;
+import hudson.console.ModelHyperlinkNote;
+import hudson.matrix.MatrixBuild.MatrixBuildExecution;
+import hudson.matrix.listeners.MatrixBuildListener;
+import hudson.model.Action;
+import hudson.model.BuildListener;
+import hudson.model.Cause.UpstreamCause;
+import hudson.model.ParametersAction;
+import hudson.model.Queue;
+import hudson.model.ResourceController;
+import hudson.model.Result;
+import hudson.model.Run;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.TreeSet;
+import javax.annotation.Nullable;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+/**
+ * {@link MatrixExecutionStrategy} that captures historical behavior.
+ *
+ * <p>
+ * This class is somewhat complex because historically this wasn't an extension point and so
+ * people tried to put various logics that cover different use cases into one place.
+ * Going forward, people are encouraged to create subtypes to implement a custom logic that suits their needs.
+ *
+ * @author Kohsuke Kawaguchi
+ * @since 1.456
+ */
+public class DefaultMatrixExecutionStrategyImpl extends MatrixExecutionStrategy {
+ private volatile boolean runSequentially;
+
+ /**
+ * Filter to select a number of combinations to build first
+ */
+ private volatile String touchStoneCombinationFilter;
+
+ /**
+ * Required result on the touchstone combinations, in order to
+ * continue with the rest
+ */
+ private volatile Result touchStoneResultCondition;
+
+ private volatile MatrixConfigurationSorter sorter;
+
+ @DataBoundConstructor
+ public DefaultMatrixExecutionStrategyImpl(Boolean runSequentially, boolean hasTouchStoneCombinationFilter, String touchStoneCombinationFilter, Result touchStoneResultCondition, MatrixConfigurationSorter sorter) {
+ this(runSequentially!=null ? runSequentially : false,
+ hasTouchStoneCombinationFilter ? touchStoneCombinationFilter : null,
+ hasTouchStoneCombinationFilter ? touchStoneResultCondition : null,
+ sorter);
+ }
+
+ public DefaultMatrixExecutionStrategyImpl(boolean runSequentially, String touchStoneCombinationFilter, Result touchStoneResultCondition, MatrixConfigurationSorter sorter) {
+ this.runSequentially = runSequentially;
+ this.touchStoneCombinationFilter = touchStoneCombinationFilter;
+ this.touchStoneResultCondition = touchStoneResultCondition;
+ this.sorter = sorter;
+ }
+
+ public DefaultMatrixExecutionStrategyImpl() {
+ this(false,false,null,null,null);
+ }
+
+ public boolean getHasTouchStoneCombinationFilter() {
+ return touchStoneCombinationFilter!=null;
+ }
+
+ /**
+ * If true, {@link MatrixRun}s are run sequentially, instead of running in parallel.
+ *
+ * TODO: this should be subsumed by {@link ResourceController}.
+ */
+ public boolean isRunSequentially() {
+ return runSequentially;
+ }
+
+ public void setRunSequentially(boolean runSequentially) {
+ this.runSequentially = runSequentially;
+ }
+
+ public String getTouchStoneCombinationFilter() {
+ return touchStoneCombinationFilter;
+ }
+
+ public void setTouchStoneCombinationFilter(String touchStoneCombinationFilter) {
+ this.touchStoneCombinationFilter = touchStoneCombinationFilter;
+ }
+
+ public Result getTouchStoneResultCondition() {
+ return touchStoneResultCondition;
+ }
+
+ public void setTouchStoneResultCondition(Result touchStoneResultCondition) {
+ this.touchStoneResultCondition = touchStoneResultCondition;
+ }
+
+ public MatrixConfigurationSorter getSorter() {
+ return sorter;
+ }
+
+ public void setSorter(MatrixConfigurationSorter sorter) {
+ this.sorter = sorter;
+ }
+
+ @Override
+ public Result run(MatrixBuildExecution execution) throws InterruptedException, IOException {
+
+ Collection<MatrixConfiguration> touchStoneConfigurations = new HashSet<MatrixConfiguration>();
+ Collection<MatrixConfiguration> delayedConfigurations = new HashSet<MatrixConfiguration>();
+
+ filterConfigurations(
+ execution,
+ touchStoneConfigurations,
+ delayedConfigurations
+ );
+
+ if (notifyStartBuild(execution.getAggregators())) return Result.FAILURE;
+
+ if (sorter != null) {
+ touchStoneConfigurations = createTreeSet(touchStoneConfigurations, sorter);
+ delayedConfigurations = createTreeSet(delayedConfigurations, sorter);
+ }
+
+ if(!runSequentially)
+ for(MatrixConfiguration c : touchStoneConfigurations)
+ scheduleConfigurationBuild(execution, c);
+
+ Result r = Result.SUCCESS;
+ for (MatrixConfiguration c : touchStoneConfigurations) {
+ if(runSequentially)
+ scheduleConfigurationBuild(execution, c);
+ MatrixRun run = waitForCompletion(execution, c);
+ notifyEndBuild(run,execution.getAggregators());
+ r = r.combine(getResult(run));
+ }
+
+ PrintStream logger = execution.getListener().getLogger();
+
+ if (touchStoneResultCondition != null && r.isWorseThan(touchStoneResultCondition)) {
+ logger.printf("Touchstone configurations resulted in %s, so aborting...%n", r);
+ return r;
+ }
+
+ if(!runSequentially)
+ for(MatrixConfiguration c : delayedConfigurations)
+ scheduleConfigurationBuild(execution, c);
+
+ for (MatrixConfiguration c : delayedConfigurations) {
+ if(runSequentially)
+ scheduleConfigurationBuild(execution, c);
+ MatrixRun run = waitForCompletion(execution, c);
+ notifyEndBuild(run,execution.getAggregators());
+ logger.println(Messages.MatrixBuild_Completed(ModelHyperlinkNote.encodeTo(c), getResult(run)));
+ r = r.combine(getResult(run));
+ }
+
+ return r;
+ }
+
+ private void filterConfigurations(
+ final MatrixBuildExecution execution,
+ final Collection<MatrixConfiguration> touchStoneConfigurations,
+ final Collection<MatrixConfiguration> delayedConfigurations
+ ) throws AbortException {
+
+ final MatrixBuild build = execution.getBuild();
+
+ final FilterScript combinationFilter = FilterScript.parse(execution.getProject().getCombinationFilter(), FilterScript.ACCEPT_ALL);
+ final FilterScript touchStoneFilter = FilterScript.parse(getTouchStoneCombinationFilter(), FilterScript.REJECT_ALL);
+
+ try {
+
+ for (MatrixConfiguration c: execution.getActiveConfigurations()) {
+
+ if (!MatrixBuildListener.buildConfiguration(build, c)) continue; // skip rebuild
+
+ final Combination combination = c.getCombination();
+
+ if (touchStoneFilter != null && touchStoneFilter.apply(execution, combination)) {
+ touchStoneConfigurations.add(c);
+ } else if (combinationFilter.apply(execution, combination)) {
+ delayedConfigurations.add(c);
+ }
+ }
+ } catch (GroovyRuntimeException ex) {
+
+ PrintStream logger = execution.getListener().getLogger();
+ logger.println(ex.getMessage());
+ ex.printStackTrace(logger);
+ throw new AbortException("Failed executing combination filter");
+ }
+ }
+
+ private Result getResult(@Nullable MatrixRun run) {
+ // null indicates that the run was cancelled before it even gets going
+ return run!=null ? run.getResult() : Result.ABORTED;
+ }
+
+ private boolean notifyStartBuild(List<MatrixAggregator> aggregators) throws InterruptedException, IOException {
+ for (MatrixAggregator a : aggregators)
+ if(!a.startBuild())
+ return true;
+ return false;
+ }
+
+ private void notifyEndBuild(MatrixRun b, List<MatrixAggregator> aggregators) throws InterruptedException, IOException {
+ if (b==null) return; // can happen if the configuration run gets cancelled before it gets started.
+ for (MatrixAggregator a : aggregators)
+ if(!a.endRun(b))
+ throw new AbortException();
+ }
+
+ private <T> TreeSet<T> createTreeSet(Collection<T> items, Comparator<T> sorter) {
+ TreeSet<T> r = new TreeSet<T>(sorter);
+ r.addAll(items);
+ return r;
+ }
+
+ /** Function to start schedule a single configuration
+ *
+ * This function schedule a build of a configuration passing all of the Matrixchild actions
+ * that are present in the parent build.
+ *
+ * @param exec Matrix build that is the parent of the configuration
+ * @param c Configuration to schedule
+ */
+ private void scheduleConfigurationBuild(MatrixBuildExecution exec, MatrixConfiguration c) {
+ MatrixBuild build = exec.getBuild();
+ exec.getListener().getLogger().println(Messages.MatrixBuild_Triggering(ModelHyperlinkNote.encodeTo(c)));
+
+ // filter the parent actions for those that can be passed to the individual jobs.
+ List<Action> childActions = new ArrayList<Action>(build.getActions(MatrixChildAction.class));
+ childActions.addAll(build.getActions(ParametersAction.class)); // used to implement MatrixChildAction
+ c.scheduleBuild(childActions, new UpstreamCause((Run)build));
+ }
+
+ private MatrixRun waitForCompletion(MatrixBuildExecution exec, MatrixConfiguration c) throws InterruptedException, IOException {
+ BuildListener listener = exec.getListener();
+ String whyInQueue = "";
+ long startTime = System.currentTimeMillis();
+
+ // wait for the completion
+ int appearsCancelledCount = 0;
+ while(true) {
+ MatrixRun b = c.getBuildByNumber(exec.getBuild().getNumber());
+
+ // two ways to get beyond this. one is that the build starts and gets done,
+ // or the build gets cancelled before it even started.
+ if(b!=null && !b.isBuilding()) {
+ Result buildResult = b.getResult();
+ if(buildResult!=null)
+ return b;
+ }
+ Queue.Item qi = c.getQueueItem();
+ if(b==null && qi==null)
+ appearsCancelledCount++;
+ else
+ appearsCancelledCount = 0;
+
+ if(appearsCancelledCount>=5) {
+ // there's conceivably a race condition in computating b and qi, as their computation
+ // are not synchronized. There are indeed several reports of Hudson incorrectly assuming
+ // builds being cancelled. See
+ // http://www.nabble.com/Master-slave-problem-tt14710987.html and also
+ // http://www.nabble.com/Anyone-using-AccuRev-plugin--tt21634577.html#a21671389
+ // because of this, we really make sure that the build is cancelled by doing this 5
+ // times over 5 seconds
+ listener.getLogger().println(Messages.MatrixBuild_AppearsCancelled(ModelHyperlinkNote.encodeTo(c)));
+ return null;
+ }
+
+ if(qi!=null) {
+ // if the build seems to be stuck in the queue, display why
+ String why = qi.getWhy();
+ if(why != null && !why.equals(whyInQueue) && System.currentTimeMillis()-startTime>5000) {
+ listener.getLogger().print("Configuration " + ModelHyperlinkNote.encodeTo(c)+" is still in the queue: ");
+ qi.getCauseOfBlockage().print(listener); //this is still shown on the same line
+ whyInQueue = why;
+ }
+ }
+
+ Thread.sleep(1000);
+ }
+ }
+
+ @Extension
+ public static class DescriptorImpl extends MatrixExecutionStrategyDescriptor {
+ @Override
+ public String getDisplayName() {
+ return "Classic";
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/FilterScript.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/FilterScript.java
new file mode 100644
index 0000000..f43cfcd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/FilterScript.java
@@ -0,0 +1,136 @@
+package hudson.matrix;
+
+import groovy.lang.Binding;
+import groovy.lang.GroovyShell;
+import groovy.lang.Script;
+import hudson.Util;
+import hudson.matrix.Combination.BooleanCategory;
+import hudson.matrix.MatrixBuild.MatrixBuildExecution;
+import hudson.model.ParameterValue;
+import hudson.model.ParametersAction;
+
+import java.util.Map;
+
+import static java.lang.Boolean.*;
+
+/**
+ * Groovy filter script that accepts or rejects matrix {@link Combination}.
+ *
+ * Instances of this class is thread unsafe.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+class FilterScript {
+ private final Script script;
+
+ FilterScript(Script script) {
+ this.script = script;
+ }
+
+ /**
+ * @param context
+ * Variables the script will see.
+ */
+ boolean evaluate(Binding context) {
+ script.setBinding(context);
+ return TRUE.equals(script.run());
+ }
+
+ /**
+ * Obtains a number N such that "N%M==0" would create
+ * a reasonable sparse matrix for integer M.
+ *
+ * <p>
+ * This is bit like {@link Combination#toIndex(AxisList)}, but instead
+ * of creating a continuous number (which often maps different
+ * values of the same axis to the same index in modulo N residue ring,
+ * we use a prime number P as the base. I think this guarantees the uniform
+ * distribution in any N smaller than 2P (but proof, anyone?)
+ */
+ private long toModuloIndex(AxisList axis, Combination c) {
+ long r = 0;
+ for (Axis a : axis) {
+ r += a.indexOf(c.get(a));
+ r *= 31;
+ }
+ return r;
+ }
+
+ /**
+ * Applies the filter to the specified combination in the context of {@code context}.
+ */
+ public boolean apply(MatrixBuildExecution context, Combination combination) {
+ return apply(context.getProject().getAxes(), combination, getConfiguredBinding(context));
+ }
+
+ /*package*/ boolean apply(AxisList axes, Combination c, Binding binding) {
+ for (Map.Entry<String, String> e : c.entrySet())
+ binding.setVariable(e.getKey(),e.getValue());
+
+ binding.setVariable("index",toModuloIndex(axes,c));
+ binding.setVariable("uniqueId", c.toIndex(axes));
+
+ return evaluate(binding);
+ }
+
+ private Binding getConfiguredBinding(final MatrixBuildExecution execution) {
+ final Binding binding = new Binding();
+ final ParametersAction parameters = execution.getBuild().getAction(ParametersAction.class);
+
+ if (parameters == null) return binding;
+
+ for (final ParameterValue pv: parameters) {
+ if (pv == null) continue;
+ final String name = pv.getName();
+ final String value = pv.createVariableResolver(null).resolve(name);
+ binding.setVariable(name, value);
+ }
+
+ return binding;
+ }
+
+ public static FilterScript parse(String expression) {
+ return parse(expression, ACCEPT_ALL);
+ }
+
+ /**
+ * @since 1.541
+ */
+ public static FilterScript parse(String expression, FilterScript defaultScript) {
+ if (Util.fixEmptyAndTrim(expression)==null)
+ return defaultScript;
+
+ GroovyShell shell = new GroovyShell(FilterScript.class.getClassLoader());
+
+ return new FilterScript(shell.parse("use("+BooleanCategory.class.getName().replace('$','.')+") {"+expression+"}"));
+ }
+
+ private static final Script EMPTY = new Script() {
+ @Override
+ public Object run() {
+ return true;
+ }
+ };
+
+ /**
+ * Constant that always applies to any combination.
+ * @since 1.541
+ */
+ /*package*/ static final FilterScript ACCEPT_ALL = new FilterScript(EMPTY) {
+ @Override
+ public boolean apply(MatrixBuildExecution context, Combination combination) {
+ return true;
+ }
+ };
+
+ /**
+ * Constant that does not apply to any combination.
+ * @since 1.541
+ */
+ /*package*/ static final FilterScript REJECT_ALL = new FilterScript(EMPTY) {
+ @Override
+ public boolean apply(MatrixBuildExecution context, Combination combination) {
+ return false;
+ }
+ };
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/JDKAxis.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/JDKAxis.java
new file mode 100644
index 0000000..fecd908
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/JDKAxis.java
@@ -0,0 +1,72 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010, InfraDNA, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.Extension;
+import jenkins.model.Jenkins;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * {@link Axis} that selects available JDKs.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class JDKAxis extends Axis {
+ /**
+ * JDK axis was used to be stored as a plain "Axis" with the name "jdk",
+ * so it cannot be configured by any other name.
+ */
+ public JDKAxis(List<String> values) {
+ super("jdk", values);
+ }
+
+ @DataBoundConstructor
+ public JDKAxis(String[] values) {
+ super("jdk", Arrays.asList(values));
+ }
+
+ @Override
+ public boolean isSystem() {
+ return true;
+ }
+
+ @Extension
+ public static class DescriptorImpl extends AxisDescriptor {
+ @Override
+ public String getDisplayName() {
+ return Messages.JDKAxis_DisplayName();
+ }
+
+ /**
+ * If there's no JDK configured, there's no point in this axis.
+ */
+ @Override
+ public boolean isInstantiable() {
+ return !Jenkins.getInstance().getJDKs().isEmpty();
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LabelAxis.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LabelAxis.java
new file mode 100644
index 0000000..bd32df0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LabelAxis.java
@@ -0,0 +1,85 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010, InfraDNA, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.Extension;
+import hudson.Functions;
+import hudson.Util;
+import jenkins.model.Jenkins;
+import hudson.model.labels.LabelAtom;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+import java.util.List;
+
+/**
+ * {@link Axis} that selects label expressions.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class LabelAxis extends Axis {
+ @DataBoundConstructor
+ public LabelAxis(String name, List<String> values) {
+ super(name, values);
+ }
+
+ @Override
+ public boolean isSystem() {
+ return true;
+ }
+
+ @Override
+ public String getValueString() {
+ return Util.join(getValues(),"/");
+ }
+
+ @Extension
+ public static class DescriptorImpl extends AxisDescriptor {
+ @Override
+ public String getDisplayName() {
+ return Messages.LabelAxis_DisplayName();
+ }
+
+ /**
+ * If there's no distributed build set up, it's pointless to provide this axis.
+ */
+ @Override
+ public boolean isInstantiable() {
+ Jenkins h = Jenkins.getInstance();
+ return !h.getNodes().isEmpty() || !h.clouds.isEmpty();
+ }
+
+ private String jsstr(String body, Object... args) {
+ return '\"'+Functions.jsStringEscape(String.format(body,args))+'\"';
+ }
+
+ public String buildLabelCheckBox(LabelAtom la, LabelAxis instance) {
+ return jsstr("<input type='checkbox' name='values' json='%s' ",
+ Functions.htmlAttributeEscape(la.getName()))
+ +String.format("+has(%s)+",jsstr(la.getName()))
+ +jsstr("/><label class='attach-previous'>%s (%s)</label>",
+ la.getName(),la.getDescription());
+ // '${h.jsStringEscape('<input type="checkbox" name="values" json="'+h.htmlAttributeEscape(l.name)+'" ')}'+has("${h.jsStringEscape(l.name)}")+'${h.jsStringEscape('/><label class="attach-previous">'+l.name+' ('+l.description+')</label>')}'
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LabelExpAxis.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LabelExpAxis.java
new file mode 100644
index 0000000..281438d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LabelExpAxis.java
@@ -0,0 +1,97 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010, InfraDNA, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.Extension;
+import hudson.Util;
+import jenkins.model.Jenkins;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.kohsuke.stapler.DataBoundConstructor;
+
+/**
+ * {@link Axis} that selects label expressions.
+ *
+ * @since 1.403
+ */
+public class LabelExpAxis extends Axis {
+
+ @DataBoundConstructor
+ public LabelExpAxis(String name, String values) {
+ super(name, getExprValues(values));
+ }
+
+ public LabelExpAxis(String name, List<String> values) {
+ super(name, values);
+ }
+
+ @Override
+ public boolean isSystem() {
+ return true;
+ }
+
+ @Override
+ public DescriptorImpl getDescriptor() {
+ return (DescriptorImpl) Jenkins.getInstance().getDescriptorOrDie(getClass());
+ }
+
+ public String getValuesString(){
+ StringBuffer sb = new StringBuffer();
+ for(String item: this.getValues()){
+ sb.append(item);
+ sb.append("\n");
+ }
+ return sb.toString();
+ }
+
+ @Extension
+ public static class DescriptorImpl extends AxisDescriptor {
+ @Override
+ public String getDisplayName() {
+ return Messages.LabelExpAxis_DisplayName();
+ }
+
+ /**
+ * If there's no distributed build set up, it's pointless to provide this axis.
+ */
+ @Override
+ public boolean isInstantiable() {
+ Jenkins h = Jenkins.getInstance();
+ return !h.getNodes().isEmpty() || !h.clouds.isEmpty();
+ }
+ }
+
+ public static List<String> getExprValues(String valuesString){
+ List<String> expressions = new LinkedList<String>();
+ String[] exprs = valuesString.split("\n");
+ for(String expr: exprs){
+ expressions.add(Util.fixEmptyAndTrim(expr));
+ }
+ return expressions;
+ }
+
+}
+
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Layouter.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Layouter.java
new file mode 100644
index 0000000..051b8f6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/Layouter.java
@@ -0,0 +1,225 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.AbstractList;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * Used to assist thegeneration of config table.
+ *
+ * <p>
+ * {@link Axis Axes} are split into four groups.
+ * {@link #x Ones that are displayed as columns},
+ * {@link #y Ones that are displayed as rows},
+ * {@link #z Ones that are listed as bullet items inside table cell},
+ * and those which only have one value, and therefore doesn't show up
+ * in the table.
+ *
+ * <p>
+ * Because of object reuse inside {@link Layouter}, this class is not thread-safe.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public abstract class Layouter<T> {
+ public final List<Axis> x,y,z;
+ /**
+ * Axes that only have one value.
+ */
+ private final List<Axis> trivial = new ArrayList<Axis>();
+ /**
+ * Number of data columns and rows.
+ */
+ private int xSize, ySize, zSize;
+
+
+ public Layouter(List<Axis> x, List<Axis> y, List<Axis> z) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ init();
+ }
+
+ /**
+ * Automatically split axes to x,y, and z.
+ */
+ public Layouter(AxisList axisList) {
+ x = new ArrayList<Axis>();
+ y = new ArrayList<Axis>();
+ z = new ArrayList<Axis>();
+
+ List<Axis> nonTrivialAxes = new ArrayList<Axis>();
+ for (Axis a : axisList) {
+ if(a.size()>1)
+ nonTrivialAxes.add(a);
+ else
+ trivial.add(a);
+ }
+
+ switch(nonTrivialAxes.size()) {
+ case 0:
+ break;
+ case 1:
+ z.add(nonTrivialAxes.get(0));
+ break;
+ case 2:
+ // use the longer axis in Y
+ Axis a = nonTrivialAxes.get(0);
+ Axis b = nonTrivialAxes.get(1);
+ x.add(a.size() > b.size() ? b : a);
+ y.add(a.size() > b.size() ? a : b);
+ break;
+ default:
+ // for size > 3, use x and y, and try to pack y more
+ for( int i=0; i<nonTrivialAxes.size(); i++ )
+ (i%3==1?x:y).add(nonTrivialAxes.get(i));
+ }
+ init();
+ }
+
+ private void init() {
+ xSize = calc(x,-1);
+ ySize = calc(y,-1);
+ zSize = calc(z,-1);
+ }
+
+ /**
+ * Computes the width of n-th X-axis.
+ */
+ public int width(int n) {
+ return calc(x,n);
+ }
+
+ /**
+ * Computes the repeat count of n-th X-axis.
+ */
+ public int repeatX(int n) {
+ int w = 1;
+ for( n--; n>=0; n-- )
+ w *= x.get(n).size();
+ return w;
+ }
+
+ /**
+ * Computes the width of n-th Y-axis.
+ */
+ public int height(int n) {
+ return calc(y,n);
+ }
+
+ private int calc(List<Axis> l, int n) {
+ int w = 1;
+ for( n++ ; n<l.size(); n++ )
+ w *= l.get(n).size();
+ return w;
+ }
+
+ /**
+ * Gets list of {@link Row}s to be displayed.
+ *
+ * The {@link Row} object is reused, so every value
+ * in collection returns the same object (but with different values.)
+ */
+ public List<Row> getRows() {
+ return new AbstractList<Row>() {
+ final Row row = new Row();
+ public Row get(int index) {
+ row.index = index;
+ return row;
+ }
+
+ public int size() {
+ return ySize;
+ }
+ };
+ }
+
+ /**
+ * Represents a row, which is a collection of {@link Column}s.
+ */
+ public final class Row extends AbstractList<Column> {
+ private int index;
+ final Column col = new Column();
+
+ @Override
+ public Column get(int index) {
+ col.xp = index;
+ col.yp = Row.this.index;
+ return col;
+ }
+
+ @Override
+ public int size() {
+ return xSize;
+ }
+
+ public String drawYHeader(int n) {
+ int base = calc(y,n);
+ if(index/base==(index-1)/base && index!=0) return null; // no need to draw a new value
+
+ Axis axis = y.get(n);
+ return axis.value((index/base)%axis.getValues().size());
+ }
+ }
+
+ protected abstract T getT(Combination c);
+
+ public final class Column extends AbstractList<T> {
+ /**
+ * Cell position.
+ */
+ private int xp,yp;
+
+ private final Map<String,String> m = new HashMap<String,String>();
+
+ public T get(int zp) {
+ m.clear();
+ buildMap(xp,x);
+ buildMap(yp,y);
+ buildMap(zp,z);
+ for (Axis a : trivial) {
+ if (a.size() > 0) {
+ m.put(a.name, a.value(0));
+ }
+ }
+ return getT(new Combination(m));
+ }
+
+ private void buildMap(int p, List<Axis> axes) {
+ int n = p;
+ for( int i= axes.size()-1; i>=0; i-- ) {
+ Axis a = axes.get(i);
+ m.put(a.name, a.value(n%a.size()));
+ n /= a.size();
+ }
+ }
+
+ public int size() {
+ return zSize;
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LinkedLogRotator.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LinkedLogRotator.java
new file mode 100644
index 0000000..c468703
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/LinkedLogRotator.java
@@ -0,0 +1,77 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.model.Job;
+import hudson.tasks.LogRotator;
+
+import java.io.IOException;
+import java.util.logging.Logger;
+
+/**
+ * {@link LogRotator} for {@link MatrixConfiguration},
+ * which discards the builds if and only if it's discarded
+ * in the parent.
+ *
+ * <p>
+ * Because of the serialization compatibility, we can't easily
+ * refactor {@link LogRotator} into a contract and an implementation.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+final class LinkedLogRotator extends LogRotator {
+ LinkedLogRotator(int artifactDaysToKeep, int artifactNumToKeep) {
+ super(-1, -1, artifactDaysToKeep, artifactNumToKeep);
+ }
+
+ /**
+ * @deprecated since 1.369
+ * Use {@link #LinkedLogRotator(int, int)}
+ */
+ LinkedLogRotator() {
+ super(-1, -1, -1, -1);
+ }
+
+ @Override
+ public void perform(Job _job) throws IOException, InterruptedException {
+ // Let superclass handle clearing artifacts, if configured:
+ super.perform(_job);
+ MatrixConfiguration job = (MatrixConfiguration) _job;
+
+ // copy it to the array because we'll be deleting builds as we go.
+ for( MatrixRun r : job.getBuilds().toArray(new MatrixRun[0]) ) {
+ if(job.getParent().getBuildByNumber(r.getNumber())==null) {
+ LOGGER.fine("Deleting "+r.getFullDisplayName());
+ r.delete();
+ }
+ }
+
+ if(!job.isActiveConfiguration() && job.getLastBuild()==null) {
+ LOGGER.fine("Deleting "+job.getFullDisplayName()+" because the configuration is inactive and there's no builds");
+ job.delete();
+ }
+ }
+
+ private static final Logger LOGGER = Logger.getLogger(LinkedLogRotator.class.getName());
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixAggregatable.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixAggregatable.java
new file mode 100644
index 0000000..5074988
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixAggregatable.java
@@ -0,0 +1,69 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.model.JobProperty;
+import hudson.tasks.BuildWrapper;
+import hudson.tasks.Publisher;
+import hudson.ExtensionPoint;
+import hudson.Launcher;
+import hudson.model.BuildListener;
+
+/**
+ * {@link Publisher}, {@link JobProperty}, {@link BuildWrapper} can optionally implement this interface
+ * to perform result aggregation across {@link MatrixRun}.
+ *
+ * <p>
+ * This is useful for example to aggregate all the test results
+ * in {@link MatrixRun} into a single table/graph.
+ *
+ * @author Kohsuke Kawaguchi
+ * @since 1.115
+ */
+public interface MatrixAggregatable extends ExtensionPoint {
+ /**
+ * Creates a new instance of the aggregator.
+ *
+ * <p>
+ * This method is called during the build of
+ * {@link MatrixBuild} and the created aggregator
+ * will perform the aggregation.
+ *
+ * @param build
+ * The build for which the aggregation shall happen. Never null.
+ * @param launcher
+ * Can be used to launch processes during the build.
+ * @param listener
+ * Progress report and errors during the aggregation should
+ * be sent to this object. Never null.
+ *
+ * @return
+ * null if the implementation is not willing to contribute
+ * an aggregator.
+ *
+ * @see MatrixAggregator#build
+ * @see MatrixAggregator#listener
+ */
+ MatrixAggregator createAggregator(MatrixBuild build, Launcher launcher, BuildListener listener);
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixAggregator.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixAggregator.java
new file mode 100644
index 0000000..dbdfcaf
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixAggregator.java
@@ -0,0 +1,105 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.ExtensionPoint;
+import hudson.Launcher;
+import hudson.model.BuildListener;
+import hudson.tasks.BuildStep;
+import hudson.tasks.Publisher;
+
+import java.io.IOException;
+
+/**
+ * Performs the aggregation of {@link MatrixRun} results
+ * into {@link MatrixBuild}.
+ *
+ * <p>
+ * {@link MatrixAggregator} is a transitive stateful mutable object.
+ * Unlike {@link Publisher}, it is not persisted. Instead, a fresh
+ * instance is created for each {@link MatrixBuild}, and various
+ * methods on this class are invoked in the event callback style
+ * as the build progresses.
+ *
+ * <p>
+ * The end result of the aggregation should be
+ * {@link MatrixBuild#addAction(Action) contributed as actions}.
+ *
+ * @author Kohsuke Kawaguchi
+ * @since 1.115
+ * @see MatrixAggregatable
+ */
+public abstract class MatrixAggregator implements ExtensionPoint {
+ /**
+ * The build in progress. Never null.
+ */
+ protected final MatrixBuild build;
+
+ protected final Launcher launcher;
+ /**
+ * The listener to send the output to. Never null.
+ */
+ protected final BuildListener listener;
+
+ protected MatrixAggregator(MatrixBuild build, Launcher launcher, BuildListener listener) {
+ this.build = build;
+ this.launcher = launcher;
+ this.listener = listener;
+ }
+
+ /**
+ * Called before the build starts.
+ *
+ * @return
+ * true if the build can continue, false if there was an error
+ * and the build needs to be aborted.
+ * @see BuildStep#prebuild(AbstractBuild,BuildListener)
+ */
+ public boolean startBuild() throws InterruptedException, IOException {
+ return true;
+ }
+
+ /**
+ * Called whenever one run is completed.
+ *
+ * @param run
+ * The completed {@link MatrixRun} object. Always non-null.
+ * @return
+ * See {@link #startBuild()} for the return value semantics.
+ */
+ public boolean endRun(MatrixRun run) throws InterruptedException, IOException {
+ return true;
+ }
+
+ /**
+ * Called after all the {@link MatrixRun}s have been completed
+ * to indicate that the build is about to finish.
+ *
+ * @return
+ * See {@link #startBuild()} for the return value semantics.
+ */
+ public boolean endBuild() throws InterruptedException, IOException {
+ return true;
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixBuild.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixBuild.java
new file mode 100644
index 0000000..746fb36
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixBuild.java
@@ -0,0 +1,410 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2011, Sun Microsystems, Inc., Kohsuke Kawaguchi,
+ * Red Hat, Inc., Tom Huybrechts
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.AbortException;
+import hudson.Functions;
+import hudson.Util;
+import hudson.console.ModelHyperlinkNote;
+import hudson.matrix.MatrixConfiguration.ParentBuildAction;
+import hudson.model.AbstractBuild;
+import hudson.model.AbstractProject;
+import hudson.model.BuildListener;
+import hudson.model.Executor;
+import hudson.model.Fingerprint;
+import hudson.model.Queue;
+import hudson.model.Queue.Item;
+import hudson.model.Result;
+import hudson.tasks.junit.JUnitResultArchiver;
+import hudson.tasks.test.TestResultAggregator;
+import hudson.util.HttpResponses;
+import jenkins.model.Jenkins;
+import org.kohsuke.stapler.Stapler;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.StaplerResponse;
+import org.kohsuke.stapler.export.Exported;
+import org.kohsuke.stapler.interceptor.RequirePOST;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+
+/**
+ * Build of {@link MatrixProject}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixBuild extends AbstractBuild<MatrixProject,MatrixBuild> {
+ private AxisList axes;
+
+ /**
+ * If non-null, the {@link MatrixBuild} originates from the given build number.
+ */
+ private Integer baseBuild;
+
+ public MatrixBuild(MatrixProject job) throws IOException {
+ super(job);
+ }
+
+ public MatrixBuild(MatrixProject job, Calendar timestamp) {
+ super(job, timestamp);
+ }
+
+ public MatrixBuild(MatrixProject project, File buildDir) throws IOException {
+ super(project, buildDir);
+ }
+
+ public Object readResolve() {
+ // MatrixBuild.axes added in 1.285; default to parent axes for old data
+ if (axes==null)
+ axes = getParent().getAxes();
+ return this;
+ }
+
+ /**
+ * Deletes the build and all matrix configurations in this build when the button is pressed.
+ */
+ @RequirePOST
+ public void doDoDeleteAll( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException {
+ checkPermission(DELETE);
+
+ // We should not simply delete the build if it has been explicitly
+ // marked to be preserved, or if the build should not be deleted
+ // due to dependencies!
+ String why = getWhyKeepLog();
+ if (why!=null) {
+ sendError(hudson.model.Messages.Run_UnableToDelete(getFullDisplayName(), why), req, rsp);
+ return;
+ }
+
+ List<MatrixRun> runs = getExactRuns();
+ for(MatrixRun run : runs){
+ why = run.getWhyKeepLog();
+ if (why!=null) {
+ sendError(hudson.model.Messages.Run_UnableToDelete(getFullDisplayName(), why), req, rsp);
+ return;
+ }
+ run.delete();
+ }
+ delete();
+ rsp.sendRedirect2(req.getContextPath()+'/' + getParent().getUrl());
+ }
+
+
+ /**
+ * Used by view to render a ball for {@link MatrixRun}.
+ */
+ public final class RunPtr {
+ public final Combination combination;
+ private RunPtr(Combination c) { this.combination=c; }
+
+ public MatrixRun getRun() {
+ return MatrixBuild.this.getRun(combination);
+ }
+
+ /**
+ * Return the URL to the run that this pointer references.
+ *
+ * In the typical case, this creates {@linkplain #getShortUrl() a very short relative url}.
+ * If the referenced run is a nearest previous build, this method returns a longer URL to that exact build.
+ * {@link MatrixRun} which belongs to a given build {@link MatrixBuild}.
+ * If there is no run which belongs to the build, return url of run, which belongs to the nearest previous build.
+ */
+ public String getNearestRunUrl() {
+ MatrixRun r = getRun();
+ if (r==null) return null;
+ if (getNumber()==r.getNumber())
+ return getShortUrl()+'/';
+ else
+ return Stapler.getCurrentRequest().getContextPath()+'/'+r.getUrl();
+ }
+
+ public String getShortUrl() {
+ return Util.rawEncode(combination.toString());
+ }
+
+ public String getTooltip() {
+ MatrixRun r = getRun();
+ if(r!=null) return r.getIconColor().getDescription();
+ Queue.Item item = Jenkins.getInstance().getQueue().getItem(getParent().getItem(combination));
+ if(item!=null)
+ return item.getWhy();
+ return null; // fall back
+ }
+ }
+
+ public Layouter<RunPtr> getLayouter() {
+ // axes can be null if build page is access right when build starts
+ return axes == null ? null : new Layouter<RunPtr>(axes) {
+ protected RunPtr getT(Combination c) {
+ return new RunPtr(c);
+ }
+ };
+ }
+
+ /**
+ * Sets the base build from which this build is derived.
+ * @since 1.416
+ */
+ public void setBaseBuild(MatrixBuild baseBuild) {
+ this.baseBuild = (baseBuild==null || baseBuild==getPreviousBuild()) ? null : baseBuild.getNumber();
+ }
+
+ /**
+ * Returns the base {@link MatrixBuild} that this build originates from.
+ * <p>
+ * If this build is a partial build, unexecuted {@link MatrixRun}s are delegated to this build number.
+ */
+ public MatrixBuild getBaseBuild() {
+ return baseBuild==null ? getPreviousBuild() : getParent().getBuildByNumber(baseBuild);
+ }
+
+ /**
+ * Gets the {@link MatrixRun} in this build that corresponds
+ * to the given combination.
+ */
+ public MatrixRun getRun(Combination c) {
+ MatrixConfiguration config = getParent().getItem(c);
+ if(config==null) return null;
+ return getRunForConfiguration(config);
+ }
+
+ /**
+ * Like {@link #getRun(Combination)}, but do not approximate the result by earlier execution
+ * of the given combination (which is done for partial rebuild of the matrix.)
+ */
+ public MatrixRun getExactRun(Combination c) {
+ MatrixConfiguration config = getParent().getItem(c);
+ if(config==null) return null;
+ return config.getBuildByNumber(getNumber());
+ }
+
+ /**
+ * Returns all {@link MatrixRun}s for this {@link MatrixBuild}.
+ */
+ @Exported
+ public List<MatrixRun> getRuns() {
+ List<MatrixRun> r = new ArrayList<MatrixRun>();
+ for(MatrixConfiguration c : getParent().getItems()) {
+ MatrixRun b = getRunForConfiguration(c);
+ if (b != null) r.add(b);
+ }
+ return r;
+ }
+
+ private MatrixRun getRunForConfiguration(MatrixConfiguration c) {
+ for (MatrixBuild b=this; b!=null; b=b.getBaseBuild()) {
+ MatrixRun r = c.getBuildByNumber(b.getNumber());
+ if (r!=null) return r;
+ }
+ return null;
+ }
+
+ /**
+ * Returns all {@link MatrixRun}s for exactly this {@link MatrixBuild}.
+ * <p>
+ * Unlike {@link #getRuns()}, this method excludes those runs
+ * that didn't run and got inherited.
+ * @since 1.413
+ */
+ public List<MatrixRun> getExactRuns() {
+ List<MatrixRun> r = new ArrayList<MatrixRun>();
+ for(MatrixConfiguration c : getParent().getItems()) {
+ MatrixRun b = c.getBuildByNumber(getNumber());
+ if (b != null) r.add(b);
+ }
+ return r;
+ }
+
+ @Override
+ public String getWhyKeepLog() {
+ MatrixBuild b = getNextBuild();
+ if (isLinkedBy(b))
+ return Messages.MatrixBuild_depends_on_this(b.getDisplayName());
+ return super.getWhyKeepLog();
+ }
+
+ /**
+ * @return True if another {@link MatrixBuild} build (passed as a parameter) depends on this build.
+ * @since 1.481
+ */
+ public boolean isLinkedBy(MatrixBuild b) {
+ if(null == b)
+ return false;
+ for(MatrixConfiguration c : b.getParent().getActiveConfigurations()) {
+ MatrixRun r = c.getNearestOldBuild(b.getNumber());
+ if (r != null && r.getNumber()==getNumber())
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * True if this build didn't do a full build and it is depending on the result of the previous build.
+ */
+ public boolean isPartial() {
+ for(MatrixConfiguration c : getParent().getActiveConfigurations()) {
+ MatrixRun b = c.getNearestOldBuild(getNumber());
+ if (b != null && b.getNumber()!=getNumber())
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public Object getDynamic(String token, StaplerRequest req, StaplerResponse rsp) {
+ try {
+ MatrixRun item = getRun(Combination.fromString(token));
+ if(item!=null) {
+ if (item.getNumber()==this.getNumber())
+ return item;
+ else {
+ // redirect the user to the correct URL
+ String url = Functions.joinPath(item.getUrl(), req.getRestOfPath());
+ String qs = req.getQueryString();
+ if (qs!=null) url+='?'+qs;
+ throw HttpResponses.redirectViaContextPath(url);
+ }
+ }
+ } catch (IllegalArgumentException _) {
+ // failed to parse the token as Combination. Must be something else
+ }
+ return super.getDynamic(token,req,rsp);
+ }
+
+ @Override
+ public void run() {
+ execute(new MatrixBuildExecution());
+ }
+
+ @Override
+ public Fingerprint.RangeSet getDownstreamRelationship(AbstractProject that) {
+ Fingerprint.RangeSet rs = super.getDownstreamRelationship(that);
+ for(MatrixRun run : getRuns())
+ rs.add(run.getDownstreamRelationship(that));
+ return rs;
+ }
+
+ /**
+ * Object that lives from the start of {@link MatrixBuild} execution to its end.
+ *
+ * Used to keep track of things that are needed only during the build.
+ */
+ public class MatrixBuildExecution extends AbstractBuildExecution {
+ private final List<MatrixAggregator> aggregators = new ArrayList<MatrixAggregator>();
+ private Set<MatrixConfiguration> activeConfigurations;
+
+ /**
+ * Snapshot of {@link MatrixProject#getActiveConfigurations()} to ensure
+ * that the build will use a consistent view of it.
+ */
+ public Set<MatrixConfiguration> getActiveConfigurations() {
+ return activeConfigurations;
+ }
+
+ /**
+ * Aggregators attached to this build execution, that are notified
+ * of every start/end of {@link MatrixRun}.
+ */
+ public List<MatrixAggregator> getAggregators() {
+ return aggregators;
+ }
+
+ protected Result doRun(BuildListener listener) throws Exception {
+ MatrixProject p = getProject();
+ PrintStream logger = listener.getLogger();
+
+ // give axes a chance to rebuild themselves
+ activeConfigurations = p.rebuildConfigurations(this);
+
+ // list up aggregators
+ listUpAggregators(p.getPublishers().values());
+ listUpAggregators(p.getProperties().values());
+ listUpAggregators(p.getBuildWrappers().values());
+
+ axes = p.getAxes();
+
+ try {
+ return p.getExecutionStrategy().run(this);
+ } catch( InterruptedException e ) {
+ logger.println("Aborted");
+ Executor x = Executor.currentExecutor();
+ x.recordCauseOfInterruption(MatrixBuild.this, listener);
+ return x.abortResult();
+ } catch (AbortException e) {
+ logger.println(e.getMessage());
+ return Result.FAILURE;
+ } finally {
+ // if the build was aborted in the middle. Cancel all the configuration builds.
+ Queue q = Jenkins.getInstance().getQueue();
+ synchronized(q) {// avoid micro-locking in q.cancel.
+ final int n = getNumber();
+ for (MatrixConfiguration c : activeConfigurations) {
+ for (Item i : q.getItems(c)) {
+ ParentBuildAction a = i.getAction(ParentBuildAction.class);
+ if (a!=null && a.parent==getBuild()) {
+ q.cancel(i);
+ logger.println(Messages.MatrixBuild_Cancelled(ModelHyperlinkNote.encodeTo(c)));
+ }
+ }
+ MatrixRun b = c.getBuildByNumber(n);
+ if(b!=null && b.isBuilding()) {// executor can spend some time in post production state, so only cancel in-progress builds.
+ Executor exe = b.getExecutor();
+ if(exe!=null) {
+ logger.println(Messages.MatrixBuild_Interrupting(ModelHyperlinkNote.encodeTo(b)));
+ exe.interrupt();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void listUpAggregators(Collection<?> values) {
+ for (Object v : values) {
+ if (v instanceof MatrixAggregatable) {
+ MatrixAggregatable ma = (MatrixAggregatable) v;
+ MatrixAggregator a = ma.createAggregator(MatrixBuild.this, launcher, listener);
+ if(a!=null)
+ aggregators.add(a);
+ } else if (v instanceof JUnitResultArchiver) { // originally assignable to MatrixAggregatable
+ aggregators.add(new TestResultAggregator(MatrixBuild.this, launcher, listener));
+ }
+ }
+ }
+
+ public void post2(BuildListener listener) throws Exception {
+ for (MatrixAggregator a : aggregators)
+ a.endBuild();
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixChildAction.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixChildAction.java
new file mode 100644
index 0000000..a43e59d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixChildAction.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012, Chris Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.model.Action;
+import hudson.model.Queue;
+import hudson.model.Queue.Task;
+
+/**
+ * Optional interface for {@link Action}s that are used as parameters
+ * to {@link Queue#schedule(Task, int, Action...)} to indicate that they
+ * want to be also passed to the {@link MatrixRun}s from its parent {@link MatrixBuild}.
+ *
+ * @author Chris Johnson
+ * @since 1.481
+ */
+public interface MatrixChildAction extends Action {
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfiguration.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfiguration.java
new file mode 100644
index 0000000..9704a35
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfiguration.java
@@ -0,0 +1,432 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Tom Huybrechts
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.EnvVars;
+import hudson.Util;
+import hudson.model.Action;
+import hudson.model.Executor;
+import hudson.model.InvisibleAction;
+import hudson.model.Node;
+import hudson.model.Queue.QueueAction;
+import hudson.model.TaskListener;
+import hudson.util.AlternativeUiTextProvider;
+import hudson.util.DescribableList;
+import hudson.model.AbstractBuild;
+import hudson.model.Cause;
+import hudson.model.CauseAction;
+import hudson.model.DependencyGraph;
+import hudson.model.Descriptor;
+import jenkins.model.BuildDiscarder;
+import jenkins.model.Jenkins;
+import hudson.model.Item;
+import hudson.model.ItemGroup;
+import hudson.model.JDK;
+import hudson.model.Label;
+import hudson.model.ParametersAction;
+import hudson.model.Project;
+import hudson.model.SCMedItem;
+import hudson.model.Queue.NonBlockingTask;
+import hudson.model.Cause.LegacyCodeCause;
+import hudson.scm.SCM;
+import jenkins.scm.SCMCheckoutStrategy;
+import hudson.tasks.BuildWrapper;
+import hudson.tasks.Builder;
+import hudson.tasks.LogRotator;
+import hudson.tasks.Publisher;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * One configuration of {@link MatrixProject}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixConfiguration extends Project<MatrixConfiguration,MatrixRun> implements SCMedItem, NonBlockingTask {
+ /**
+ * The actual value combination.
+ */
+ private transient /*final*/ Combination combination;
+
+ /**
+ * Hash value of {@link #combination}. Cached for efficiency.
+ */
+ private transient String digestName;
+
+ public MatrixConfiguration(MatrixProject parent, Combination c) {
+ super(parent,c.toString());
+ setCombination(c);
+ }
+
+ @Override
+ public void onLoad(ItemGroup<? extends Item> parent, String name) throws IOException {
+ // directory name is not a name for us --- it's taken from the combination name
+ super.onLoad(parent, combination.toString());
+ }
+
+ @Override
+ public EnvVars getEnvironment(Node node, TaskListener listener) throws IOException, InterruptedException {
+ EnvVars env = super.getEnvironment(node, listener);
+
+ AxisList axes = getParent().getAxes();
+ for (Map.Entry<String,String> e : getCombination().entrySet()) {
+ Axis a = axes.find(e.getKey());
+ if (a!=null)
+ a.addBuildVariable(e.getValue(),env); // TODO: hijacking addBuildVariable but perhaps we need addEnvVar?
+ else
+ env.put(e.getKey(), e.getValue());
+ }
+
+ return env;
+ }
+
+ @Override
+ protected void updateTransientActions(){
+ // This method is exactly the same as in {@link #AbstractProject}.
+ // Enabling to call this method from MatrixProject is the only reason for overriding.
+ super.updateTransientActions();
+ }
+
+ @Override
+ public boolean isConcurrentBuild() {
+ return getParent().isConcurrentBuild();
+ }
+
+ @Override
+ public void setConcurrentBuild(boolean b) throws IOException {
+ throw new UnsupportedOperationException("The setting can be only changed at MatrixProject");
+ }
+
+ /**
+ * Used during loading to set the combination back.
+ */
+ /*package*/ void setCombination(Combination c) {
+ this.combination = c;
+ this.digestName = c.digest().substring(0,8);
+ }
+
+ /**
+ * Build numbers are always synchronized with the parent.
+ *
+ * <p>
+ * Computing this is bit tricky. Several considerations:
+ *
+ * <ol>
+ * <li>A new configuration build #N is started while the parent build #N is building,
+ * and when that happens we want to return N.
+ * <li>But the configuration build #N is done before the parent build #N finishes,
+ * and when that happens we want to return N+1 because that's going to be the next one.
+ * <li>Configuration builds might skip some numbers if the parent build is aborted
+ * before this configuration is built.
+ * <li>If nothing is building right now and the last build of the parent is #N,
+ * then we want to return N+1.
+ * </ol>
+ */
+ @Override
+ public int getNextBuildNumber() {
+ AbstractBuild<?,?> lb = getParent().getLastBuild();
+
+ while (lb!=null && lb.isBuilding()) {
+ lb = lb.getPreviousBuild();
+ }
+ if(lb==null) return 0;
+
+ int n=lb.getNumber()+1;
+
+ lb = getLastBuild();
+ if(lb!=null)
+ n = Math.max(n,lb.getNumber()+1);
+
+ return n;
+ }
+
+ @Override
+ public int assignBuildNumber() throws IOException {
+ int nb = getNextBuildNumber();
+ MatrixRun r = getLastBuild();
+ if(r!=null && r.getNumber()>=nb) // make sure we don't schedule the same build twice
+ throw new IllegalStateException("Build #"+nb+" is already completed");
+ return nb;
+ }
+
+ @Override
+ public String getDisplayName() {
+ return combination.toCompactString(getParent().getAxes());
+ }
+
+ @Override
+ public MatrixProject getParent() {
+ return (MatrixProject)super.getParent();
+ }
+
+ /**
+ * Get the actual combination of the axes values for this {@link MatrixConfiguration}
+ */
+ public Combination getCombination() {
+ return combination;
+ }
+
+ /**
+ * Since {@link MatrixConfiguration} is always invoked from {@link MatrixRun}
+ * once and just once, there's no point in having a quiet period.
+ */
+ @Override
+ public int getQuietPeriod() {
+ return 0;
+ }
+
+ /**
+ * Inherit the value from the parent.
+ */
+ @Override
+ public int getScmCheckoutRetryCount() {
+ return getParent().getScmCheckoutRetryCount();
+ }
+
+ /**
+ * Inherit the value from the parent.
+ */
+ @Override
+ public SCMCheckoutStrategy getScmCheckoutStrategy() {
+ return getParent().getScmCheckoutStrategy();
+ }
+
+ @Override
+ public boolean isConfigurable() {
+ return false;
+ }
+
+ @Override
+ protected Class<MatrixRun> getBuildClass() {
+ return MatrixRun.class;
+ }
+
+ @Override
+ protected MatrixRun newBuild() throws IOException {
+ List<Action> actions = Executor.currentExecutor().getCurrentWorkUnit().context.actions;
+ MatrixBuild lb = getParent().getLastBuild();
+ for (Action a : actions) {
+ if (a instanceof ParentBuildAction) {
+ MatrixBuild _lb = ((ParentBuildAction) a).parent;
+ if (_lb != null) {
+ lb = _lb;
+ }
+ }
+ }
+
+ if (lb == null) {
+ throw new IOException("cannot start a build of " + getFullName() + " since its parent has no builds at all");
+ }
+
+ // for every MatrixRun there should be a parent MatrixBuild
+ MatrixRun lastBuild = new MatrixRun(this, lb.getTimestamp());
+
+ lastBuild.number = lb.getNumber();
+
+ _getRuns().put(lastBuild);
+ return lastBuild;
+ }
+
+ @Override
+ protected void buildDependencyGraph(DependencyGraph graph) {
+ }
+
+ @Override
+ public MatrixConfiguration asProject() {
+ return this;
+ }
+
+ @Override
+ public Label getAssignedLabel() {
+ // combine all the label axes by &&.
+ String expr;
+ String exprSlave = Util.join(combination.values(getParent().getAxes().subList(LabelAxis.class)), "&&");
+ String exprLabel = Util.join(combination.values(getParent().getAxes().subList(LabelExpAxis.class)), "&&");
+ if(!exprSlave.equals("") && !exprLabel.equals("")){
+ expr = exprSlave + "&&" + exprLabel;
+ } else{
+ expr = (exprSlave.equals("")) ? exprLabel : exprSlave;
+ }
+ return Jenkins.getInstance().getLabel(Util.fixEmpty(expr));
+ }
+
+ @Override
+ public String getPronoun() {
+ return AlternativeUiTextProvider.get(PRONOUN, this, Messages.MatrixConfiguration_Pronoun());
+ }
+
+ @Override
+ public JDK getJDK() {
+ return Jenkins.getInstance().getJDK(combination.get("jdk"));
+ }
+
+//
+// inherit build setting from the parent project
+//
+ @Override
+ public List<Builder> getBuilders() {
+ return getParent().getBuilders();
+ }
+
+ @Override
+ public Map<Descriptor<Publisher>, Publisher> getPublishers() {
+ return getParent().getPublishers();
+ }
+
+ @Override
+ public DescribableList<Builder, Descriptor<Builder>> getBuildersList() {
+ return getParent().getBuildersList();
+ }
+
+ @Override
+ public DescribableList<Publisher, Descriptor<Publisher>> getPublishersList() {
+ return getParent().getPublishersList();
+ }
+
+ @Override
+ public Map<Descriptor<BuildWrapper>, BuildWrapper> getBuildWrappers() {
+ return getParent().getBuildWrappers();
+ }
+
+ @Override
+ public DescribableList<BuildWrapper, Descriptor<BuildWrapper>> getBuildWrappersList() {
+ return getParent().getBuildWrappersList();
+ }
+
+ @Override
+ public Publisher getPublisher(Descriptor<Publisher> descriptor) {
+ return getParent().getPublisher(descriptor);
+ }
+
+ @Override
+ public BuildDiscarder getBuildDiscarder() {
+ // TODO: LinkedLogRotator doesn't work very well in the face of pluggable BuildDiscarder but I don't know what to do
+ BuildDiscarder bd = getParent().getBuildDiscarder();
+ if (bd instanceof LogRotator) {
+ LogRotator lr = (LogRotator) bd;
+ return new LinkedLogRotator(lr.getArtifactDaysToKeep(),lr.getArtifactNumToKeep());
+ }
+ return new LinkedLogRotator();
+ }
+
+ @Override
+ public SCM getScm() {
+ return getParent().getScm();
+ }
+
+ /*package*/ String getDigestName() {
+ return digestName;
+ }
+
+ /**
+ * JDK cannot be set on {@link MatrixConfiguration} because
+ * it's controlled by {@link MatrixProject}.
+ * @deprecated
+ * Not supported.
+ */
+ @Override
+ public void setJDK(JDK jdk) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @deprecated
+ * Value is controlled by {@link MatrixProject}.
+ */
+ @Override
+ public void setBuildDiscarder(BuildDiscarder logRotator) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Returns true if this configuration is a configuration
+ * currently in use today (as opposed to the ones that are
+ * there only to keep the past record.)
+ *
+ * @see MatrixProject#getActiveConfigurations()
+ */
+ public boolean isActiveConfiguration() {
+ return getParent().getActiveConfigurations().contains(this);
+ }
+
+ /**
+ * On Cygwin, path names cannot be longer than 256 chars.
+ * See http://cygwin.com/ml/cygwin/2005-04/msg00395.html and
+ * http://www.nabble.com/Windows-Filename-too-long-errors-t3161089.html for
+ * the background of this issue. Setting this flag to true would
+ * cause Jenkins to use cryptic but short path name, giving more room for
+ * jobs to use longer path names.
+ */
+ public static boolean useShortWorkspaceName = Boolean.getBoolean(MatrixConfiguration.class.getName()+".useShortWorkspaceName");
+
+ /**
+ * @deprecated
+ * Use {@link #scheduleBuild(ParametersAction, Cause)}. Since 1.283
+ */
+ public boolean scheduleBuild(ParametersAction parameters) {
+ return scheduleBuild(parameters, new LegacyCodeCause());
+ }
+
+ /** Starts the build with the ParametersAction that are passed in.
+ *
+ * @param parameters
+ * Can be null.
+ * @deprecated
+ * Use {@link #scheduleBuild(List, Cause)}. Since 1.480
+ */
+ public boolean scheduleBuild(ParametersAction parameters, Cause c) {
+ return scheduleBuild(Collections.singletonList(parameters), c);
+ }
+ /**
+ * Starts the build with the actions that are passed in.
+ *
+ * @param actions Can be null.
+ * @param c Reason for starting the build
+ */
+ public boolean scheduleBuild(List<? extends Action> actions, Cause c) {
+ List<Action> allActions = new ArrayList<Action>();
+
+ if(actions != null)
+ allActions.addAll(actions);
+
+ allActions.add(new ParentBuildAction());
+ allActions.add(new CauseAction(c));
+
+ return Jenkins.getInstance().getQueue().schedule2(this, getQuietPeriod(), allActions ).isAccepted();
+ }
+
+ /**
+ *
+ */
+ public static class ParentBuildAction extends InvisibleAction implements QueueAction {
+ public transient MatrixBuild parent = (MatrixBuild)Executor.currentExecutor().getCurrentExecutable();
+ public boolean shouldSchedule(List<Action> actions) {
+ return true;
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfigurationSorter.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfigurationSorter.java
new file mode 100644
index 0000000..5066b71
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfigurationSorter.java
@@ -0,0 +1,36 @@
+package hudson.matrix;
+
+import hudson.ExtensionPoint;
+import hudson.model.AbstractDescribableImpl;
+import hudson.util.FormValidation;
+
+import java.util.Comparator;
+
+/**
+ * Add sorting for configurations {@link MatrixConfiguration}s of matrix job {@link MatrixProject}
+ *
+ * @since 1.439
+ * @author Lucie Votypkova
+ * @see MatrixConfigurationSorterDescriptor
+ */
+public abstract class MatrixConfigurationSorter extends AbstractDescribableImpl<MatrixConfigurationSorter> implements ExtensionPoint, Comparator<MatrixConfiguration> {
+
+ /**
+ * Checks if this sorter is properly configured and applicable for the given project.
+ *
+ * <p>
+ * This method is invoked when the configuration is submitted to ensure that the sorter is compatible
+ * with the current project configuration (most probably with its {@link Axis}.)
+ *
+ * @param p
+ * Project for which this sorter is being used for.
+ * @throws FormValidation
+ * If you need to report an error to the user and reject the form submission.
+ */
+ public abstract void validate(MatrixProject p) throws FormValidation;
+
+ @Override
+ public MatrixConfigurationSorterDescriptor getDescriptor() {
+ return (MatrixConfigurationSorterDescriptor)super.getDescriptor();
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfigurationSorterDescriptor.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfigurationSorterDescriptor.java
new file mode 100644
index 0000000..e4c4726
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixConfigurationSorterDescriptor.java
@@ -0,0 +1,27 @@
+package hudson.matrix;
+
+import hudson.DescriptorExtensionList;
+import hudson.model.Descriptor;
+import jenkins.model.Jenkins;
+
+/**
+ * Descriptor for {@link MatrixConfigurationSorter}.
+ *
+ * @author Kohsuke Kawaguchi
+ * @since 1.439
+ */
+public abstract class MatrixConfigurationSorterDescriptor extends Descriptor<MatrixConfigurationSorter> {
+ protected MatrixConfigurationSorterDescriptor(Class<? extends MatrixConfigurationSorter> clazz) {
+ super(clazz);
+ }
+
+ protected MatrixConfigurationSorterDescriptor() {
+ }
+
+ /**
+ * Returns all the registered {@link MatrixConfigurationSorterDescriptor}s.
+ */
+ public static DescriptorExtensionList<MatrixConfigurationSorter,MatrixConfigurationSorterDescriptor> all() {
+ return Jenkins.getInstance().<MatrixConfigurationSorter,MatrixConfigurationSorterDescriptor>getDescriptorList(MatrixConfigurationSorter.class);
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixExecutionStrategy.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixExecutionStrategy.java
new file mode 100644
index 0000000..3394842
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixExecutionStrategy.java
@@ -0,0 +1,60 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012, CloudBees, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.ExtensionPoint;
+import hudson.matrix.MatrixBuild.MatrixBuildExecution;
+import hudson.model.AbstractDescribableImpl;
+import hudson.model.BuildListener;
+import hudson.model.Result;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Controls the execution sequence of {@link MatrixConfiguration} when {@link MatrixProject} builds,
+ * including what degree it gets serialized/parallelled, how the whole build is abandoned when
+ * some fails, etc.
+ *
+ * @author Kohsuke Kawaguchi
+ * @since 1.456
+ */
+public abstract class MatrixExecutionStrategy extends AbstractDescribableImpl<MatrixExecutionStrategy> implements ExtensionPoint {
+ public Result run(MatrixBuildExecution execution) throws InterruptedException, IOException {
+ return run(execution.getBuild(), execution.getAggregators(), execution.getListener());
+ }
+
+ /**
+ * @deprecated
+ * Override {@link #run(MatrixBuild.MatrixBuildExecution)}
+ */
+ public Result run(MatrixBuild build, List<MatrixAggregator> aggregators, BuildListener listener) throws InterruptedException, IOException {
+ throw new UnsupportedOperationException(getClass()+" needs to override run(MatrixBuildExecution)");
+ }
+
+ @Override
+ public MatrixExecutionStrategyDescriptor getDescriptor() {
+ return (MatrixExecutionStrategyDescriptor)super.getDescriptor();
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixExecutionStrategyDescriptor.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixExecutionStrategyDescriptor.java
new file mode 100644
index 0000000..b554e5d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixExecutionStrategyDescriptor.java
@@ -0,0 +1,48 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012, CloudBees, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.DescriptorExtensionList;
+import hudson.model.Descriptor;
+import jenkins.model.Jenkins;
+
+/**
+ * @author Kohsuke Kawaguchi
+ * @since 1.456
+ */
+public abstract class MatrixExecutionStrategyDescriptor extends Descriptor<MatrixExecutionStrategy> {
+ protected MatrixExecutionStrategyDescriptor(Class<? extends MatrixExecutionStrategy> clazz) {
+ super(clazz);
+ }
+
+ protected MatrixExecutionStrategyDescriptor() {
+ }
+
+ /**
+ * Returns all the registered {@link MatrixExecutionStrategyDescriptor}s.
+ */
+ public static DescriptorExtensionList<MatrixExecutionStrategy,MatrixExecutionStrategyDescriptor> all() {
+ return Jenkins.getInstance().<MatrixExecutionStrategy,MatrixExecutionStrategyDescriptor>getDescriptorList(MatrixExecutionStrategy.class);
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixProject.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixProject.java
new file mode 100644
index 0000000..183e039
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixProject.java
@@ -0,0 +1,988 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2011, Sun Microsystems, Inc., Kohsuke Kawaguchi,
+ * Jorg Heymans, Red Hat, Inc., id:cactusman
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import hudson.CopyOnWrite;
+import hudson.Extension;
+import hudson.Util;
+import hudson.XmlFile;
+import hudson.init.InitMilestone;
+import hudson.init.Initializer;
+import hudson.matrix.MatrixBuild.MatrixBuildExecution;
+import hudson.model.AbstractProject;
+import hudson.model.Action;
+import hudson.model.BuildableItemWithBuildWrappers;
+import hudson.model.DependencyGraph;
+import hudson.model.Descriptor;
+import hudson.model.Descriptor.FormException;
+import hudson.model.Item;
+import hudson.model.ItemGroup;
+import hudson.model.Items;
+import hudson.model.JDK;
+import hudson.model.Job;
+import hudson.model.Label;
+import hudson.model.Node;
+import hudson.model.ParameterDefinition;
+import hudson.model.ParametersDefinitionProperty;
+import hudson.model.Queue.FlyweightTask;
+import hudson.model.Result;
+import hudson.model.Run;
+import hudson.model.SCMedItem;
+import hudson.model.Saveable;
+import hudson.model.TopLevelItem;
+import hudson.slaves.WorkspaceList;
+import hudson.tasks.BuildStep;
+import hudson.tasks.BuildWrapper;
+import hudson.tasks.BuildWrappers;
+import hudson.tasks.Builder;
+import hudson.tasks.Publisher;
+import hudson.tasks.test.AggregatedTestResultAction;
+import hudson.triggers.Trigger;
+import hudson.util.AlternativeUiTextProvider;
+import hudson.util.CopyOnWriteMap;
+import hudson.util.DescribableList;
+import hudson.util.FormValidation;
+import hudson.util.FormValidation.Kind;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.annotation.Nullable;
+import javax.servlet.ServletException;
+import jenkins.model.Jenkins;
+import jenkins.scm.SCMCheckoutStrategyDescriptor;
+import net.sf.json.JSONObject;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+import org.kohsuke.stapler.HttpResponse;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.StaplerResponse;
+import org.kohsuke.stapler.TokenList;
+import org.kohsuke.stapler.export.Exported;
+
+/**
+ * {@link Job} that allows you to run multiple different configurations
+ * from a single setting.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixProject extends AbstractProject<MatrixProject,MatrixBuild> implements TopLevelItem, SCMedItem, ItemGroup<MatrixConfiguration>, Saveable, FlyweightTask, BuildableItemWithBuildWrappers {
+ /**
+ * Configuration axes.
+ */
+ private volatile AxisList axes = new AxisList();
+
+ /**
+ * The filter that is applied to combinations. It is a Groovy if condition.
+ * This can be null, which means "true".
+ *
+ * @see #getCombinationFilter()
+ */
+ private volatile String combinationFilter;
+
+ /**
+ * List of active {@link Builder}s configured for this project.
+ */
+ private DescribableList<Builder,Descriptor<Builder>> builders =
+ new DescribableList<Builder,Descriptor<Builder>>(this);
+
+ /**
+ * List of active {@link Publisher}s configured for this project.
+ */
+ private DescribableList<Publisher,Descriptor<Publisher>> publishers =
+ new DescribableList<Publisher,Descriptor<Publisher>>(this);
+
+ /**
+ * List of active {@link BuildWrapper}s configured for this project.
+ */
+ private DescribableList<BuildWrapper,Descriptor<BuildWrapper>> buildWrappers =
+ new DescribableList<BuildWrapper,Descriptor<BuildWrapper>>(this);
+
+ /**
+ * All {@link MatrixConfiguration}s, keyed by their {@link MatrixConfiguration#getName() names}.
+ */
+ private transient /*final*/ Map<Combination,MatrixConfiguration> configurations = new CopyOnWriteMap.Tree<Combination,MatrixConfiguration>();
+
+ /**
+ * @see #getActiveConfigurations()
+ */
+ @CopyOnWrite
+ private transient /*final*/ Set<MatrixConfiguration> activeConfigurations = new LinkedHashSet<MatrixConfiguration>();
+
+ /**
+ * @deprecated as of 1.456
+ * Moved to {@link DefaultMatrixExecutionStrategyImpl}
+ */
+ @Deprecated
+ private transient Boolean runSequentially;
+
+ /**
+ * Filter to select a number of combinations to build first
+ * @deprecated as of 1.456
+ * Moved to {@link DefaultMatrixExecutionStrategyImpl}
+ */
+ @Deprecated
+ private transient String touchStoneCombinationFilter;
+
+ /**
+ * Required result on the touchstone combinations, in order to
+ * continue with the rest
+ * @deprecated as of 1.456
+ * Moved to {@link DefaultMatrixExecutionStrategyImpl}
+ */
+ @Deprecated
+ private transient Result touchStoneResultCondition;
+
+ /**
+ * @deprecated as of 1.456
+ * Moved to {@link DefaultMatrixExecutionStrategyImpl}
+ */
+ @Deprecated
+ private transient MatrixConfigurationSorter sorter;
+
+ private MatrixExecutionStrategy executionStrategy;
+
+ /**
+ * Custom workspace location for {@link MatrixConfiguration}s.
+ *
+ * <p>
+ * (Historically, we used {@link AbstractProject#customWorkspace} + some unique suffix (see {@link MatrixConfiguration#useShortWorkspaceName})
+ * for custom workspace, but we now separated that so that the user has more control.
+ *
+ * <p>
+ * If null, the historical semantics is assumed.
+ *
+ * @since 1.466
+ */
+ private String childCustomWorkspace;
+
+ public MatrixProject(String name) {
+ this(Jenkins.getInstance(), name);
+ }
+
+ public MatrixProject(ItemGroup parent, String name) {
+ super(parent, name);
+ }
+
+ @Override
+ public String getPronoun() {
+ return AlternativeUiTextProvider.get(PRONOUN, this, Messages.MatrixProject_Pronoun());
+ }
+
+ /**
+ * Gets the workspace location that {@link MatrixConfiguration} uses.
+ *
+ * @see MatrixRun.MatrixRunExecution#decideWorkspace(Node, WorkspaceList)
+ *
+ * @return never null
+ * even when {@link MatrixProject} uses no custom workspace, this method still
+ * returns something like "${PARENT_WORKSPACE}/${COMBINATION}" that controls
+ * how the workspace should be laid out.
+ *
+ * The return value can be absolute or relative. If relative, it is resolved
+ * against the working directory of the overarching {@link MatrixBuild}.
+ */
+ public String getChildCustomWorkspace() {
+ String ws = childCustomWorkspace;
+ if (ws==null) {
+ ws = MatrixConfiguration.useShortWorkspaceName?"${SHORT_COMBINATION}":"${COMBINATION}";
+ }
+ return ws;
+ }
+
+ /**
+ * Do we have an explicit child custom workspace setting (true)? Or just using the default value (false)?
+ */
+ public boolean hasChildCustomWorkspace() {
+ return childCustomWorkspace!=null;
+ }
+
+ public void setChildCustomWorkspace(String childCustomWorkspace) throws IOException {
+ this.childCustomWorkspace = Util.fixEmptyAndTrim(childCustomWorkspace);
+ save();
+ }
+
+ /**
+ * {@link MatrixProject} is relevant with all the labels its configurations are relevant.
+ */
+ @Override
+ public Set<Label> getRelevantLabels() {
+ Set<Label> r = new HashSet<Label>();
+ for (MatrixConfiguration c : getActiveConfigurations())
+ r.add(c.getAssignedLabel());
+ return r;
+ }
+
+ /**
+ * @return can be null (to indicate that the configurations should be left to their natural order.)
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#getSorter()}.
+ * This method tries to emulate the previous behavior the best it can, but will return null
+ * if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public MatrixConfigurationSorter getSorter() {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ return dm.getSorter();
+ }
+ return null;
+ }
+
+ /**
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#setSorter(MatrixConfigurationSorter)}.
+ * This method tries to emulate the previous behavior the best it can, but will fall back
+ * to no-op if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public void setSorter(MatrixConfigurationSorter sorter) throws IOException {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ dm.setSorter(sorter);
+ save();
+ }
+ }
+
+ public AxisList getAxes() {
+ return axes;
+ }
+
+ /**
+ * Reconfigures axes.
+ */
+ public void setAxes(AxisList axes) throws IOException {
+ this.axes = new AxisList(axes);
+ rebuildConfigurations(null);
+ save();
+ }
+
+ public MatrixExecutionStrategy getExecutionStrategy() {
+ return executionStrategy;
+ }
+
+ public void setExecutionStrategy(MatrixExecutionStrategy executionStrategy) throws IOException {
+ if (executionStrategy ==null) throw new IllegalArgumentException();
+ this.executionStrategy = executionStrategy;
+ save();
+ }
+
+ /**
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#isRunSequentially()}.
+ * This method tries to emulate the previous behavior the best it can, but will return false
+ * if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public boolean isRunSequentially() {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ return dm.isRunSequentially();
+ }
+ return false;
+ }
+
+ /**
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#setRunSequentially(boolean)}.
+ * This method tries to emulate the previous behavior the best it can, but will fall back
+ * to no-op if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public void setRunSequentially(boolean runSequentially) throws IOException {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ dm.setRunSequentially(runSequentially);
+ save();
+ }
+ }
+
+ /**
+ * Sets the combination filter.
+ *
+ * @param combinationFilter the combinationFilter to set
+ */
+ public void setCombinationFilter(String combinationFilter) throws IOException {
+ this.combinationFilter = combinationFilter;
+ rebuildConfigurations(null);
+ save();
+ }
+
+ /**
+ * Obtains the combination filter, used to trim down the size of the matrix.
+ *
+ * <p>
+ * By default, a {@link MatrixConfiguration} is created for every possible combination of axes exhaustively.
+ * But by specifying a Groovy expression as a combination filter, one can trim down the # of combinations built.
+ *
+ * <p>
+ * Namely, this expression is evaluated for each axis value combination, and only when it evaluates to true,
+ * a corresponding {@link MatrixConfiguration} will be created and built.
+ *
+ * @return can be null.
+ * @since 1.279
+ */
+ public String getCombinationFilter() {
+ return combinationFilter;
+ }
+
+ /**
+ * @return can be null (to indicate that the configurations should be left to their natural order.)
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#getTouchStoneCombinationFilter()}.
+ * This method tries to emulate the previous behavior the best it can, but will return null
+ * if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public String getTouchStoneCombinationFilter() {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ return dm.getTouchStoneCombinationFilter();
+ }
+ return null;
+ }
+
+ /**
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#setTouchStoneCombinationFilter(String)}.
+ * This method tries to emulate the previous behavior the best it can, but will fall back
+ * to no-op if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public void setTouchStoneCombinationFilter(String touchStoneCombinationFilter) throws IOException {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ dm.setTouchStoneCombinationFilter(touchStoneCombinationFilter);
+ save();
+ }
+ }
+
+ /**
+ * @return can be null (to indicate that the configurations should be left to their natural order.)
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#getTouchStoneResultCondition()}.
+ * This method tries to emulate the previous behavior the best it can, but will return null
+ * if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public Result getTouchStoneResultCondition() {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ return dm.getTouchStoneResultCondition();
+ }
+ return null;
+ }
+
+ /**
+ * @deprecated as of 1.456
+ * Use {@link DefaultMatrixExecutionStrategyImpl#setTouchStoneResultCondition(Result)}.
+ * This method tries to emulate the previous behavior the best it can, but will fall back
+ * to no-op if the current {@link MatrixExecutionStrategy} is not the default one.
+ */
+ @Deprecated
+ public void setTouchStoneResultCondition(Result touchStoneResultCondition) throws IOException {
+ MatrixExecutionStrategy e = executionStrategy;
+ if (e instanceof DefaultMatrixExecutionStrategyImpl) {
+ DefaultMatrixExecutionStrategyImpl dm = (DefaultMatrixExecutionStrategyImpl) e;
+ dm.setTouchStoneResultCondition(touchStoneResultCondition);
+ save();
+ }
+ }
+
+ @Override
+ protected List<Action> createTransientActions() {
+ List<Action> r = super.createTransientActions();
+
+ for (BuildStep step : builders)
+ r.addAll(step.getProjectActions(this));
+ for (BuildStep step : publishers)
+ r.addAll(step.getProjectActions(this));
+ for (BuildWrapper step : buildWrappers)
+ r.addAll(step.getProjectActions(this));
+ for (Trigger<?> trigger : triggers())
+ r.addAll(trigger.getProjectActions());
+
+ return r;
+ }
+
+ @Override
+ protected void updateTransientActions(){
+ super.updateTransientActions();
+ if(getActiveConfigurations() !=null){
+ // update all transient actions in configurations too.
+ for(MatrixConfiguration configuration: getActiveConfigurations()){
+ configuration.updateTransientActions();
+ }
+ }
+ }
+
+ /**
+ * Gets the subset of {@link AxisList} that are not system axes.
+ *
+ * @deprecated as of 1.373
+ * System vs user difference are generalized into extension point.
+ */
+ @Deprecated
+ public List<Axis> getUserAxes() {
+ List<Axis> r = new ArrayList<Axis>();
+ for (Axis a : axes)
+ if(!a.isSystem())
+ r.add(a);
+ return r;
+ }
+
+ public Layouter<MatrixConfiguration> getLayouter() {
+ return new Layouter<MatrixConfiguration>(axes) {
+ @Override
+ protected MatrixConfiguration getT(Combination c) {
+ return getItem(c);
+ }
+ };
+ }
+
+ @Override
+ public void onCreatedFromScratch() {
+ executionStrategy = new DefaultMatrixExecutionStrategyImpl();
+ super.onCreatedFromScratch();
+ }
+
+ @Override
+ public void onLoad(ItemGroup<? extends Item> parent, String name) throws IOException {
+ super.onLoad(parent,name);
+ builders.setOwner(this);
+ publishers.setOwner(this);
+ buildWrappers.setOwner(this);
+
+ if (executionStrategy ==null)
+ executionStrategy = new DefaultMatrixExecutionStrategyImpl(runSequentially != null ? runSequentially : false, touchStoneCombinationFilter, touchStoneResultCondition, sorter);
+
+ rebuildConfigurations(null);
+ }
+
+ @Override
+ public void logRotate() throws IOException, InterruptedException {
+ super.logRotate();
+ // perform the log rotation of inactive configurations to make sure
+ // their logs get eventually discarded
+ for (MatrixConfiguration config : configurations.values()) {
+ if(!config.isActiveConfiguration())
+ config.logRotate();
+ }
+ }
+
+ /**
+ * Recursively search for configuration and put them to the map
+ *
+ * <p>
+ * The directory structure would be <tt>axis-a/b/axis-c/d/axis-e/f</tt> for
+ * combination [a=b,c=d,e=f]. Note that two combinations [a=b,c=d] and [a=b,c=d,e=f]
+ * can both co-exist (where one is an archived record and the other is live, for example)
+ * so search needs to be thorough.
+ *
+ * @param dir
+ * Directory to be searched.
+ * @param result
+ * Receives the loaded {@link MatrixConfiguration}s.
+ * @param combination
+ * Combination of key/values discovered so far while traversing the directories.
+ * Read-only.
+ */
+ private void loadConfigurations( File dir, CopyOnWriteMap.Tree<Combination,MatrixConfiguration> result, Map<String,String> combination ) {
+ File[] axisDirs = dir.listFiles(new FileFilter() {
+ public boolean accept(File child) {
+ return child.isDirectory() && child.getName().startsWith("axis-");
+ }
+ });
+ if(axisDirs==null) return;
+
+ for (File subdir : axisDirs) {
+ String axis = subdir.getName().substring(5); // axis name
+
+ File[] valuesDir = subdir.listFiles(new FileFilter() {
+ public boolean accept(File child) {
+ return child.isDirectory();
+ }
+ });
+ if(valuesDir==null) continue; // no values here
+
+ for (File v : valuesDir) {
+ Map<String,String> c = new HashMap<String, String>(combination);
+ c.put(axis,TokenList.decode(v.getName()));
+
+ try {
+ XmlFile config = Items.getConfigFile(v);
+ if(config.exists()) {
+ Combination comb = new Combination(c);
+ // if we already have this in memory, just use it.
+ // otherwise load it
+ MatrixConfiguration item=null;
+ if(this.configurations!=null)
+ item = this.configurations.get(comb);
+ if(item==null) {
+ item = (MatrixConfiguration) config.read();
+ item.setCombination(comb);
+ item.onLoad(this, v.getName());
+ }
+ result.put(item.getCombination(), item);
+ }
+ } catch (IOException e) {
+ LOGGER.log(Level.WARNING, "Failed to load matrix configuration "+v,e);
+ }
+ loadConfigurations(v,result,c);
+ }
+ }
+ }
+
+ /**
+ * Rebuilds the {@link #configurations} list and {@link #activeConfigurations}.
+ *
+ * @param context
+ * We rebuild configurations right before a build, to allow configurations to be adjusted for the build.
+ * (think of it as reconfiguring a project right before a build.) And when that happens, this value is the
+ * build in progress. Otherwise this value is null (for example, when Jenkins is booting up.)
+ */
+ /*package*/ Set<MatrixConfiguration> rebuildConfigurations(MatrixBuildExecution context) throws IOException {
+ {
+ // backward compatibility check to see if there's any data in the old structure
+ // if so, bring them to the newer structure.
+ File[] oldDirs = getConfigurationsDir().listFiles(new FileFilter() {
+ public boolean accept(File child) {
+ return child.isDirectory() && !child.getName().startsWith("axis-");
+ }
+ });
+ if(oldDirs!=null) {
+ // rename the old directory to the new one
+ for (File dir : oldDirs) {
+ try {
+ Combination c = Combination.fromString(dir.getName());
+ dir.renameTo(getRootDirFor(c));
+ } catch (IllegalArgumentException e) {
+ // it's not a configuration dir. Just ignore.
+ }
+ }
+ }
+ }
+
+ CopyOnWriteMap.Tree<Combination,MatrixConfiguration> configurations =
+ new CopyOnWriteMap.Tree<Combination,MatrixConfiguration>();
+ loadConfigurations(getConfigurationsDir(),configurations,Collections.<String,String>emptyMap());
+ this.configurations = configurations;
+
+ Iterable<Combination> activeCombinations;
+ if (context!=null) {
+ List<Set<String>> axesList = Lists.newArrayList();
+ for (Axis axis : axes)
+ axesList.add(Sets.newLinkedHashSet(axis.rebuild(context)));
+
+ activeCombinations = Iterables.transform(Sets.cartesianProduct(axesList), new Function<List<String>, Combination>() {
+ public Combination apply(@Nullable List<String> strings) {
+ assert strings != null;
+ return new Combination(axes, strings);
+ }
+ });
+ } else {
+ activeCombinations = axes.list();
+ }
+
+ // find all active configurations
+ final Set<MatrixConfiguration> active = new LinkedHashSet<MatrixConfiguration>();
+ final boolean isDynamicFilter = isDynamicFilter(getCombinationFilter());
+
+ for (Combination c : activeCombinations) {
+ if(isDynamicFilter || c.evalGroovyExpression(axes,getCombinationFilter())) {
+ LOGGER.fine("Adding configuration: " + c);
+ MatrixConfiguration config = configurations.get(c);
+ if(config==null) {
+ config = new MatrixConfiguration(this,c);
+ config.onCreatedFromScratch();
+ config.save();
+ configurations.put(config.getCombination(), config);
+ }
+ active.add(config);
+ }
+ }
+ this.activeConfigurations = active;
+
+ return active;
+ }
+
+ private boolean isDynamicFilter(final String filter) {
+
+ if (!isParameterized() || filter == null) return false;
+
+ final ParametersDefinitionProperty paramDefProp = getProperty(ParametersDefinitionProperty.class);
+
+ for (final ParameterDefinition definition : paramDefProp.getParameterDefinitions()) {
+
+ final String name = definition.getName();
+
+ final Matcher matcher = Pattern
+ .compile("\\b" + name + "\\b")
+ .matcher(filter)
+ ;
+
+ if (matcher.find()) return true;
+ }
+
+ return false;
+ }
+
+ private File getConfigurationsDir() {
+ return new File(getRootDir(),"configurations");
+ }
+
+ /**
+ * Gets all active configurations.
+ *
+ * <p>
+ * In contract, inactive configurations are those that are left for archival purpose
+ * and no longer built when a new {@link MatrixBuild} is executed.
+ *
+ * <p>
+ * During a build, {@link MatrixBuildExecution#getActiveConfigurations()} should be used
+ * to make sure that a build is using the consistent set of active configurations from
+ * the start to the end.
+ */
+ @Exported
+ public Collection<MatrixConfiguration> getActiveConfigurations() {
+ return activeConfigurations;
+ }
+
+ public Collection<MatrixConfiguration> getItems() {
+ return configurations.values();
+ }
+
+ @Override
+ public Collection<? extends Job> getAllJobs() {
+ Set<Job> jobs = new HashSet<Job>(getItems());
+ jobs.add(this);
+ return jobs;
+ }
+
+ public String getUrlChildPrefix() {
+ return ".";
+ }
+
+ public MatrixConfiguration getItem(String name) {
+ try {
+ return getItem(Combination.fromString(name));
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+ }
+
+ public MatrixConfiguration getItem(Combination c) {
+ if (configurations == null) {
+ return null;
+ }
+ return configurations.get(c);
+ }
+
+ public File getRootDirFor(MatrixConfiguration child) {
+ return getRootDirFor(child.getCombination());
+ }
+
+ public void onRenamed(MatrixConfiguration item, String oldName, String newName) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void onDeleted(MatrixConfiguration item) throws IOException {
+ // noop
+ }
+
+ public File getRootDirFor(Combination combination) {
+ File f = getConfigurationsDir();
+ for (Entry<String, String> e : combination.entrySet())
+ f = new File(f,"axis-"+e.getKey()+'/'+Util.rawEncode(e.getValue()));
+ f.getParentFile().mkdirs();
+ return f;
+ }
+
+ /**
+ * @see #getJDKs()
+ */
+ @Override @Deprecated
+ public JDK getJDK() {
+ return super.getJDK();
+ }
+
+ /**
+ * Gets the {@link JDK}s where the builds will be run.
+ * @return never null but can be empty
+ */
+ public Set<JDK> getJDKs() {
+ Axis a = axes.find("jdk");
+ if(a==null) return Collections.emptySet();
+ Set<JDK> r = new HashSet<JDK>();
+ for (String j : a) {
+ JDK jdk = Jenkins.getInstance().getJDK(j);
+ if(jdk!=null)
+ r.add(jdk);
+ }
+ return r;
+ }
+
+ /**
+ * Gets the {@link Label}s where the builds will be run.
+ * @return never null
+ */
+ public Set<Label> getLabels() {
+ Set<Label> r = new HashSet<Label>();
+ for (Combination c : axes.subList(LabelAxis.class).list())
+ r.add(Jenkins.getInstance().getLabel(Util.join(c.values(),"&&")));
+ return r;
+ }
+
+ public List<Builder> getBuilders() {
+ return builders.toList();
+ }
+
+ public DescribableList<Builder,Descriptor<Builder>> getBuildersList() {
+ return builders;
+ }
+
+ public Map<Descriptor<Publisher>,Publisher> getPublishers() {
+ return publishers.toMap();
+ }
+
+ @Override
+ public DescribableList<Publisher,Descriptor<Publisher>> getPublishersList() {
+ return publishers;
+ }
+
+ public DescribableList<BuildWrapper, Descriptor<BuildWrapper>> getBuildWrappersList() {
+ return buildWrappers;
+ }
+
+ public Map<Descriptor<BuildWrapper>,BuildWrapper> getBuildWrappers() {
+ return buildWrappers.toMap();
+ }
+
+ public Publisher getPublisher(Descriptor<Publisher> descriptor) {
+ for (Publisher p : publishers) {
+ if(p.getDescriptor()==descriptor)
+ return p;
+ }
+ return null;
+ }
+
+ @Override
+ protected Class<MatrixBuild> getBuildClass() {
+ return MatrixBuild.class;
+ }
+
+ @Override
+ public boolean isFingerprintConfigured() {
+ return false;
+ }
+
+ @Override protected void buildDependencyGraph(DependencyGraph graph) {
+ super.buildDependencyGraph(graph);
+ publishers.buildDependencyGraph(this,graph);
+ builders.buildDependencyGraph(this,graph);
+ buildWrappers.buildDependencyGraph(this,graph);
+ }
+
+ public MatrixProject asProject() {
+ return this;
+ }
+
+ @Override
+ public Object getDynamic(String token, StaplerRequest req, StaplerResponse rsp) {
+ try {
+ MatrixConfiguration item = getItem(token);
+ if(item!=null)
+ return item;
+ } catch (IllegalArgumentException _) {
+ // failed to parse the token as Combination. Must be something else
+ }
+ return super.getDynamic(token,req,rsp);
+ }
+
+ @Override
+ protected void submit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
+ super.submit(req, rsp);
+
+ JSONObject json = req.getSubmittedForm();
+
+ if(req.getParameter("hasCombinationFilter")!=null) {
+ this.combinationFilter = Util.nullify(req.getParameter("combinationFilter"));
+ } else {
+ this.combinationFilter = null;
+ }
+
+ if(req.hasParameter("customWorkspace")) {
+ setChildCustomWorkspace(Util.fixEmptyAndTrim(req.getParameter("childCustomWorkspace.directory")));
+ } else {
+ setChildCustomWorkspace(null);
+ }
+
+ List<MatrixExecutionStrategyDescriptor> esd = getDescriptor().getExecutionStrategyDescriptors();
+ if (esd.size()>1)
+ executionStrategy = req.bindJSON(MatrixExecutionStrategy.class,json.getJSONObject("executionStrategy"));
+ else
+ executionStrategy = req.bindJSON(esd.get(0).clazz,json.getJSONObject("executionStrategy"));
+
+ // parse system axes
+ DescribableList<Axis,AxisDescriptor> newAxes = new DescribableList<Axis,AxisDescriptor>(this);
+ newAxes.rebuildHetero(req, json, Axis.all(),"axis");
+ checkAxisNames(newAxes);
+ this.axes = new AxisList(newAxes.toList());
+
+ buildWrappers.rebuild(req, json, BuildWrappers.getFor(this));
+ builders.rebuildHetero(req, json, Builder.all(), "builder");
+ publishers.rebuildHetero(req, json, Publisher.all(), "publisher");
+
+ rebuildConfigurations(null);
+ }
+
+ public AggregatedTestResultAction getAggregatedTestResultAction() {
+ MatrixBuild b = getLastCompletedBuild();
+ return b != null ? b.getAction(AggregatedTestResultAction.class) : null;
+ }
+
+ /**
+ * Verifies that Axis names are valid and unique.
+ */
+ private void checkAxisNames(Iterable<Axis> newAxes) throws FormException {
+ HashSet<String> axisNames = new HashSet<String>();
+ for (Axis a : newAxes) {
+ FormValidation fv = a.getDescriptor().doCheckName(a.getName());
+ if (fv.kind!=Kind.OK)
+ throw new FormException(Messages.MatrixProject_DuplicateAxisName(),fv,"axis.name");
+
+ if (axisNames.contains(a.getName()))
+ throw new FormException(Messages.MatrixProject_DuplicateAxisName(),"axis.name");
+ axisNames.add(a.getName());
+ }
+ }
+
+ /**
+ * Also delete all the workspaces of the configuration, too.
+ */
+ @Override
+ public HttpResponse doDoWipeOutWorkspace() throws IOException, ServletException, InterruptedException {
+ HttpResponse rsp = super.doDoWipeOutWorkspace();
+ for (MatrixConfiguration c : configurations.values())
+ c.doDoWipeOutWorkspace();
+ return rsp;
+ }
+
+ @Override
+ public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
+ ContextMenu menu = new ContextMenu();
+ for (MatrixConfiguration c : getActiveConfigurations()) {
+ menu.add(c);
+ }
+ return menu;
+ }
+
+ public DescriptorImpl getDescriptor() {
+ return (DescriptorImpl)Jenkins.getInstance().getDescriptorOrDie(getClass());
+ }
+
+ /**
+ * Descriptor is instantiated as a field purely for backward compatibility.
+ * Do not do this in your code. Put @Extension on your DescriptorImpl class instead.
+ */
+ @Restricted(NoExternalUse.class)
+ @Extension
+ public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
+
+ public static final class DescriptorImpl extends AbstractProjectDescriptor {
+ public String getDisplayName() {
+ return Messages.MatrixProject_DisplayName();
+ }
+
+ public MatrixProject newInstance(ItemGroup parent, String name) {
+ return new MatrixProject(parent,name);
+ }
+
+ /**
+ * All {@link AxisDescriptor}s that contribute to the UI.
+ */
+ public List<AxisDescriptor> getAxisDescriptors() {
+ List<AxisDescriptor> r = new ArrayList<AxisDescriptor>();
+ for (AxisDescriptor d : Axis.all()) {
+ if (d.isInstantiable())
+ r.add(d);
+ }
+ return r;
+ }
+
+ /**
+ * @deprecated as of 1.456
+ * This was only exposed for Jelly.
+ */
+ @Deprecated
+ public List<MatrixConfigurationSorterDescriptor> getSorterDescriptors() {
+ return MatrixConfigurationSorterDescriptor.all();
+ }
+
+ public List<MatrixExecutionStrategyDescriptor> getExecutionStrategyDescriptors() {
+ return MatrixExecutionStrategyDescriptor.all();
+ }
+
+ public List<SCMCheckoutStrategyDescriptor> getMatrixRunCheckoutStrategyDescriptors() {
+ return SCMCheckoutStrategyDescriptor.all();
+ }
+ }
+
+ private static final Logger LOGGER = Logger.getLogger(MatrixProject.class.getName());
+
+ @Initializer(before=InitMilestone.EXTENSIONS_AUGMENTED)
+ public static void alias() {
+ Items.XSTREAM.alias("matrix-project", MatrixProject.class);
+ Items.XSTREAM.alias("axis", Axis.class);
+ Items.XSTREAM.alias("matrix-config", MatrixConfiguration.class);
+ Run.XSTREAM.alias("matrix-build",MatrixBuild.class);
+ Run.XSTREAM.alias("matrix-run",MatrixRun.class);
+ }
+
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixRun.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixRun.java
new file mode 100644
index 0000000..a35c421
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/MatrixRun.java
@@ -0,0 +1,186 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.EnvVars;
+import hudson.FilePath;
+import hudson.model.AbstractBuild;
+import hudson.model.Build;
+import hudson.model.Node;
+import hudson.slaves.WorkspaceList;
+import hudson.slaves.WorkspaceList.Lease;
+import org.kohsuke.stapler.Ancestor;
+import org.kohsuke.stapler.Stapler;
+import org.kohsuke.stapler.StaplerRequest;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Execution of {@link MatrixConfiguration}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixRun extends Build<MatrixConfiguration,MatrixRun> {
+ public MatrixRun(MatrixConfiguration job) throws IOException {
+ super(job);
+ }
+
+ public MatrixRun(MatrixConfiguration job, Calendar timestamp) {
+ super(job, timestamp);
+ }
+
+ public MatrixRun(MatrixConfiguration project, File buildDir) throws IOException {
+ super(project, buildDir);
+ }
+
+ @Override
+ public String getUpUrl() {
+ StaplerRequest req = Stapler.getCurrentRequest();
+ if(req!=null) {
+ List<Ancestor> ancs = req.getAncestors();
+ for( int i=1; i<ancs.size(); i++) {
+ if(ancs.get(i).getObject()==this) {
+ Object parentObj = ancs.get(i-1).getObject();
+ if(parentObj instanceof MatrixBuild || parentObj instanceof MatrixConfiguration) {
+ return ancs.get(i-1).getUrl()+'/';
+ }
+ }
+ }
+ }
+ return super.getDisplayName();
+ }
+
+ /**
+ * Gets the {@link MatrixBuild} that has the same build number.
+ *
+ * @return
+ * null if no such build exists, which happens when the module build
+ * is manually triggered.
+ */
+ public MatrixBuild getParentBuild() {
+ return getParent().getParent().getBuildByNumber(getNumber());
+ }
+
+ /**
+ * The same as {@link #getParentBuild()}.
+ */
+ @Override
+ public AbstractBuild<?, ?> getRootBuild() {
+ return getParentBuild();
+ }
+
+ @Override
+ public String getDisplayName() {
+ StaplerRequest req = Stapler.getCurrentRequest();
+ if(req!=null) {
+ List<Ancestor> ancs = req.getAncestors();
+ for( int i=1; i<ancs.size(); i++) {
+ if(ancs.get(i).getObject()==this) {
+ if(ancs.get(i-1).getObject() instanceof MatrixBuild) {
+ return getParent().getCombination().toCompactString(getParent().getParent().getAxes());
+ }
+ }
+ }
+ }
+ return super.getDisplayName();
+ }
+
+ @Override
+ public Map<String,String> getBuildVariables() {
+ Map<String,String> r = super.getBuildVariables();
+ // pick up user axes
+ AxisList axes = getParent().getParent().getAxes();
+ for (Map.Entry<String,String> e : getParent().getCombination().entrySet()) {
+ Axis a = axes.find(e.getKey());
+ if (a!=null)
+ a.addBuildVariable(e.getValue(),r);
+ else
+ r.put(e.getKey(), e.getValue());
+ }
+ return r;
+ }
+
+ /**
+ * If the parent {@link MatrixBuild} is kept, keep this record too.
+ */
+ @Override
+ public String getWhyKeepLog() {
+ MatrixBuild pb = getParentBuild();
+ if(pb!=null && pb.getWhyKeepLog()!=null)
+ return Messages.MatrixRun_KeptBecauseOfParent(pb);
+ return super.getWhyKeepLog();
+ }
+
+ @Override
+ public MatrixConfiguration getParent() {// don't know why, but javac wants this
+ return super.getParent();
+ }
+
+ @Override
+ public void run() {
+ execute(new MatrixRunExecution());
+ }
+
+ private class MatrixRunExecution extends BuildExecution {
+ protected Lease getParentWorkspaceLease(Node n, WorkspaceList wsl) throws InterruptedException, IOException {
+ MatrixProject mp = getParent().getParent();
+
+ String customWorkspace = mp.getCustomWorkspace();
+ if (customWorkspace != null) {
+ // we allow custom workspaces to be concurrently used between jobs.
+ return Lease.createDummyLease(n.getRootPath().child(getEnvironment(listener).expand(customWorkspace)));
+ }
+ return wsl.allocate(n.getWorkspaceFor(mp), getParentBuild());
+ }
+
+ @Override
+ protected Lease decideWorkspace(Node n, WorkspaceList wsl) throws InterruptedException, IOException {
+ MatrixProject mp = getParent().getParent();
+
+ // lock is done at the parent level, so that concurrent MatrixProjects get respective workspace,
+ // but within MatrixConfigurations that belong to the same MatrixBuild.
+ // if MatrixProject is configured with custom workspace, we assume that the user knows what he's doing
+ // and try not to append unique random suffix.
+ Lease baseLease = getParentWorkspaceLease(n,wsl);
+
+ // resolve the relative path against the parent workspace, which needs locking
+ FilePath baseDir = baseLease.path;
+
+ // prepare variables that can be used in the child workspace setting
+ EnvVars env = getEnvironment(listener);
+ env.put("COMBINATION",getParent().getCombination().toString('/','/')); // e.g., "axis1/a/axis2/b"
+ env.put("SHORT_COMBINATION",getParent().getDigestName()); // e.g., "0fbcab35"
+ env.put("PARENT_WORKSPACE",baseDir.getRemote());
+ env.putAll(getBuildVariables());
+
+ // child workspace need no individual locks, whether or not we use custom workspace
+ String childWs = mp.getChildCustomWorkspace();
+ return Lease.createLinkedDummyLease(baseDir.child(env.expand(childWs)),baseLease);
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/NoopMatrixConfigurationSorter.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/NoopMatrixConfigurationSorter.java
new file mode 100644
index 0000000..099b03b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/NoopMatrixConfigurationSorter.java
@@ -0,0 +1,33 @@
+package hudson.matrix;
+
+import hudson.Extension;
+import hudson.util.FormValidation;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+/**
+ * Place holder for default "do not sort" {@link MatrixConfigurationSorter}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class NoopMatrixConfigurationSorter extends MatrixConfigurationSorter {
+ @DataBoundConstructor
+ public NoopMatrixConfigurationSorter() {
+ }
+
+ @Override
+ public void validate(MatrixProject p) throws FormValidation {
+ // nothing
+ }
+
+ public int compare(MatrixConfiguration o1, MatrixConfiguration o2) {
+ return o1.getDisplayName().compareTo(o2.getDisplayName());
+ }
+
+ @Extension(ordinal=100) // this is the default
+ public static class DescriptorImpl extends MatrixConfigurationSorterDescriptor {
+ @Override
+ public String getDisplayName() {
+ return "Doesn't care";
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/TextAxis.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/TextAxis.java
new file mode 100644
index 0000000..80f86eb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/TextAxis.java
@@ -0,0 +1,34 @@
+package hudson.matrix;
+
+import hudson.Extension;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+import java.util.List;
+
+/**
+ * User-defined plain text axis.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class TextAxis extends Axis {
+ public TextAxis(String name, List<String> values) {
+ super(name, values);
+ }
+
+ public TextAxis(String name, String... values) {
+ super(name, values);
+ }
+
+ @DataBoundConstructor
+ public TextAxis(String name, String valueString) {
+ super(name, valueString);
+ }
+
+ @Extension
+ public static class DescriptorImpl extends AxisDescriptor {
+ @Override
+ public String getDisplayName() {
+ return Messages.TextArea_DisplayName();
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/listeners/MatrixBuildListener.java b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/listeners/MatrixBuildListener.java
new file mode 100644
index 0000000..53c3700
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/listeners/MatrixBuildListener.java
@@ -0,0 +1,84 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011, Christian Wolfgang
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix.listeners;
+
+import hudson.ExtensionList;
+import hudson.ExtensionPoint;
+import hudson.matrix.MatrixConfiguration;
+import hudson.matrix.MatrixBuild;
+import hudson.matrix.MatrixRun;
+import hudson.model.Action;
+import jenkins.model.Jenkins;
+import hudson.model.Queue;
+import hudson.model.Queue.Task;
+
+import java.util.List;
+
+/**
+ * Controls which subset of {@link MatrixRun}s to rebuild.
+ *
+ * <p>
+ * Plugins can implement this extension point to filter out the subset of matrix project to build.
+ * Most typically, such a plugin would add a custom {@link Action} to a build when it goes to the queue
+ * ({@link Queue#schedule2(Task, int, List)}, then access this from {@link MatrixBuild} to drive
+ * the filtering logic.
+ *
+ * <p>
+ * See the matrix reloaded plugin for an example.
+ *
+ * @author Christian Wolfgang
+ * @since 1.413
+ */
+public abstract class MatrixBuildListener implements ExtensionPoint {
+ /**
+ * Determine whether to build a given configuration or not
+ *
+ * @param b
+ * Never null. The umbrella build.
+ * @param c
+ * The configuration whose build is being considered. If any of the {@link MatrixBuildListener}
+ * returns false, then the build for this configuration is skipped, and the previous build
+ * of this configuration will be taken as the default result.
+ * @return
+ * True to let the build happen, false to skip it.
+ */
+ public abstract boolean doBuildConfiguration(MatrixBuild b, MatrixConfiguration c);
+
+ public static boolean buildConfiguration(MatrixBuild b, MatrixConfiguration c) {
+ for (MatrixBuildListener l : all()) {
+ if(!l.doBuildConfiguration(b, c)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns all the registered {@link MatrixBuildListener} descriptors.
+ */
+ public static ExtensionList<MatrixBuildListener> all() {
+ return Jenkins.getInstance().getExtensionList(MatrixBuildListener.class);
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/matrix/package.html b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/package.html
new file mode 100644
index 0000000..72e14d2
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/matrix/package.html
@@ -0,0 +1,27 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<html><head/><body>
+Matrix project
+</body></html>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/tasks/test/MatrixTestResult.java b/plugins/matrix-project-plugin/src/main/java/hudson/tasks/test/MatrixTestResult.java
new file mode 100644
index 0000000..9c88a82
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/tasks/test/MatrixTestResult.java
@@ -0,0 +1,77 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo!, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.tasks.test;
+
+import hudson.matrix.Combination;
+import hudson.matrix.MatrixBuild;
+import hudson.matrix.MatrixRun;
+import hudson.model.AbstractBuild;
+import hudson.model.Action;
+
+/**
+ * {@link Action} that aggregates all the test results from {@link MatrixRun}s.
+ *
+ * <p>
+ * This object is attached to {@link MatrixBuild}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixTestResult extends AggregatedTestResultAction {
+
+ @Deprecated
+ public MatrixTestResult(MatrixBuild owner) {
+ super(owner);
+ }
+
+ /** @since 1.545 */
+ public MatrixTestResult() {}
+
+ /**
+ * Use the configuration name.
+ */
+ @Override
+ protected String getChildName(AbstractTestResultAction tr) {
+ return tr.owner.getProject().getName();
+ }
+
+ @Override
+ public AbstractBuild<?,?> resolveChild(Child child) {
+ MatrixBuild b = (MatrixBuild)owner;
+ return b.getProject().getItem(Combination.fromString(child.name)).getBuildByNumber(child.build);
+ }
+
+ @Override
+ public String getTestResultPath(TestResult it) {
+ // Prepend Configuration path
+ return it.getOwner().getParent().getShortUrl() + super.getTestResultPath(it);
+ }
+
+ /* We are required to override and call super since the parent class is in
+ * a different classloader, otherwise we get IllegalAccessErrors (JENKINS-22798)
+ */
+ @Override
+ protected void add(AbstractTestResultAction child) {
+ super.add(child);
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/java/hudson/tasks/test/TestResultAggregator.java b/plugins/matrix-project-plugin/src/main/java/hudson/tasks/test/TestResultAggregator.java
new file mode 100644
index 0000000..72b76fd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/java/hudson/tasks/test/TestResultAggregator.java
@@ -0,0 +1,60 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo!, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.tasks.test;
+
+import hudson.Launcher;
+import hudson.matrix.MatrixAggregator;
+import hudson.matrix.MatrixBuild;
+import hudson.matrix.MatrixRun;
+import hudson.model.BuildListener;
+
+import java.io.IOException;
+
+/**
+ * Aggregates {@link AbstractTestResultAction}s of {@link MatrixRun}s
+ * into {@link MatrixBuild}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class TestResultAggregator extends MatrixAggregator {
+ private MatrixTestResult result;
+
+ public TestResultAggregator(MatrixBuild build, Launcher launcher, BuildListener listener) {
+ super(build, launcher, listener);
+ }
+
+ @Override
+ public boolean startBuild() throws InterruptedException, IOException {
+ result = new MatrixTestResult();
+ build.addAction(result);
+ return true;
+ }
+
+ @Override
+ public boolean endRun(MatrixRun run) throws InterruptedException, IOException {
+ AbstractTestResultAction atr = run.getAction(AbstractTestResultAction.class);
+ if(atr!=null) result.add(atr);
+ return true;
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config.groovy b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config.groovy
new file mode 100644
index 0000000..fa6f924
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config.groovy
@@ -0,0 +1,28 @@
+package hudson.matrix.DefaultMatrixExecutionStrategyImpl;
+
+import hudson.matrix.MatrixConfigurationSorterDescriptor
+import hudson.model.Result;
+
+def f = namespace(lib.FormTagLib)
+
+f.optionalBlock (field:"runSequentially", title:_("Run each configuration sequentially"), inline:true) {
+ if (MatrixConfigurationSorterDescriptor.all().size()>1) {
+ f.dropdownDescriptorSelector(title:_("Execution order of builds"), field:"sorter")
+ }
+}
+
+f.optionalBlock (field:"hasTouchStoneCombinationFilter", title:_("Execute touchstone builds first"), inline:true) {
+ // TODO: help="/help/matrix/touchstone.html">
+ // TODO: move l10n from MatrixProject/configEntries.jelly
+
+ f.entry(title:_("Filter"), field:"touchStoneCombinationFilter") {
+ f.textbox()
+ }
+
+ f.entry(title:_("Required result"), field:"touchStoneResultCondition", description:_("required.result.description")) {
+ select(name:"touchStoneResultCondition") {
+ f.option(value:"SUCCESS", selected:my.touchStoneResultCondition==Result.SUCCESS, _("Stable"))
+ f.option(value:"UNSTABLE", selected:my.touchStoneResultCondition==Result.UNSTABLE, _("Unstable"))
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config.properties
new file mode 100644
index 0000000..20f08d5
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+required.result.description=\
+ Execute the rest of the combinations only if the touchstone builds has (at least) the selected result.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_da.properties
new file mode 100644
index 0000000..35e0cfe
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_da.properties
@@ -0,0 +1,29 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Execute\ touchstone\ builds\ first=K\u00f8r touchstone byg f\u00f8rst
+Filter=Filter
+Required\ result=N\u00f8dvendigt resultat
+Run\ each\ configuration\ sequentially=K\u00f8r hver konfiguration sekventielt
+Stable=Stabil
+Unstable=Ustabil
+required.result.description=Afvikl kun resten af kombinationerne hvis touchstone byggene har mindst det \u00f8nskede resultat.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_de.properties
new file mode 100644
index 0000000..ab5dd1d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_de.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Required\ result=Mindest-Resultat
+Stable=Stabil
+Unstable=Instabil
+required.result.description=F\u00fchre verbleibende Kombinationen nur aus, wenn \
+ die Touchstone-Builds mindestens das gew\u00e4hlte Resultat lieferten.
+Execute\ touchstone\ builds\ first=Touchstone-Builds zuerst ausf\u00fchren
+Run\ each\ configuration\ sequentially=Konfigurationen sequentiell ausf\u00fchren
+Filter=Filter
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_ja.properties
new file mode 100644
index 0000000..7ee8a79
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_ja.properties
@@ -0,0 +1,31 @@
+# The MIT License
+#
+# Copyright 2012 sogabe.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Run\ each\ configuration\ sequentially=\u5404\u8a2d\u5b9a\u3092\u9806\u6b21\u8d77\u52d5
+Execution\ order\ of\ builds=\u30d3\u30eb\u30c9\u306e\u5b9f\u884c\u9806\u5e8f
+Execute\ touchstone\ builds\ first=\u6700\u521d\u306b\u7279\u5b9a\u306e\u30d3\u30eb\u30c9\u3092\u5b9f\u884c
+Filter=\u30d5\u30a3\u30eb\u30bf\u30fc
+Required\ result=\u30d3\u30eb\u30c9\u7d50\u679c
+required.result.description=\
+ \u6700\u521d\u306b\u5b9f\u884c\u3057\u305f\u30d3\u30eb\u30c9\u304c(\u5c11\u306a\u304f\u3068\u3082)\u9078\u629e\u3057\u305f\u7d50\u679c\u3067\u3042\u308b\u5834\u5408\u306e\u307f\u3001\u6b8b\u308a\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
+Stable=\u5b89\u5b9a
+Unstable=\u4e0d\u5b89\u5b9a
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_pt_BR.properties
new file mode 100644
index 0000000..7e421cf
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_pt_BR.properties
@@ -0,0 +1,29 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva, Fernando Boaglio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Execute\ touchstone\ builds\ first= Ordenar por builds
+Unstable= Inst\u00e1vel
+Run\ each\ configuration\ sequentially= Rodar cada configura\u00e7\u00e3o em sequ\u00eancia
+Stable= Est\u00e1vel
+Required\ result= Resultado
+Filter= Filtro
+required.result.description=Executar as demais combina\u00e7\u00f5es somente se os crit\u00e9rios de builds tiver (pelo menos) o resultado selecionado.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_zh_TW.properties
new file mode 100644
index 0000000..7682877
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/config_zh_TW.properties
@@ -0,0 +1,31 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Run\ each\ configuration\ sequentially=\u5faa\u5e8f\u57f7\u884c\u5404\u9805\u8a2d\u5b9a
+Execution\ order\ of\ builds=\u5efa\u7f6e\u57f7\u884c\u9806\u5e8f
+Execute\ touchstone\ builds\ first=\u512a\u5148\u5efa\u7f6e\u300c\u8a66\u91d1\u77f3\u300d
+Filter=\u7be9\u9078\u689d\u4ef6
+Required\ result=\u5fc5\u8981\u7d50\u679c
+required.result.description=\
+ \u53ea\u6709\u5728\u300c\u8a66\u91d1\u77f3\u300d\u5efa\u7f6e\u7d50\u679c\u7b26\u5408\u9810\u671f\u6642\u624d\u57f7\u884c\u5176\u4ed6\u7d44\u5408\u3002
+Stable=\u7a69\u5b9a
+Unstable=\u4e0d\u7a69\u5b9a
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter.html
new file mode 100644
index 0000000..012833a
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter.html
@@ -0,0 +1,5 @@
+<div>
+ Use a touchstone build if you want to run a sanity check before building all the combinations.
+ You can select a number of combinations using a combination filter. These will be built first.
+ If the result satisfies the result condition, the rest of the combinations will be built.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_de.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_de.html
new file mode 100644
index 0000000..419847d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_de.html
@@ -0,0 +1,10 @@
+<div>
+ Ein "Touchstone"-Build ist ein besonderer Build, der Sie besonders frühzeitig auf Probleme
+ in Ihrem Code hinweist, z.B. durch Ausführung essentieller Plausibilitätstests.
+
+ <p>
+ Wenn angewählt, führt Jenkins zunächst die Touchstone-Builds aus, bevor dann alle weiteren
+ Kombinationen gebaut werden. Sie können über einen Kombinationsfilter auch mehrere Builds
+ als Touchstone-Build kennzeichnen. Nur wenn das Ergebnis der Touchstone-Builds die
+ Ergebnisbedingung erfüllt, werden alle weiteren Kombinationen gebaut.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_ja.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_ja.html
new file mode 100644
index 0000000..620ec2a
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_ja.html
@@ -0,0 +1,5 @@
+<div>
+ すべての組み合わせをビルドする前に、正常かどうかチェックしたい場合に使用します。
+ フィルターを使用して、最初に実行するビルドの組み合わせを選択できます。
+ 結果が"ビルド結果"の条件を満たした場合、残りの組み合わせがビルドされます。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_zh_TW.html
new file mode 100644
index 0000000..9aa296d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-hasTouchStoneCombinationFilter_zh_TW.html
@@ -0,0 +1,5 @@
+<div>
+ 如果您想在建置所有組合前先做些例行檢查,就可以使用「試金石」建置。
+ 可以透過組合篩選條件選出一些組合,並優先建置它們。
+ 只有在結果符合預期條件時,才會建置其他組合。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially.html
new file mode 100644
index 0000000..a6a9288
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially.html
@@ -0,0 +1,5 @@
+<div>
+ With this option checked, Jenkins builds each configuration in a sequence.
+ This can be useful if your configuration needs to access the shared resource
+ like database, as well as to avoid crowding out other jobs.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_de.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_de.html
new file mode 100644
index 0000000..e0636e2
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_de.html
@@ -0,0 +1,6 @@
+<div>
+ Wenn angewählt, baut Jenkins alle Konfigurationen sequentiell nacheinander.
+ Dies kann zum einen nützlich sein, wenn Konfigurationen eine gemeinsame Ressource
+ benötigen, z.B. eine Datenbank. Zum anderen vermeidet es die Verdrängung
+ anderer Jobs in der Build-Warteschlange.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_ja.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_ja.html
new file mode 100644
index 0000000..9304375
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_ja.html
@@ -0,0 +1,4 @@
+<div>
+ 各設定を順番にビルドします。これは、(複数ジョブが同時にビルドされることにより)他のジョブがビルドされないことを防ぐとともに、
+ データベースのような共有リソースへのアクセスを必要とする場合に役に立ちます。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_zh_TW.html
new file mode 100644
index 0000000..3e92ef1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/DefaultMatrixExecutionStrategyImpl/help-runSequentially_zh_TW.html
@@ -0,0 +1,4 @@
+<div>
+ 選用本功能時,Jenkins 會依序建置各種不同的設定。
+ 如果您的設定需要存取資料庫這類共用資料時就很好用,此外,也能避免排擠掉其他作業。
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/JDKAxis/config.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/JDKAxis/config.jelly
new file mode 100644
index 0000000..767862c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/JDKAxis/config.jelly
@@ -0,0 +1,33 @@
+<!--
+The MIT License
+
+Copyright (c) 2010, InfraDNA, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+<!-- JDK config -->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <f:entry>
+ <j:forEach var="jdk" items="${app.JDKs}">
+ <f:checkbox name="values" json="${jdk.name}" checked="${instance.values.contains(jdk.name)}" title="${jdk.name}" />
+ <st:nbsp/>
+ </j:forEach>
+ </f:entry>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config.jelly
new file mode 100644
index 0000000..28804d7
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config.jelly
@@ -0,0 +1,66 @@
+<!--
+The MIT License
+
+Copyright (c) 2010, InfraDNA, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <f:entry title="${%Name}" field="name">
+ <f:textbox default="label" />
+ </f:entry>
+ <f:entry title="${%Node/Label}" field="labels">
+ <div class="yahooTree labelAxis-tree" style="border: 1px solid gray; height: 10em; overflow:auto;" values="${instance.valueString}" />
+ <script>
+ Behaviour.specify("DIV.labelAxis-tree", 'LabelAxis', 0, function(e) {
+ var tree = new YAHOO.widget.TreeView(e);
+
+ var labels = new YAHOO.widget.TextNode("${%Labels}", tree.getRoot(), false);
+ var machines = new YAHOO.widget.TextNode("${%Individual nodes}", tree.getRoot(), false);
+
+ var values = (e.getAttribute("values") || "").split("/");
+ function has(v) {
+ return values.include(v) ? 'checked="checked" ' : "";
+ }
+ <j:forEach var="l" items="${app.labelAtoms}">
+ new YAHOO.widget.HTMLNode(<j:out value="${descriptor.buildLabelCheckBox(l,instance)}"/>, ${l.isSelfLabel()?'machines':'labels'}, false);
+ </j:forEach>
+
+ tree.draw();
+ <!--
+ force the rendering of HTML, so that input fields are there
+ even when the form is submitted without this tree expanded.
+ -->
+ tree.expandAll();
+ tree.collapseAll();
+
+ <!--
+ cancel the event.
+
+ from http://yuilibrary.com/forum/viewtopic.php?f=89&t=8209&p=26239&hilit=HTMLNode#p26239
+ "To prevent toggling and allow the link to work, add a listener to the clickEvent on that tree and simply return false"
+ -->
+ tree.subscribe("clickEvent", function(node) {
+ return false;
+ });
+ });
+ </script>
+ </f:entry>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_da.properties
new file mode 100644
index 0000000..bf0e839
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_da.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Node/Label=Node/Etiket
+Labels=Etiketter
+Individual\ nodes=Individuelle noder
+Name=Navn
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_de.properties
new file mode 100644
index 0000000..4536049
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_de.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Node/Label=Knoten/Label
+Labels=Labels
+Individual\ nodes=Einzelne Knoten
+Name=Name
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_es.properties
new file mode 100644
index 0000000..e12d7ab
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_es.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Node/Label=Nodo/Etiqueta
+Labels=Etiquetas
+Individual\ nodes=Nodos individuales
+Name=Nombre
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_ja.properties
new file mode 100644
index 0000000..7d3dc29
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_ja.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Name=\u540d\u524d
+Node/Label=\u30ce\u30fc\u30c9/\u30e9\u30d9\u30eb
+Labels=\u30e9\u30d9\u30eb
+Individual\ nodes=\u500b\u5225\u306e\u30ce\u30fc\u30c9
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_pt.properties
new file mode 100644
index 0000000..2f8a887
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_pt.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Node/Label=N\u00f3
+Labels=Label
+Individual\ nodes=N\u00f3s individuais
+Name=Nome
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_zh_TW.properties
new file mode 100644
index 0000000..074c7b5
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/config_zh_TW.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Name=\u540d\u7a31
+Node/Label=\u7bc0\u9ede/\u6a19\u7c64
+Labels=\u6a19\u7c64
+Individual\ nodes=\u7368\u7acb\u7bc0\u9ede
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels.html
new file mode 100644
index 0000000..48c43aa
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels.html
@@ -0,0 +1,27 @@
+<div>
+ Specify nodes where builds are performed.
+
+ <ul>
+ <li>
+ If none is selected, Jenkins will choose
+ an available node to perform a build (this is the same behavior as the free-style
+ project when "tie this project to node" is not selected). This is useful
+ when the project doesn't have a dependency on any particular node, as
+ it allows Jenkins to utilize nodes in an optimal fashion.
+ <li>
+ If one is selected, Jenkins will always run the build on the specified node
+ (if you select one from "individual nodes")
+ or one of the nodes that belongs to the label (if you select one from "labels").
+ This is useful when the build is required to run on a specific computer,
+ or a subset of computers. For example, maybe your build requires MacOS X.
+ <li>
+ If multiple values are selected, the configuration matrix will be expanded to include
+ all of them, and builds will be performed on all of the selected nodes/labels.
+ This is useful, for example, when you'd like to run tests on Windows, Linux,
+ and Solaris.
+ </ul>
+
+ <br>
+ During a build, the selected node name / label name for the given run is available as the "label" axis.
+ See the help of "axes" below for more information about how to access the axis value.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_de.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_de.html
new file mode 100644
index 0000000..be40b81
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_de.html
@@ -0,0 +1,30 @@
+<div>
+ Geben Sie die Knoten an, auf denen Ihre Builds ausgeführt werden sollen.
+ <ul>
+ <li>
+ Ist kein Knoten ausgewählt, wird Jenkins einen verfügbaren Knoten auswählen,
+ um den Build durchzuführen (dies ist das gleiche Verhalten wie beim
+ "Free-Style-Projekt", wenn "Projekt an Knoten binden" abgewählt ist).
+ Dies ist sinnvoll, wenn das Projekt keine Abhängigkeiten zu einem bestimmten
+ Knoten aufweist, da es Jenkins erlaubt, die Knoten optimal einzusetzen.
+ <li>
+ Ist ein Knoten ausgewählt, wird Jenkins den Build immer auf dem gewählten Knoten
+ (wenn ein Knoten unter "Bestimmte Knoten" ausgewählt wurde) oder auf einem Knoten,
+ der zum gewählten Label gehört (wenn ein Knoten unter "Labels" ausgewählt wurde), ausführen.
+ Dies ist sinnvoll, wenn der Build auf einem bestimmten Rechner oder
+ Rechnergruppe ausgeführt werden soll. Beispielsweise könnte der Build ein
+ bestimmtes Betriebssystem wie MacOS X voraussetzen.
+ <li>
+ Sind mehrere Knoten ausgewählt, wird die Konfigurationsmatrix so erweitert,
+ dass sie alle Werte beinhaltet. Builds werden dann auf allen gewählten Knoten/Labels
+ ausgeführt.
+ Dies ist sinnvoll, wenn Sie beispielsweise Tests unter Windows, Linux und
+ Solaris ausführen möchten.
+ </ul>
+
+ <br>
+ Während eines Builds ist der aktuelle Name des Knotens bzw. des Labels als Achse
+ <tt>label</tt> sichtbar.
+ Im Hilfetext zu "Achsen" finden Sie weitere Informationen, wie Sie auf die
+ Werte der Achsenvariablen zugreifen können.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_fr.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_fr.html
new file mode 100644
index 0000000..c984516
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_fr.html
@@ -0,0 +1,34 @@
+<div>
+ Spécifiez ici les machines (noeuds) sur lesquelles les builds sont
+ exécutés.
+
+ <ul>
+ <li>
+ Si aucune n'est sélectionnée, Jenkins choisira une des machines
+ disponibles pour l'exécution du build (ce comportement est le même
+ pour les projets free-style quand l'option "attacher ce projet au
+ noeud" n'est pas sélectionnée). C'est utile quand le projet n'a
+ pas de dépendance avec une machine particulière; Jenkins peut en effet
+ ainsi utiliser les noeuds de façon optimale.
+ <li>
+ Si une machine est sélectionnée, Jenkins lancera toujours le build
+ dessus (si vous en sélectionnez une parmi les "noeuds spécifiques")
+ ou sur une des machines qui appartiennent à un libellé (si vous
+ en choisissez une dans "libellé").
+ C'est pratique quand le build doit tourner sur un ordinateur
+ particulier ou sur un sous-ensemble d'ordinateurs. Par exemple,
+ si votre build nécessite MacOS X.
+ <li>
+ Si de multiples valeurs sont sélectionnées, la matrice de
+ configuration sera étendue de façon à les inclure toutes et les
+ builds seront exécutés sur tous les noeuds ou libellés.
+ Cela est utile, par exemple, quand vous souhaitez lancer des tests
+ sur Windows, Linux et Solaris.
+ </ul>
+
+ <br>
+ Au cours d'un build, le nom du noeud ou du libellé sélectionné pour un
+ lancement donné est visible sous l'axe "libellé".
+ Référez-vous à l'aide sur les "axes" ci-dessous pour plus d'informations
+ sur l'accès à la valeur de l'axe.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_ja.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_ja.html
new file mode 100644
index 0000000..0c06b8a
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_ja.html
@@ -0,0 +1,23 @@
+<div>
+ ビルドを実行するノードを選択します。
+
+ <ul>
+ <li>
+ ノードを選択すると、Jenkinsはビルドを実行可能なノードを選択します(この動作は、
+ "このビルドは指定のノード上でのみ実行"を選択していない場合のフリースタイルと同じです)。
+ プロジェクトが特定のノードに依存していないとき、Jenkinsはノードを最適な方法で利用できるので、
+ 便利です。
+ <li>
+ 1つだけ選択すると、Jenkinsはビルドを、指定されたノード("個別のノード"から1つ選択)か、
+ ラベルに属する複数ノードのうちの1つのノード("ラベル"から1つ選択)で実行します。
+ これは、ビルドを特定のコンピューターやコンピューターのセットで動かす必要がある場合に便利です。
+ 例えば、ビルドにMacOS Xが必要な場合など。
+ <li>
+ 複数の値を選択すると、構成マトリックスはそれらを含むように拡張され、
+ ビルドは選択したノードもしくはラベルで実行されます。例えば、Windows、LinuxおよびSolarisでテストをしたい場合に便利です。
+ </ul>
+
+ <br>
+ 選択したノード名やラベル名は、ビルド実行中には、"label"という軸として利用可能です。
+ 軸の値のアクセス方法の詳細については、"構成軸"のヘルプを参照してください。
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_nl.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_nl.html
new file mode 100644
index 0000000..72c5676
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_nl.html
@@ -0,0 +1,15 @@
+<div>
+ Geef de nodes, waar uw bouwpoging uitgevoerd wordt, op.
+ <ul>
+ <li>
+ Indien niet opgegeven, zal Jenkins een beschikbare node kiezen voor het uitvoeren van uw bouwpoging.(Dit is hetzelfde gedrag als voor een project vrije stijl, indien niet vast aan een welbepaalde node voor uitvoering toegewezen.) Dit is handig indien uw projecten geen specifieke afhankelijkheden naar een welbepaalde node hebben. Het stelt Jenkins in staat om zijn nodes op een optimale manier te benutten.
+ <li>
+ Indien U wel een node selecteert, zal Jenkins uw bouwpogingen altijd op de opgegeven node uitvoeren. Op eenzelfde manier zal Jenkins ervoor zorgen dat uw pogingen altijd op ��n node van een groep nodes zal uitgevoerd worden, indien u een groepslabel gekozen hebt. Dit is natuurlijk hoogst nuttig indien bepaalde van uw projecten op een welbepaalde node of soort node uitgevoerd dienen te worden. Bvb. indien sommige van uw projecten op windows, Mac Os, linux,.... uitgevoerd moeten worden.
+ <li>
+ Indien U meerdere waarden selecteert, wordt de configuratiematrix zo opgesteld, dat uw bouwpogingen op alle geselecteerde nodes en/of groepen uitgevoerd wordt. Dit is handig indien je projecten hebt die op meerdere platformen gebouwd moeten worden. Denk maar aan applicaties die ontwikkeld worden voor zowel Linux, Mac OS, Solaris als Windows.
+ </ul>
+
+ <br>
+ Tijdens een bouwpoging, is de naam van de node of nodegroep, waarop de bouwpoging plaatsvindt, beschikbaar onder de "label" dimensie.
+ Zie de beschikbare hulppaginas over dimensies indien U meer te weten wenst te komen over de dimensies van een matrixproject.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_pt_BR.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_pt_BR.html
new file mode 100644
index 0000000..148a6aa
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_pt_BR.html
@@ -0,0 +1,27 @@
+<div>
+ Especifica os nós onde as construções serão executadas.
+
+ <ul>
+ <li>
+ Se nenhum for selecionado, Jenkins escolherá
+ um nó disponível para executar uma construção (este é o mesmo comportamento do projeto
+ estilo-livre quando "amarrar este projeto ao nó" não estiver selecionado). Isto é útil
+ quando o projeto não tem dependência em nenhum nó particular, assim
+ ele permite ao Jenkins utilizar nós em uma forma ótima.
+ <li>
+ Se um for selecionado, Jenkins sempre executará a construção no nó especificado
+ (se você selecionar um de "nós específicos")
+ ou um dos nós que pertencem ao label (se você selecionar um de "label").
+ Isto é útil quando for necessário que a construção execute em um computador específico,
+ ou em um subconjunto de computadores. Por exemplo, talvez sua construção necessite de um MacOS X.
+ <li>
+ Se valores múltiplos forem selecionados, a matriz de configuração será expandida para incluir
+ todos eles, e as construçõs serão executadas em todos os nós/labels selecionandos.
+ Isto é últi, por exemplo, quando você quiser executar testes em Windows, Linux,
+ e Solaris.
+ </ul>
+
+ <br>
+ Durante uma construção, o nome do nó/label selecionado está disponível como o eixo "label".
+ Veja a ajuda de "eixos" abaixo para mais informações sobre como acessar o valor do eixo.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_ru.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_ru.html
new file mode 100644
index 0000000..7ff0fb7
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_ru.html
@@ -0,0 +1,28 @@
+<div>
+ Выберите узлы, на которых будет производиться сборка.
+
+ <ul>
+ <li>
+ Если ничего не выбрано, Jenkins сам выберет доступный узел для выполнения сборки
+ (такое же поведение как и в случае проекта в свободной форме (free-style), когда
+ опция "Привязать проект к узлу" не включена). Это полезно когда проект не имеет
+ зависимости от конкретного узла и позволяет системе использовать узлы оптимальным
+ образом.
+ <li>
+ Если выбран один узел, то Jenkins всегда будет выполнять сборку только на указанном
+ узле (если вы выбрали один из конкретных узлов), либо один из узлов с указанной меткой
+ (если вы выбрали одну из "Меток").
+ Это может быть полезно в случае, если сборка должна быть запущена на конкретном
+ узле или наборе узлов. Например, возможно, ваша сборка требует MacOS X.
+ <li>
+ Если выбрано несколько значений, конфигурационная матрица будет расширена для
+ включения их всех и сборки будут производиться на всех выбранных узлах/метках.
+ Это может быть удобно, если ваш проект собирается либо тестируется на Windows,
+ Linux и Solaris.
+ </ul>
+
+ <br>
+ В процессе сборки выбранное имя узла/метки доступно как ось "labels".
+ Смотрите в подсказку к опции "Оси (axes)" ниже для получения более подробной информации о том как
+ получить значения по осям.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_tr.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_tr.html
new file mode 100644
index 0000000..67350cb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_tr.html
@@ -0,0 +1,26 @@
+<div>
+ Yapılandırmaların çalıştırılacağı nodları belirleyiniz.
+
+ <ul>
+ <li>
+ Herhangi bir seçim yapılmaz ise, Jenkins yapılandırma için uygun bir nod seçecektir
+ (Aynı serbest-stil projede "bu projeyi bir noda bağla" seçeneğinin seçilmediği durumdaki gibi)
+ Eğer projenizin herhangi bir noda bağımlılığı yoksa Jenkins
+ nodları uygun biçimde değerlendirerek size en uygun durumu sağlayacaktır.
+ <li>
+ Eğer bir tane seçilirse, Jenkins yapılandırmayı daima seçilen nodda
+ ("belirli nodlar"dan birisi seçilirse)
+ veya etikete dahil olan nodlardan bir tanesinde (eğer "etiket"ten bir tane seçilirse) çalıştıracaktır.
+ Bu seçenek, yapılandırma eğer belli bir bilgisayar veya bilgisayarlar kümesinde çalıştırılacak ise
+ faydalı olacaktır. Mesela, yapılandırmanızın MacOS X üzerinde çalışması gerekebilir.
+ <li>
+ Eğer birden fazla değer seçilirse, konfigürasyon matrisi hepsini kapsayacak şekilde genişletilir,
+ ve yapılandırmalar seçilen tüm nodlar/etiketler üzerinde çalıştırılır.
+ Bu seçenek, mesela testlerinizi Windows, Linux ve Solaris üzerinde çalıştırmak istediğinizde
+ faydalı olacaktır.
+ </ul>
+
+ <br>
+ Yapılandırma esnasında, seçilen nod adı / etiket adı "etiket" ekseninde görüntülenecektir.
+ Eksen değerlerine nasıl erişileceğine dair daha fazla bilgi için, aşağıda "eksenler" ile ilgili yardım kısmına bakınız.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_zh_TW.html
new file mode 100644
index 0000000..0c8bcc3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help-labels_zh_TW.html
@@ -0,0 +1,21 @@
+<div>
+ 指定建置用的節點。
+
+ <ul>
+ <li>
+ 如果沒有選取任何節點,Jenkins 會自動挑一個節點來建置
+ (行為模式就像是沒有使用「限定建置節點」的 Free-Style 專案)。
+ 如果專案不一定要在哪些節點上才能建置,使用這個方式可以讓 Jenkins 充分利用每個節點。
+ <li>
+ 如果選定某個節點,Jenkins 就只會在那個節點上建置 (假設您是在「獨立節點」中挑出來的),
+ 或是在指定標籤中的任何一個節點上建置 (假如您是由「標籤」中選的)。
+ 這種設定方式很適合只能在特定電腦上執行的建置作業。例如,一定要 MacOS X 才能建置的東西。
+ <li>
+ 如果選取了一個以上的值,設定矩陣會將所有指定的項目納入展開,所有牽涉到的節點或標籤都會建置。
+ 舉例來說,如果您想在 Windows, Linux 及 Solaris 上面都執行測試的話,這一招就很有用。
+ </ul>
+
+ <br>
+ 建置時的節點或標籤名稱會顯示在「標籤」軸線上。
+ 參考下方「座標軸」的說明,可以知道怎麼看座標值。
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help.html
new file mode 100644
index 0000000..ae767d7
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help.html
@@ -0,0 +1,5 @@
+<div>
+ This axis lets you run the same build on multiple slaves (by specifying those slaves either by their labels
+ or their individual names.) This is useful for example to cross-compile your C projects on multiple platforms,
+ testing your Java projects on different OSes, and so on.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help_zh_TW.html
new file mode 100644
index 0000000..0dfdde3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelAxis/help_zh_TW.html
@@ -0,0 +1,4 @@
+<div>
+ 可以在不同 Slave 上建置作業的軸線 (可以依照標籤或是獨立名稱指定 Slave)。
+ 舉例來說,可以很方便的讓您在不同平台上編譯 C 專案,也可以在不同作業系統上測試 Java 專案。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config.jelly
new file mode 100644
index 0000000..0d927b4
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config.jelly
@@ -0,0 +1,32 @@
+<!--
+The MIT License
+
+Copyright (c) 2010, InfraDNA, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <f:entry title="${%Name}" field="name">
+ <f:textbox default="label_exp" />
+ </f:entry>
+ <f:entry title="${%Label Expressions}" field="labelExpr">
+ <f:textarea name="values" value="${instance.getValuesString()}" autoCompleteDelimChar=" "/>
+ </f:entry>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_es.properties
new file mode 100644
index 0000000..7331fad
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_es.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Label\ Expressions=Expresiones
+Name=Nombre
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_ja.properties
new file mode 100644
index 0000000..c4c53cd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_ja.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2011, Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Name=\u540d\u524d
+Label\ Expressions=\u30e9\u30d9\u30eb\u5f0f
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_pt.properties
new file mode 100644
index 0000000..f29f1d0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_pt.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Label\ Expressions=Express\u00f5es
+Name=Nome
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_zh_TW.properties
new file mode 100644
index 0000000..b4a9ecc
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/config_zh_TW.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Name=\u540d\u7a31
+Label\ Expressions=\u6a19\u7c64\u8868\u793a\u5f0f
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr.html
new file mode 100644
index 0000000..140931b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr.html
@@ -0,0 +1,4 @@
+<div>
+This is similar to "Slave" axis, but you can use label expressions, not just plain label names.
+Each line represents one label expression (i.e. one value of this axis).
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr_ja.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr_ja.html
new file mode 100644
index 0000000..fb599d3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr_ja.html
@@ -0,0 +1,4 @@
+<div>
+ "スレーブ"の軸と同様ですが、単なるラベル名だけでなくラベル式を使用することができます。
+ 1行が1つのラベル式を表します(この軸の値)。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr_zh_TW.html
new file mode 100644
index 0000000..ae6aebd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help-labelExpr_zh_TW.html
@@ -0,0 +1,4 @@
+<div>
+很像「Slave」軸,不過除了使用標籤名稱之外,您還可以用標籤表示式。
+一行代表一個表示式 (同時也是對應到軸線上的一個值)。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help.html
new file mode 100644
index 0000000..3c6f14f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help.html
@@ -0,0 +1,4 @@
+<div>
+ This axis lets you run the same build on multiple slaves (much like the "slaves" axis),
+ but this is more advanced in that it lets you use boolean expressions (such as <tt>foo&&bar</tt>)
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help_ja.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help_ja.html
new file mode 100644
index 0000000..22bd530
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help_ja.html
@@ -0,0 +1,4 @@
+<div>
+ この軸は、同一のビルドを複数のスレーブで実行することができます("スレーブ"の軸と同様に)。
+ しかし、論理式(例 <tt>foo&&bar</tt>)を使用できる点でより便利になっています。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help_zh_TW.html
new file mode 100644
index 0000000..fa2d523
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/LabelExpAxis/help_zh_TW.html
@@ -0,0 +1,4 @@
+<div>
+ 可以在多個節點上面執行相同建置的軸線。
+ 很像「Slave」軸,但更進階。您可以用布林表示式 (例如 <tt>foo&&bar</tt>)。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix.jelly
new file mode 100644
index 0000000..6b97bf9
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix.jelly
@@ -0,0 +1,48 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!--
+ Used to asynchronously update executor queue
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:s="/lib/form" xmlns:p="/lib/hudson/matrix-project">
+ <l:ajax>
+ <p:matrix autoRefresh="${it.isBuilding()}">
+ <j:set var="b" value="${p.run}" />
+ <j:choose>
+ <j:when test="${b==null}">
+ <img src="${imagesURL}/24x24/grey.png" tooltip="${%Not run}" alt="${%Not run}" height="24" width="24"/>
+ </j:when>
+ <j:otherwise>
+ <a href="${p.nearestRunUrl}" class="model-link inside">
+ <img src="${imagesURL}/24x24/${b.buildStatusUrl}" tooltip="${p.tooltip} ${it.number!=b.number?(it.isBuilding()?'- pending' : '- skipped'):''}" alt="${p.tooltip}" style="${it.number!=b.number?'opacity:0.5':''}" height="24" width="24"/>
+ <j:if test="${empty(o.x) and empty(o.y)}">
+ ${p.combination.toString(o.z)}
+ </j:if>
+ </a>
+ </j:otherwise>
+ </j:choose>
+ </p:matrix>
+ </l:ajax>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_da.properties
new file mode 100644
index 0000000..9d5c0d7
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_da.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=Ikke k\u00f8rt
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_de.properties
new file mode 100644
index 0000000..0b34ad1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_de.properties
@@ -0,0 +1 @@
+Not\ run=Nicht gelaufen
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_es.properties
new file mode 100644
index 0000000..5796368
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_es.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=No ejecutar
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_fr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_fr.properties
new file mode 100644
index 0000000..c69d14d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_fr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=Non lanc\u00e9
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_it.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_it.properties
new file mode 100644
index 0000000..6e9c3ea
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_it.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=Non eseguito
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_ja.properties
new file mode 100644
index 0000000..78f16d7
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_ja.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=\u672A\u5B9F\u884C
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_nl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_nl.properties
new file mode 100644
index 0000000..b9da819
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_nl.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Not\ run=Niet uitgevoerd
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_pt.properties
new file mode 100644
index 0000000..e55fc62
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_pt.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=N\u00e3o executado
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_pt_BR.properties
new file mode 100644
index 0000000..31b5049
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_pt_BR.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Cleiber Silva, Fernando Boaglio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run= N\u00e3o executar
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_ru.properties
new file mode 100644
index 0000000..7115bf1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_ru.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Not\ run=\u0417\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_zh_TW.properties
new file mode 100644
index 0000000..27e2b2f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/ajaxMatrix_zh_TW.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ run=\u672a\u57f7\u884c
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll.jelly
new file mode 100644
index 0000000..3ec6f07
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll.jelly
@@ -0,0 +1,43 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!-- Confirm deletion of the build/run -->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt">
+ <l:layout title="${it.fullDisplayName}" norefresh="true">
+ <st:include page="sidepanel.jelly" />
+ <l:main-panel>
+ <j:set var="msg" value="${it.whyKeepLog}"/>
+ <j:if test="${msg!=null}">
+ <b>${%Warning}</b>: ${%cannotMsg(msg)}
+ </j:if>
+ <j:if test="${msg==null}">
+ <form method="post" action="doDeleteAll">
+ ${%Are you sure about deleting the build and all configurations in this build?}
+ <f:submit value="${%Yes}" />
+ </form>
+ </j:if>
+ </l:main-panel>
+ </l:layout>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll.properties
new file mode 100644
index 0000000..3b9ef2f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+cannotMsg=Cannot delete this build: {0}
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_de.properties
new file mode 100644
index 0000000..c5c0c8d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_de.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2012, Frederic Gurr
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Warning=Warnung
+Are\ you\ sure\ about\ deleting\ the\ build\ and\ all\ configurations\ in\ this\ build?=Sollen dieses Build und alle Konfigurationen dieses Builds wirklich gel�scht werden?
+Yes=Ja
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_es.properties
new file mode 100644
index 0000000..fc5e5e1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_es.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Yes=S�
+cannotMsg=No se puede
+Warning=Atenci�n
+Are\ you\ sure\ about\ deleting\ the\ build\ and\ all\ configurations\ in\ this\ build?=�Est�s seguro de querer borrar esta ejecuci�n y toda su configuraci�n?
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_ja.properties
new file mode 100644
index 0000000..d529392
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_ja.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-2013, Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Warning=\u8b66\u544a
+Are\ you\ sure\ about\ deleting\ the\ build\ and\ all\ configurations\ in\ this\ build?=\
+ \u30d3\u30eb\u30c9\u3068\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
+Yes=\u306f\u3044
+cannotMsg=\u3053\u306e\u30d3\u30eb\u30c9: {0} \u306f\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_pt.properties
new file mode 100644
index 0000000..b9c7673
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_pt.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+cannotMsg=N\u00e3o foi poss\u00edvel remover esse build: {0}
+Are\ you\ sure\ about\ deleting\ the\ build\ and\ all\ configurations\ in\ this\ build?=Tem certeza que deseja remover esse build e todas suas configura\u00e7\u00f5es ?
+Yes=Sim
+Warning=Aviso
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_ru.properties
new file mode 100644
index 0000000..6d3fcfc
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_ru.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Are\ you\ sure\ about\ deleting\ the\ build\ and\ all\ configurations\ in\ this\ build?=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0431\u043E\u0440\u043A\u0443 \u0438 \u0432\u0441\u0435 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438?
+Yes=\u0414\u0430
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_zh_TW.properties
new file mode 100644
index 0000000..3eab311
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/confirmDeleteAll_zh_TW.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Warning=\u8b66\u544a
+Are\ you\ sure\ about\ deleting\ the\ build\ and\ all\ configurations\ in\ this\ build?=\u60a8\u78ba\u5b9a\u8981\u522a\u9664\u5efa\u7f6e\u8ddf\u5b83\u6240\u6709\u7684\u8a2d\u5b9a\u55ce?
+Yes=\u662f
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete.jelly
new file mode 100644
index 0000000..6d51d1f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete.jelly
@@ -0,0 +1,34 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Ullrich Hafner
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!--
+ Displays the links to delete the build.
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt">
+ <j:if test="${!it.building}">
+ <l:task icon="images/24x24/edit-delete.png" href="${buildUrl.baseUrl}/confirmDelete" title="${%Delete Build}" permission="${it.DELETE}" />
+ <l:task icon="images/24x24/edit-delete.png" href="${buildUrl.baseUrl}/confirmDeleteAll" title="${%Delete this build and all configurations in this build}" permission="${it.DELETE}" />
+ </j:if>
+</j:jelly>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ca.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ca.properties
new file mode 100644
index 0000000..0428685
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ca.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Delete\ Build=Eliminar Build
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_cs.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_cs.properties
new file mode 100644
index 0000000..e90bb13
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_cs.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Delete\ Build=Smazat sestaven\u00ED
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=Smazat sestaven\u00ED a v\u0161echna jeho nastaven\u00ED
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_de.properties
new file mode 100644
index 0000000..d1a6bbe
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_de.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2012, Frederic Gurr
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Delete\ Build=Build l�schen
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=Build und alle Konfigurationen dieses Builds l�schen
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_es.properties
new file mode 100644
index 0000000..c200f13
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_es.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Delete\ Build=Borrar esta ejecuci�n
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=Borrar esta ejecuci�n y todas sus configuraciones
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ja.properties
new file mode 100644
index 0000000..10fefb6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ja.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2012, Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Delete\ Build=\u30d3\u30eb\u30c9\u3092\u524a\u9664
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=\
+ \u30d3\u30eb\u30c9\u3068\u8a2d\u5b9a\u3092\u524a\u9664
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ko.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ko.properties
new file mode 100644
index 0000000..3d074eb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ko.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Delete\ Build=\uBE4C\uB4DC \uC0AD\uC81C
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=\uC774 \uBE4C\uB4DC\uC640 \uBAA8\uB4E0 \uAD6C\uC131\uC758 \uBE4C\uB4DC\uB4E4\uC744 \uC0AD\uC81C
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pl.properties
new file mode 100644
index 0000000..6190150
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pl.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Delete\ Build=Usu\u0144 build
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=Usu\u0144 ten build i wszystkie konfiguracje w nim
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pt.properties
new file mode 100644
index 0000000..82b53cf
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pt.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Delete\ Build=Remover build
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=Remover esse build e todas suas configura\u00e7\u00f5es
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pt_BR.properties
new file mode 100644
index 0000000..8bf572d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_pt_BR.properties
@@ -0,0 +1,5 @@
+# This file is under the MIT License by authors
+# Translated by: Fernando Boaglio
+
+Delete\ Build=Remover este build
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=Remover este build e todas as suas configura\u00E7\u00F5es
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ru.properties
new file mode 100644
index 0000000..3e59e45
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_ru.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Delete\ Build=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0431\u043E\u0440\u043A\u0443
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u0443 \u0441\u0431\u043E\u0440\u043A\u0443 \u0432\u043C\u0435\u0441\u0442\u0435 \u0441\u043E \u0432\u0441\u0435\u043C\u0438 \u0435\u0435 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F\u043C\u0438
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_zh_CN.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_zh_CN.properties
new file mode 100644
index 0000000..d340354
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_zh_CN.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Delete\ Build=\u5220\u9664\u6784\u5EFA
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=\u5220\u9664\u6784\u5EFA\u53CA\u5176\u914D\u7F6E
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_zh_TW.properties
new file mode 100644
index 0000000..9bdbfba
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/delete_zh_TW.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Delete\ Build=\u522a\u9664\u5efa\u7f6e
+Delete\ this\ build\ and\ all\ configurations\ in\ this\ build=\u522a\u9664\u5efa\u7f6e\u8ddf\u5b83\u6240\u6709\u7684\u8a2d\u5b9a
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/main.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/main.jelly
new file mode 100644
index 0000000..1701ef1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixBuild/main.jelly
@@ -0,0 +1,28 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <st:include page="ajaxMatrix.jelly" />
+</j:jelly>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixConfigurationSorter/config.groovy b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixConfigurationSorter/config.groovy
new file mode 100644
index 0000000..39b2321
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixConfigurationSorter/config.groovy
@@ -0,0 +1 @@
+// default is empty
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix.jelly
new file mode 100644
index 0000000..c59a1b0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix.jelly
@@ -0,0 +1,47 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!--
+ Used to asynchronously update executor queue
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:s="/lib/form" xmlns:p="/lib/hudson/matrix-project">
+ <l:ajax>
+ <p:matrix autoRefresh="true">
+ <j:choose>
+ <j:when test="${p==null}">
+ <img src="${imagesURL}/24x24/grey.png" tooltip="${%Not configured}" alt="${%Not configured}" height="24" width="24"/>
+ </j:when>
+ <j:otherwise>
+ <a href="${p.shortUrl}" class="model-link inside">
+ <img src="${imagesURL}/24x24/${p.buildStatusUrl}" tooltip="${p.iconColor.description}" alt="${p.iconColor.description}" height="24" width="24"/>
+ <j:if test="${empty(o.x) and empty(o.y)}">
+ ${p.combination.toString(o.z)}
+ </j:if>
+ </a>
+ </j:otherwise>
+ </j:choose>
+ </p:matrix>
+ </l:ajax>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_da.properties
new file mode 100644
index 0000000..9a6b92b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_da.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=Ikke konfigureret
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_de.properties
new file mode 100644
index 0000000..0b7f459
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_de.properties
@@ -0,0 +1 @@
+Not\ configured=Nicht konfiguriert
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_es.properties
new file mode 100644
index 0000000..f8e08a2
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_es.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=Sin configurar
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_fi.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_fi.properties
new file mode 100644
index 0000000..7c70b59
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_fi.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=Ei konfiguroitu
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_fr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_fr.properties
new file mode 100644
index 0000000..d973d5d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_fr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=Non configur\u00E9e
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_it.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_it.properties
new file mode 100644
index 0000000..68bbeb0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_it.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=Non configurato
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ja.properties
new file mode 100644
index 0000000..0ec0e07
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ja.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=\u672A\u8A2D\u5B9A
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pl.properties
new file mode 100644
index 0000000..bf6ce23
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pl.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=Nie skonfigurowane
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pt.properties
new file mode 100644
index 0000000..46252b1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pt.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=N\u00e3o configurado
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pt_BR.properties
new file mode 100644
index 0000000..ceb7af3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_pt_BR.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Cleiber Silva
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured= N\u00e3o configurado
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ro.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ro.properties
new file mode 100644
index 0000000..bcdb4dc
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ro.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Not\ configured=Neconfigurat
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ru.properties
new file mode 100644
index 0000000..8d06417
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_ru.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Not\ configured=\u041D\u0435 \u0441\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043E
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_sv_SE.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_sv_SE.properties
new file mode 100644
index 0000000..4ad86bb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_sv_SE.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Not\ configured=Ej konfigurerad
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_zh_CN.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_zh_CN.properties
new file mode 100644
index 0000000..67b0344
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_zh_CN.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=\u5C1A\u672A\u914D\u7F6E
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_zh_TW.properties
new file mode 100644
index 0000000..7e5038d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/ajaxMatrix_zh_TW.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Not\ configured=\u672a\u8a2d\u5b9a
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries.jelly
new file mode 100644
index 0000000..12eeb95
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries.jelly
@@ -0,0 +1,97 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2011, Sun Microsystems, Inc., Kohsuke Kawaguchi,
+Stephen Connolly, Yahoo!, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!--
+ Config page.
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+
+ <p:config-disableBuild/>
+ <p:config-concurrentBuild />
+
+ <f:section title="${%Advanced Project Options}">
+ <f:advanced>
+ <p:config-assignedLabel />
+ <p:config-quietPeriod />
+ <p:config-retryCount />
+ <p:config-blockWhenUpstreamBuilding />
+ <p:config-blockWhenDownstreamBuilding />
+ <f:optionalBlock name="customWorkspace" title="${%Use custom workspace}"
+ checked="${instance.customWorkspace!=null or instance.hasChildCustomWorkspace()}"
+ help="/help/project-config/custom-workspace.html">
+ <f:entry title="${%Directory}">
+ <f:textbox name="customWorkspace.directory" field="customWorkspace" />
+ </f:entry>
+ <f:entry title="${%Directory for sub-builds}">
+ <f:textbox name="childCustomWorkspace.directory" field="childCustomWorkspace" value="${instance.hasChildCustomWorkspace()?instance.childCustomWorkspace:''}" />
+ </f:entry>
+ </f:optionalBlock>
+
+ <f:entry title="${%Display Name}" field="displayNameOrNull">
+ <f:textbox checkUrl="'${rootURL}/checkDisplayName?displayName='+encodeURIComponent(this.value)+'&jobName='+encodeURIComponent('${h.jsStringEscape(it.name)}')"/>
+ </f:entry>
+ </f:advanced>
+ </f:section>
+
+ <p:config-scm/>
+
+ <p:config-trigger/>
+
+ <f:section title="${%Configuration Matrix}">
+ <!-- Needed for LabelAxis, but including these from LabelAxis/config.jelly is too late -->
+ <l:yui module="treeview" />
+ <link rel="stylesheet" type="text/css"
+ href="${rootURL}/scripts/yui/treeview/assets/skins/sam/treeview.css" />
+
+ <f:block>
+ <f:hetero-list name="axis" hasHeader="true"
+ descriptors="${descriptor.axisDescriptors}"
+ items="${it.axes}"
+ addCaption="${%Add axis}"/>
+ </f:block>
+
+ <f:optionalBlock name="hasCombinationFilter" title="${%Combination Filter}" checked="${!empty(it.combinationFilter)}"
+ help="/plugin/matrix-project/help/matrix/combinationfilter.html">
+ <f:entry title="${%Filter}">
+ <f:textbox name="combinationFilter" value="${it.combinationFilter}" />
+ </f:entry>
+ </f:optionalBlock>
+
+ <j:choose>
+ <j:when test="${descriptor.executionStrategyDescriptors.size() gt 1}">
+ <f:dropdownDescriptorSelector title="${%Execution Strategy}" field="executionStrategy"/>
+ </j:when>
+ <j:otherwise>
+ <!-- for the default case when there's only one execution strategy, render it inline to simplify the UI -->
+ <f:property field="executionStrategy" propertyDescriptor="${descriptor.executionStrategyDescriptors.get(0)}"/>
+ </j:otherwise>
+ </j:choose>
+ </f:section>
+
+ <p:config-buildWrappers />
+ <p:config-builders />
+ <p:config-publishers2 />
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_da.properties
new file mode 100644
index 0000000..0c7cc66
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_da.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Combination\ Filter=Kombinationsfilter
+Advanced\ Project\ Options=Avancerede Indstillinger
+Configuration\ Matrix=\
+Afvikl kun resten af byggene hvis touchstone byggene har mindst det \u00f8nskede resultat.
+Add\ axis=Tilf\u00f8j Akse
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_de.properties
new file mode 100644
index 0000000..b574075
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_de.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Erweiterte Projekteinstellungen
+Configuration\ Matrix=Konfigurationsmatrix
+Combination\ Filter=Kombinationsfilter
+Add\ axis=Achse hinzuf�gen
+Directory=Verzeichnis
+Directory\ for\ sub-builds=Verzeichnis f\u00FCr sub-builds
+Display\ Name=Anzeigename
+Use\ custom\ workspace=Eigenen Arbeitsbereich benutzen
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_es.properties
new file mode 100644
index 0000000..636b97f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_es.properties
@@ -0,0 +1,32 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Opciones avanzadas del proyecto
+Configuration\ Matrix=Matriz de configuraci�n
+Combination\ Filter=Filtro de combinaci�n
+Filter=Filtro
+Add\ axis=A�adir eje
+Display\ Name=Nombre a mostrar
+Execution\ Strategy=Estrategia de ejecuci�n
+Use\ custom\ workspace=Utilizar un directorio de trabajo personalizado
+Directory=Directorio
+Directory\ for\ sub-builds=Directorio para sub-tareas
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_fr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_fr.properties
new file mode 100644
index 0000000..96ec555
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_fr.properties
@@ -0,0 +1,35 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Options Avanc�es du projet
+Configuration\ Matrix=Matrice de configuration
+Build\ on\ multiple\ nodes=Lancer les builds sur plusieurs noeuds
+Node=Noeud
+Name=Nom
+Values=Valeurs
+Add\ more\ axis=Ajouter des axes
+Delete=Supprimer
+Individual\ nodes=Les noeuds
+Labels=Etiquettes
+Axes=
+Combination\ Filter=Filtre sur les combinaisons
+Filter=Filtre
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ja.properties
new file mode 100644
index 0000000..1a3ef8d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ja.properties
@@ -0,0 +1,33 @@
+# The MIT License
+#
+# Copyright (c) 2004-2012, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe,
+# Stephen Connolly, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u9ad8\u5ea6\u306a\u8a2d\u5b9a
+Configuration\ Matrix=\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u306e\u8a2d\u5b9a
+Add\ axis=\u8ef8\u306e\u8ffd\u52a0
+Combination\ Filter=\u7d44\u307f\u5408\u308f\u305b\u30d5\u30a3\u30eb\u30bf\u30fc
+Filter=\u30d5\u30a3\u30eb\u30bf\u30fc
+Display\ Name=\u8868\u793a\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d
+Execution\ Strategy=\u5b9f\u884c\u65b9\u6cd5
+Directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+Directory\ for\ sub-builds=\u5b50\u30d3\u30eb\u30c9\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea
+Use\ custom\ workspace=\u30ab\u30b9\u30bf\u30e0\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u7528
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ko.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ko.properties
new file mode 100644
index 0000000..99575b6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ko.properties
@@ -0,0 +1,6 @@
+# This file is under the MIT License by authors
+
+Advanced\ Project\ Options=\uACE0\uAE09 \uD504\uB85C\uC81D\uD2B8 \uC635\uC158
+Directory=\uB514\uB809\uD130\uB9AC
+Directory\ for\ sub-builds=\uC11C\uBE0C \uBE4C\uB4DC \uB514\uB809\uD130\uB9AC
+Display\ Name=\uD45C\uC2DC \uC774\uB984
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_nl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_nl.properties
new file mode 100644
index 0000000..014476c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_nl.properties
@@ -0,0 +1,31 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Geavanceerde projectopties
+Configuration\ Matrix=Configuratiematrix
+Build\ on\ multiple\ nodes=Start een bouwpoging op meerder nodes.
+Node=Node
+Display\ Name=Weergegeven naam
+Name=Naam
+Values=Waarden
+Add\ more\ axis=Voeg assen toe
+Delete=Verwijder
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_pt.properties
new file mode 100644
index 0000000..7b8c986
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_pt.properties
@@ -0,0 +1,33 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Op\u00e7\u00f5es avan\u00e7adas de projeto
+Directory=Diret\u00f3rio
+Filter=Filtro
+Directory\ for\ sub-builds=Diret\u00f3rio dos sub-builds
+Display\ Name=Nome de exibi\u00e7\u00e3o
+Use\ custom\ workspace=Usar workspace customizado
+Combination\ Filter=Filtro combinado
+Execution\ Strategy=Estrat\u00e9gia de execu\u00e7\u00e3o
+Configuration\ Matrix=Configura\u00e7\u00e3o da matriz
+Add\ axis=Adicionar eixo
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_pt_BR.properties
new file mode 100644
index 0000000..440b136
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_pt_BR.properties
@@ -0,0 +1,38 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva, Fernando Boaglio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Op\u00E7\u00F5es avan\u00E7adas de projeto
+Configuration\ Matrix=Matriz de configura\u00E7\u00E3o
+Build\ on\ multiple\ nodes=Construir em m\u00FAltiplos n\u00f3s
+Node=N\u00f3
+Name=Nome
+Use\ custom\ workspace=Usar workspace customizado
+Values=Valor
+Add\ more\ axis=Adicionar mais eixos
+Delete=ApagarAxes= Remover eixos
+Labels= R\u00f3tulo
+Directory=Pasta
+Directory\ for\ sub-builds=Pasta para sub-builds
+Display\ Name=Nome a ser mostrado
+Individual\ nodes= N\u00f3s individuais
+Combination\ Filter= Filtro combinado
+Axes= Eixos
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ru.properties
new file mode 100644
index 0000000..5cb73d3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_ru.properties
@@ -0,0 +1,33 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430
+Configuration\ Matrix=\u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439
+Build\ on\ multiple\ nodes=\u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u0437\u043b\u0430\u0445
+Node=\u0423\u0437\u0435\u043b
+Name=\u0418\u043c\u044f
+Values=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f
+Add\ more\ axis=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u044b
+Delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+Individual\ nodes=\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0443\u0437\u043b\u044b
+Labels=\u041c\u0435\u0442\u043a\u0438
+Axes=\u041e\u0441\u0438
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_sk.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_sk.properties
new file mode 100644
index 0000000..2ce2359
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_sk.properties
@@ -0,0 +1,5 @@
+# This file is under the MIT License by authors
+
+Advanced\ Project\ Options=Pokro\u010Dil\u00E9 nastavenia projektu
+Directory=Adres\u00E1r
+Use\ custom\ workspace=Pou\u017Ei vlastn\u00FD pracovn\u00FD priestor
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_sv_SE.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_sv_SE.properties
new file mode 100644
index 0000000..a1494c0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_sv_SE.properties
@@ -0,0 +1,5 @@
+# This file is under the MIT License by authors
+
+Advanced\ Project\ Options=Avancerade projektinst\u00E4llningar
+Directory=Katalog
+Display\ Name=Visningsnamn
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_tr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_tr.properties
new file mode 100644
index 0000000..15c7eba
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_tr.properties
@@ -0,0 +1,35 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=Geli\u015fmi\u015f\ Proje\ Se\u00e7enekleri
+Configuration\ Matrix=Konfig\u00fcrasyon\ Matrisi
+Build\ on\ multiple\ nodes=\u00c7oklu nod \u00fczerinde yap\u0131land\u0131r
+Node=Nod
+Name=\u0130sim
+Values=De\u011ferler
+Add\ more\ axis=Eksen ekle
+Delete=Sil
+Individual\ nodes=Tek nodlar
+Labels=Etiketler
+Axes=Eksenler
+Filter\ Combinations=Kombinasyonlari Filtrele
+Filter=Filtre
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_zh_TW.properties
new file mode 100644
index 0000000..bbb25b8
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/configure-entries_zh_TW.properties
@@ -0,0 +1,32 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Advanced\ Project\ Options=\u9032\u968e\u5c08\u6848\u9078\u9805
+Use\ custom\ workspace=\u4f7f\u7528\u81ea\u8a02\u5de5\u4f5c\u5340
+Directory=\u76ee\u9304
+Directory\ for\ sub-builds=\u5b50\u5efa\u7f6e\u76ee\u9304
+Display\ Name=\u986f\u793a\u540d\u7a31
+Configuration\ Matrix=\u8a2d\u5b9a\u77e9\u9663
+Add\ axis=\u589e\u52a0\u8ef8\u7dda
+Combination\ Filter=\u7d44\u5408\u7be9\u9078\u689d\u4ef6
+Filter=\u7be9\u9078\u689d\u4ef6
+Execution\ Strategy=\u57f7\u884c\u7b56\u7565
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-childCustomWorkspace.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-childCustomWorkspace.html
new file mode 100644
index 0000000..634d472
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-childCustomWorkspace.html
@@ -0,0 +1,28 @@
+<div>
+ Override the workspace directory assigned to each configuration build.
+
+ <p>
+ By default, Jenkins runs each configuration build in its own unique directory
+ (this happens by appending the name and the value of the axes to the workspace of the overall matrix execution,
+ for example, <tt>/path/to/slaveroot/job/someMatrixJob/axis1/value1/axis2/value2/</tt>). Specifying this value
+ allows you to override this behaviour.
+
+ <p>
+ A common value used here is ".", indicating that all the configuration builds run on the same
+ directory as the overall matrix execution.
+
+ <p>
+ The path specified here can be either absolute or relative. If relative, it is resolved against the workspace
+ of the overall matrix execution. The value can also contains environment variable references. Environment variables
+ include all the axis values, so for example if you specify <tt>$FOO</tt> when you define
+ two axes FOO=[a,b] and BAR=[x,y], then FOO=a,BAR=x and FOO=a,BAR=y will build in somewhere like
+ <tt>/slaveroot/job/someMatrixJob/a/</tt> while FOO=b,BAR=x and FOO=b,BAR=y will build in
+ <tt>/slaveroot/job/someMatrixJob/b/</tt>. In this way, you can be selective about what subset
+ of configuration builds share the same workspace and what doesn't.
+
+ <p>
+ Environment variables include special tokens
+ <tt>${COMBINATION}</tt>, which expands to <tt>axis1/value1/axis2/value2/...</tt>, and
+ <tt>${SHORT_COMBINATION}</tt>, which expands to 8 character string unique to each configuration.
+
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-childCustomWorkspace_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-childCustomWorkspace_zh_TW.html
new file mode 100644
index 0000000..7d946bb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-childCustomWorkspace_zh_TW.html
@@ -0,0 +1,24 @@
+<div>
+ 重新指定每組設定的建置工作區目錄。
+
+ <p>
+ Jenkins 預設會給各種不同設定獨立的目錄 (在矩陣執行時將座標值加到工作區目錄中,例如
+ <tt>/path/to/slaveroot/job/someMatrixJob/axis1/value1/axis2/value2/</tt>)。
+ Specifying this value allows you to override this behaviour.
+
+ <p>
+ 很多人會設定為 ".",讓矩陣裡的每一項設定都在同一個目錄裡建置。
+
+ <p>
+ 可以使用相對路徑或是絕對路徑。相對路徑是由整個矩陣的工作區起算。
+ 環境變數包含所有軸線的值,假設您設定 FOO=[a,b] 跟 BAR=[x,y] 兩個軸,指定 <tt>$FOO</tt> 時,
+ FOO=a,BAR=x 及 FOO=a,BAR=y 會在 <tt>/slaveroot/job/someMatrixJob/a/</tt> 這類的目錄中建置;
+ 而 FOO=b,BAR=x 及 FOO=b,BAR=y 則是在 <tt>/slaveroot/job/someMatrixJob/b/</tt> 建置。
+ 透過這個方式,您可以決定哪些設定要共用工作區,哪些設定又必需獨立開來。
+
+ <p>
+ 還有一些特殊環境變數可用,例如:
+ <tt>${COMBINATION}</tt> 會被展開成 <tt>axis1/value1/axis2/value2/...</tt>,
+ 還有 <tt>${SHORT_COMBINATION}</tt>,會被展開成每組設定都不同的 8 字元字串。
+
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-slaveAffinity.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-slaveAffinity.html
new file mode 100644
index 0000000..a3a2523
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/help-slaveAffinity.html
@@ -0,0 +1,9 @@
+<div>
+ A matrix project needs to first execute what we call the "parent build", which checks out
+ a copy of the source tree and capture its state to ensure all the individual builds will
+ check out the same state.
+
+ <p>
+ If you need to control where this parent build runs, please use this option to specify
+ its label/slave.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index.jelly
new file mode 100644
index 0000000..561fcbe
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index.jelly
@@ -0,0 +1,62 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Erik Ramfelt, Tom Huybrechts
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <l:layout title="${it.name}">
+ <st:include page="sidepanel.jelly" />
+ <l:main-panel>
+ <h1 class="matrix-project-headline page-headline">${%Project} <l:breakable value="${it.displayName}"/></h1>
+ <j:if test="${it.name!=it.displayName}">
+ ${%Project name}: ${it.fullName}
+ </j:if>
+ <t:editableDescription permission="${it.CONFIGURE}"/>
+
+ <st:include page="makeDisabled.jelly" />
+
+ <st:include page="ajaxMatrix.jelly" />
+
+ <p:projectActionFloatingBox/>
+
+ <table style="margin-top: 1em; margin-left:1em;">
+ <j:set var="atr" value="${it.aggregatedTestResultAction}"/>
+ <j:if test="${atr!=null}">
+ <t:summary icon="clipboard.png">
+ <a href="lastCompletedBuild/testReport/" class="model-link inside">${%Latest Test Result}</a>
+ <t:test-result it="${atr}" />
+ </t:summary>
+ </j:if>
+ </table>
+
+ <st:include page="jobpropertysummaries.jelly" />
+
+ <!-- merge fragments from the actions -->
+ <j:forEach var="a" items="${it.allActions}">
+ <st:include page="jobMain.jelly" it="${a}" optional="true" />
+ </j:forEach>
+
+ <p:upstream-downstream />
+ </l:main-panel>
+ </l:layout>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ar.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ar.properties
new file mode 100644
index 0000000..e69ef43
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ar.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Project=\u0627\u0644\u0645\u0634\u0631\u0648\u0639
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_cs.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_cs.properties
new file mode 100644
index 0000000..4573f3b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_cs.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Projekt
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_da.properties
new file mode 100644
index 0000000..9bfa608
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_da.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Projekt
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_de.properties
new file mode 100644
index 0000000..73239c6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_de.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Latest\ Test\ Result=Aktuelle Testergebnisse
+Project=Projekt
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_es.properties
new file mode 100644
index 0000000..4d9b48e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_es.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Proyecto
+Latest\ Test\ Result=Ultimo resultado de pruebas
+Project\ name=Nombre de proyecto
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_fi.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_fi.properties
new file mode 100644
index 0000000..51ce903
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_fi.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Projekti
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_fr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_fr.properties
new file mode 100644
index 0000000..d15386b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_fr.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Latest\ Test\ Result=Derniers r\u00e9sultats de test
+Project=projet
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_he.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_he.properties
new file mode 100644
index 0000000..e8760f2
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_he.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Disable\ Project=\u05D7\u05E1\u05D5\u05DD \u05E4\u05E8\u05D5\u05D9\u05D9\u05E7\u05D8
+Project=\u05E4\u05E8\u05D5\u05D9\u05D9\u05E7\u05D8
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_hu.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_hu.properties
new file mode 100644
index 0000000..80775e5
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_hu.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Latest\ Test\ Result=Legut\u00F3bbi teszteredm\u00E9nyek
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_it.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_it.properties
new file mode 100644
index 0000000..56dfbc4
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_it.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Progetto
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ja.properties
new file mode 100644
index 0000000..abeaad8
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ja.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2012, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman, Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8
+Project\ name=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d
+Latest\ Test\ Result=\u6700\u65b0\u306e\u30c6\u30b9\u30c8\u7d50\u679c
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ko.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ko.properties
new file mode 100644
index 0000000..1bd658b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ko.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Disable\ Project=\uD504\uB85C\uC81D\uD2B8 \uBE44\uD65C\uC131\uD654
+Project=\uD504\uB85C\uC81D\uD2B8
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_nl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_nl.properties
new file mode 100644
index 0000000..df583eb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_nl.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Project
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pl.properties
new file mode 100644
index 0000000..4573f3b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pl.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Projekt
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pt.properties
new file mode 100644
index 0000000..16e2131
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pt.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project\ name=Nome do projeto
+Latest\ Test\ Result=\u00daltimo resultado de teste
+Project=Projeto
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pt_BR.properties
new file mode 100644
index 0000000..6c29f4c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_pt_BR.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva, Fernando Boaglio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Disable\ Project=Desabilitar projeto
+Latest\ Test\ Result=\u00DAltimo resultado do teste
+Project=Projeto
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ro.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ro.properties
new file mode 100644
index 0000000..f6b94da
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ro.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Disable\ Project=Dezactiveaza Proiect
+Project=Proiect
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ru.properties
new file mode 100644
index 0000000..408dd42
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_ru.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=\u041f\u0440\u043e\u0435\u043a\u0442
+Project\ name=\u0418\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_sv_SE.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_sv_SE.properties
new file mode 100644
index 0000000..95a1459
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_sv_SE.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Disable\ Project=Deaktivera projekt
+Project=Projekt
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_tr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_tr.properties
new file mode 100644
index 0000000..a5c9478
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_tr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=Proje
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_uk.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_uk.properties
new file mode 100644
index 0000000..d53fd7d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_uk.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Project=\u041F\u0440\u043E\u0435\u043A\u0442
+Project\ name=\u041D\u0430\u0437\u0432\u0430 \u043F\u0440\u043E\u0435\u043A\u0442\u0443
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_zh_CN.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_zh_CN.properties
new file mode 100644
index 0000000..bf6222e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_zh_CN.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=\u9879\u76ee
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_zh_TW.properties
new file mode 100644
index 0000000..121a222
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/index_zh_TW.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Project=\u5C08\u6848
+Project\ name=\u5c08\u6848\u540d\u7a31
+Disable\ Project=\u505C\u7528\u5C08\u6848
+Latest\ Test\ Result=\u6700\u65b0\u6e2c\u8a66\u7d50\u679c
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail.jelly
new file mode 100644
index 0000000..583f693
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail.jelly
@@ -0,0 +1,28 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<?jelly escape-by-default='true'?>
+<div>
+ ${%body}
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail.properties
new file mode 100644
index 0000000..57b4bab
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\
+ Suitable for projects that need a large number of different configurations, \
+ such as testing on multiple environments, platform-specific builds, etc.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ar.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ar.properties
new file mode 100644
index 0000000..64bed35
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ar.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+body=\u0645\u0646\u0627\u0633\u0628\u0629 \u0644\u0644\u0645\u0634\u0627\u0631\u064A\u0639 \u0627\u0644\u062A\u064A \u062A\u062D\u062A\u0627\u062C \u0643\u0645\u064A\u0629 \u0643\u0628\u064A\u0631\u0629 \u0645\u0646 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0645\u062E\u062A\u0644\u0641\u0629\u060C \u0645\u062B\u0644 \u0627\u062E\u062A\u0628\u0627\u0631 \u0645\u0634\u0631\u0648\u0639 \u0641\u064A \u0639\u062F\u0629 \u0628\u064A\u0626\u0627\u062A\u060C \u0645\u0634\u0627\u0631\u064A\u06 [...]
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_da.properties
new file mode 100644
index 0000000..31cd9aa
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_da.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Velegnet til projekter, der har behov for mange forskellige konfigurationer, s\u00E5som test p\u00E5 flere omgivelser, operativsystemer, platformspecifikke byg, osv.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_de.properties
new file mode 100644
index 0000000..7063a7e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_de.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\
+ Dieses Profil eignet sich sehr gut f�r Projekte mit zahlreichen \
+ Konfigurationen, die etwa in unterschiedlichen Umgebungen getestet oder \
+ plattformspezifisch gebaut werden m�ssen.
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_es.properties
new file mode 100644
index 0000000..9b336d0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_es.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\
+ Adecuado para proyectos que requieran un gran n�mero de configuraciones diferentes, \
+ como testear en multiples entornos, ejecutar sobre plataformas concretas, etc.
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_et.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_et.properties
new file mode 100644
index 0000000..943a5be
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_et.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+body=Sobib projektidele, mis n\u00F5uavad suurt hulka erinevaid konfiguratsioone. N\u00E4iteks paljudes platvormides testimine v\u00F5i platvormide jaoks ehitamine.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_fi.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_fi.properties
new file mode 100644
index 0000000..4074cd6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_fi.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+body=Sopii projekteille, joissa on paljon erilaisia konfiguraatioita, kuten k\u00E4\u00E4nnt\u00E4mist\u00E4 tai testaamista useilla alustoilla.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_fr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_fr.properties
new file mode 100644
index 0000000..f30acb3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_fr.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\
+ Adapt� aux projets qui n�cessitent un grand nombre de configurations diff�rentes, \
+ comme des environnements de test multiples, des binaires sp�cifiques � une plateforme, etc.
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_hi_IN.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_hi_IN.properties
new file mode 100644
index 0000000..a9b8946
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_hi_IN.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+body=\u0905\u0928\u0947\u0915 \u0935\u093F\u092D\u093F\u0928\u094D\u0928 \u0935\u093F\u0928\u094D\u092F\u093E\u0938\u094B\u0902 \u0915\u0940 \u092C\u0921\u093C\u0940 \u092A\u0930\u093F\u092F\u094B\u091C\u0928\u093E\u0913\u0902 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u0941\u0915\u094D\u0924 - \u091C\u0948\u0938\u0947 \u0915\u093F \u090F\u0915\u093E\u0927\u093F\u0915 \u0935\u093E\u0924\u093E\u0935\u0930\u0923 \u092A\u0930 \u092A\u0930\u093F\u0915\u094D\u0937\u0923, \u092E\u0902\ [...]
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_it.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_it.properties
new file mode 100644
index 0000000..d0caf42
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_it.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Adatto a progetto che necessitano di un ampio numero di configurazioni diverse, come test su pi\u00F9 ambienti, build specifiche per piattaforma, ecc.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ja.properties
new file mode 100644
index 0000000..e017c51
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ja.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\
+ \u8907\u6570\u306e\u74b0\u5883\u3067\u306e\u30c6\u30b9\u30c8\u3084\u3001\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3054\u3068\u306e\u30d3\u30eb\u30c9\u306a\u3069\u3068\u3044\u3063\u305f\u3001\u591a\u6570\u306e\u7570\u306a\u308b\u69cb\u6210\u304c\u5fc5\u8981\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ko.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ko.properties
new file mode 100644
index 0000000..95b265c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ko.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\uB2E4\uC591\uD55C \uD658\uACBD\uC5D0\uC11C\uC758 \uD14C\uC2A4\uD2B8, \uD50C\uB798\uD3FC \uD2B9\uC131 \uBE4C\uB4DC, \uAE30\uD0C0 \uB4F1\uB4F1 \uCC98\uB7FC \uB2E4\uC218\uC758 \uC11C\uB85C\uB2E4\uB978 \uD658\uACBD\uC124\uC815\uC774 \uD544\uC694\uD55C \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC801\uD569\uD568.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_nb_NO.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_nb_NO.properties
new file mode 100644
index 0000000..c85c562
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_nb_NO.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Egner seg for prosjekter som trenger et stort antall forskjellige konfigurasjoner, som testing i forskjellige milj\u00F8er, plattformspesifikke bygg osv.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_nl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_nl.properties
new file mode 100644
index 0000000..bf3d392
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_nl.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Geschikt voor projecten die een groot aantal verschillende configuraties nodig hebben,zoals testen op meerdere omgevingen, platformspecifieke bouwpogingen, etc.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pl.properties
new file mode 100644
index 0000000..805f1cc
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pl.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Przeznaczone dla projekt\u00F3w, kt\u00F3re potrzebuj\u0105 du\u017Cej liczby r\u00F3\u017Cnych konfiguracji, np. testuj\u0105cych na wielu \u015Brodowiskach, buduj\u0105cych oprogramowanie dla wybranych platform, itp.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pt.properties
new file mode 100644
index 0000000..554f604
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pt.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# \
+# Suitable for projects that need a large number of different configurations, \
+# such as testing on multiple environments, platform-specific builds, etc.
+body=
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pt_BR.properties
new file mode 100644
index 0000000..cb3bfd5
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_pt_BR.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva, Fernando Boaglio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Apropriado para projetos que necessitam de grande n\u00famero de diferentes configura\u00e7\u00f5es, como teste em m\u00faltiplos ambientes, builds para plataformas espec\u00edficas, etc.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ru.properties
new file mode 100644
index 0000000..79615ea
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_ru.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\u041F\u043E\u0434\u0445\u043E\u0434\u0438\u0442 \u0434\u043B\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0432, \u0442\u0440\u0435\u0431\u0443\u044E\u0449\u0438\u0445 \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0440\u0430\u0437\u043B\u0438\u0447\u043D\u044B\u0445 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u0442\u0430\u043A\u0438\u0445 \u043A\u0430\u043A \u0442\u0435\u0441\u0442\u0438\ [...]
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_sv_SE.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_sv_SE.properties
new file mode 100644
index 0000000..d1b17ee
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_sv_SE.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=L\u00E4mplig f\u00F6r projekt som beh\u00F6ver ett stort antal olika konfigurationer, s\u00E5som testning p\u00E5 flera milj\u00F6er, plattformsneutrala byggen, etc.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_tr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_tr.properties
new file mode 100644
index 0000000..35ff880
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_tr.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=Platforma \u00d6zg\u00fc yap\u0131land\u0131rmalara sahip veya \u00e7e\u015fitli ortamlarda test i\u015flemi yapan projeler gibi \u00e7ok fazla say\u0131da konfig\u00fcrasyona ihtiya\u00e7 duyan projeler i\u00e7in uygundur.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_uk.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_uk.properties
new file mode 100644
index 0000000..e6237b8
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_uk.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+body=\u041F\u0456\u0434\u0445\u043E\u0434\u0438\u0442\u044C \u0434\u043B\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0456\u0432, \u044F\u043A\u0456 \u043F\u043E\u0442\u0440\u0435\u0431\u0443\u044E\u0442\u044C \u0432\u0435\u043B\u0438\u043A\u0443 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0440\u0456\u0437\u043D\u043E\u043C\u0430\u043D\u0456\u0442\u043D\u0438\u0445 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0439, \u0442\u0430\u043A\u0438\u0445 \u044F\ [...]
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_zh_CN.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_zh_CN.properties
new file mode 100644
index 0000000..7540ad5
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_zh_CN.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\u9002\u7528\u4e8e\u591a\u914d\u7f6e\u9879\u76ee,\u4f8b\u5982\u591a\u73af\u5883\u6d4b\u8bd5,\u5e73\u53f0\u6307\u5b9a\u6784\u5efa,\u7b49\u7b49.
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_zh_TW.properties
new file mode 100644
index 0000000..df7bf0e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/MatrixProject/newJobDetail_zh_TW.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2013, Sun Microsystems, Inc., Chunghwa Telecom Co., Ltd.,
+# and Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+body=\u9069\u5408\u9700\u8981\u6709\u5927\u91cf\u4e0d\u540c\u8a2d\u5b9a\u7684\u5c08\u6848\uff0c\u4f8b\u5982\u5728\u5404\u5f0f\u74b0\u5883\u4e0a\u9032\u884c\u6e2c\u8a66\u3001\u5e73\u53f0\u76f8\u4f9d\u7684\u5efa\u7f6e...\u7b49\u4f5c\u696d\u3002
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages.properties
new file mode 100644
index 0000000..325ece3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages.properties
@@ -0,0 +1,41 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixBuild.depends_on_this={0} depends on this.
+MatrixProject.DisplayName=Build multi-configuration project
+MatrixProject.Pronoun=Multi-configuration project
+MatrixProject.DuplicateAxisName=Duplicate axis name
+
+MatrixBuild.Triggering=Triggering {0}
+MatrixBuild.AppearsCancelled={0} appears to be cancelled
+MatrixBuild.Cancelled=Cancelled {0}
+MatrixBuild.Interrupting=Interrupting {0}
+MatrixBuild.Completed={0} completed with result {1}
+
+MatrixConfiguration.Pronoun=Configuration
+
+MatrixRun.KeptBecauseOfParent=Kept because {0} is kept
+
+JDKAxis.DisplayName=JDK
+LabelAxis.DisplayName=Slaves
+LabelExpAxis.DisplayName=Label expression
+TextArea.DisplayName=User-defined Axis
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_da.properties
new file mode 100644
index 0000000..3bda032
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_da.properties
@@ -0,0 +1,33 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixRun.KeptBecauseOfParent=Gemt da {0} er gemt
+TextArea.DisplayName=Brugerdefineret akse
+MatrixProject.DuplicateAxisName=Dupliker akse navn
+MatrixBuild.Triggering=Starter {0}
+LabelAxis.DisplayName=Slaver
+JDKAxis.DisplayName=JDK
+MatrixBuild.AppearsCancelled={0} ser ud til at v\u00e6re aflyst
+MatrixConfiguration.Pronoun=Konfiguration
+MatrixProject.DisplayName=Byg multi-konfigurationsprojekt
+MatrixBuild.Cancelled=Aflyst {0}
+MatrixBuild.Interrupting=Afbryder {0}
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_de.properties
new file mode 100644
index 0000000..d0bc67c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_de.properties
@@ -0,0 +1,40 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=Multikonfigurationsprojekt bauen
+MatrixProject.Pronoun=Multikonfigurationsprojekt
+MatrixProject.DuplicateAxisName=Name der Achse existiert bereits
+
+MatrixBuild.Triggering=L�se {0} aus
+MatrixBuild.AppearsCancelled={0} scheint abgebrochen worden zu sein
+MatrixBuild.Cancelled={0} abgebrochen
+MatrixBuild.Interrupting=Unterbreche {0}
+MatrixBuild.Completed={0} beendet mit Ergebnis {1}
+
+MatrixConfiguration.Pronoun=Einstellungen
+
+MatrixRun.KeptBecauseOfParent=Zur�ckbehalten, weil {0} zur�ckbehalten wurde.
+
+
+
+LabelExpAxis.DisplayName=Labelausdruck
+TextArea.DisplayName=Benutzerdefinierte Achse
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_es.properties
new file mode 100644
index 0000000..b3d3958
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_es.properties
@@ -0,0 +1,39 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=Crear un proyecto multi-configuraci�n
+MatrixProject.DuplicateAxisName=Duplicar el nombre com�n
+
+MatrixBuild.Triggering=Lanzado {0}
+MatrixBuild.AppearsCancelled={0} parece haber sido cancelado
+MatrixBuild.Cancelled=Cancelado {0}
+MatrixBuild.Interrupting=Abortando {0}
+
+MatrixConfiguration.Pronoun=Configuraci�n
+
+MatrixRun.KeptBecauseOfParent=Guardado porque {0} est� guardado
+TextArea.DisplayName=Ejes definidos por el usuario
+LabelAxis.DisplayName=Esclavos
+JDKAxis.DisplayName= Jdk
+# Label expression
+LabelExpAxis.DisplayName=Etiqueta
+MatrixBuild.Completed={0} se ha ejecutado con el resultado {1}
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_fr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_fr.properties
new file mode 100644
index 0000000..73ff67c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_fr.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=Construire un projet multi-configuration
+
+MatrixBuild.Triggering=Lancement de {0}
+MatrixBuild.AppearsCancelled={0} semble annul�
+MatrixBuild.Cancelled={0} a �t� annul�
+MatrixBuild.Interrupting={0} en cours d''interruption
+
+MatrixConfiguration.Pronoun=Configuration
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_ja.properties
new file mode 100644
index 0000000..3dfe39b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_ja.properties
@@ -0,0 +1,40 @@
+# The MIT License
+#
+# Copyright (c) 2004-2013, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixBuild.depends_on_this={0} depends on this.
+MatrixProject.DisplayName=\u30de\u30eb\u30c1\u69cb\u6210\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9
+MatrixProject.Pronoun=\u30de\u30eb\u30c1\u69cb\u6210\u30d7\u30ed\u30b8\u30a7\u30af\u30c8
+MatrixProject.DuplicateAxisName=\u69cb\u6210\u8ef8\u540d\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059
+
+MatrixBuild.Triggering={0}\u306e\u8d77\u52d5
+MatrixBuild.AppearsCancelled={0}\u306f\u4e2d\u6b62\u3055\u308c\u305f\u3088\u3046\u3067\u3059
+MatrixBuild.Cancelled={0}\u306e\u4e2d\u6b62
+MatrixBuild.Interrupting={0}\u3078\u306e\u5272\u308a\u8fbc\u307f
+MatrixBuild.Completed={0} \u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u7d50\u679c: {1}
+
+MatrixConfiguration.Pronoun=\u8a2d\u5b9a
+MatrixRun.KeptBecauseOfParent={0}\u304c\u4fdd\u7559\u4e2d\u306e\u305f\u3081\u4fdd\u7559\u3057\u307e\u3059
+
+JDKAxis.DisplayName=JDK
+LabelAxis.DisplayName=\u30b9\u30ec\u30fc\u30d6
+LabelExpAxis.DisplayName=\u30e9\u30d9\u30eb\u5f0f
+TextArea.DisplayName=\u30e6\u30fc\u30b6\u5b9a\u7fa9
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_nl.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_nl.properties
new file mode 100644
index 0000000..6f2854c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_nl.properties
@@ -0,0 +1,31 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=Bouw een multi-configuratie project
+
+MatrixBuild.Triggering=Starten van {0}
+MatrixBuild.AppearsCancelled={0} blijkt geannuleerd
+MatrixBuild.Cancelled= {0} werd geannuleerd
+MatrixBuild.Interrupting= {0} wordt onderbroken
+
+MatrixConfiguration.Pronoun=Configuratie
+MatrixRun.KeptBecauseOfParent=Bijgehouden omdat {0} werd bijgehouden
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_pt.properties
new file mode 100644
index 0000000..a1b2e13
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_pt.properties
@@ -0,0 +1,40 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+
+MatrixBuild.Completed={0} completado com resultado {1}
+MatrixRun.KeptBecauseOfParent=Mantido porque {0} ser\u00e1 mantido
+TextArea.DisplayName=Eixo definido pelo usu\u00e1rio
+MatrixProject.DuplicateAxisName=Nome do eixo duplicado
+MatrixBuild.Triggering=Disparando {0}
+LabelAxis.DisplayName=Slaves
+JDKAxis.DisplayName=JDK
+MatrixBuild.Interrupting=Interrompendo {0}
+MatrixBuild.depends_on_this={0} depended disso.
+LabelExpAxis.DisplayName=Label
+MatrixBuild.AppearsCancelled= {0} parece estar cancelado
+MatrixConfiguration.Pronoun=Configura\u00e7\u00e3o
+MatrixProject.Pronoun=Projeto com multi-configura\u00e7\u00f5es
+MatrixProject.DisplayName=Construir Build projeto com multi-configura\u00e7\u00f5es
+MatrixBuild.Cancelled={0} cancelado
+
+
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_pt_BR.properties
new file mode 100644
index 0000000..c881f15
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_pt_BR.properties
@@ -0,0 +1,42 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva,
+# Bruno Meneguello
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixBuild.depends_on_this={0} depende deste.
+MatrixProject.DisplayName=Construir projeto de m\u00faltiplas configura\u00e7\u00f5es
+MatrixProject.Pronoun=Projeto de M\u00faltiplas Configura\u00e7\u00f5es
+
+MatrixBuild.Triggering=Disparando {0}
+MatrixBuild.AppearsCancelled={0} parece estar cancelado
+MatrixBuild.Cancelled=Cancelado {0}
+MatrixBuild.Interrupting=Interrompendo {0}
+MatrixBuild.Completed={0} completado com o resultado {1}
+
+MatrixConfiguration.Pronoun=Configura\u00e7\u00e3o
+MatrixRun.KeptBecauseOfParent=Mantido porque {0} est\u00e1 mantido
+
+MatrixProject.DuplicateAxisName=Duplicar nome do eixo
+
+JDKAxis.DisplayName=JDK
+LabelAxis.DisplayName=Slaves
+LabelExpAxis.DisplayName=Express\u00e3o de R\u00f3tulo
+TextArea.DisplayName=Eixo Definido pelo Usu\u00e1rio
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_ru.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_ru.properties
new file mode 100644
index 0000000..54753e1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_ru.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=\u041c\u0443\u043b\u044c\u0442\u0438\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442
+
+MatrixBuild.Triggering=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e {0}
+MatrixBuild.AppearsCancelled={0} \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u0430
+MatrixBuild.Cancelled=\u041f\u0440\u0435\u0440\u0432\u0430\u043d\u0430 {0}
+MatrixBuild.Interrupting=\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u044e {0}
+
+MatrixConfiguration.Pronoun=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_tr.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_tr.properties
new file mode 100644
index 0000000..a63c955
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_tr.properties
@@ -0,0 +1,31 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=\u00c7oklu-konfig\u00fcrasyona sahip proje yap\u0131land\u0131r
+
+MatrixBuild.Triggering={0} tetikleniyor
+MatrixBuild.AppearsCancelled={0} iptal edilmi\u015f g�r\u00fcn\u00fcyor
+MatrixBuild.Cancelled={0} iptal edildi
+MatrixBuild.Interrupting={0} i\u015flemi kesiliyor
+
+MatrixConfiguration.Pronoun=Konfig\u00fcrasyon
+MatrixRun.KeptBecauseOfParent={0} tutuldu\u011fu i\u00e7in tutulmu\u015ftur
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_zh_CN.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_zh_CN.properties
new file mode 100644
index 0000000..5af13aa
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_zh_CN.properties
@@ -0,0 +1,37 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:cactusman
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=\u6784\u5efa\u4e00\u4e2a\u591a\u914d\u7f6e\u9879\u76ee
+MatrixProject.DuplicateAxisName=Duplicate axis name
+
+MatrixBuild.Triggering=Triggering {0}
+MatrixBuild.AppearsCancelled={0} appears to be cancelled
+MatrixBuild.Cancelled=Cancelled {0}
+MatrixBuild.Interrupting=Interrupting {0}
+
+MatrixConfiguration.Pronoun=Configuration
+
+MatrixRun.KeptBecauseOfParent=Kept because {0} is kept
+
+JDKAxis.DisplayName=JDK
+LabelAxis.DisplayName=Slaves
+TextArea.DisplayName=User-defined Axis
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_zh_TW.properties
new file mode 100644
index 0000000..6e20bba
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/Messages_zh_TW.properties
@@ -0,0 +1,39 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MatrixProject.DisplayName=\u5efa\u7acb\u591a\u91cd\u8a2d\u5b9a\u5c08\u6848
+MatrixProject.DuplicateAxisName=\u8ef8\u7dda\u540d\u7a31\u91cd\u8907
+
+MatrixBuild.Triggering=\u89f8\u767c {0} \u4e2d
+MatrixBuild.AppearsCancelled={0} \u6b63\u88ab\u53d6\u6d88
+MatrixBuild.Cancelled={0} \u5df2\u53d6\u6d88
+MatrixBuild.Interrupting=\u4e2d\u65b7 {0} \u4e2d
+MatrixBuild.Completed={0} \u5df2\u5b8c\u6210\uff0c\u7d50\u679c\u70ba {1}
+
+MatrixConfiguration.Pronoun=\u8a2d\u5b9a
+
+MatrixRun.KeptBecauseOfParent=\u70ba\u4e86 {0} \u800c\u4fdd\u7559
+
+JDKAxis.DisplayName=JDK
+LabelAxis.DisplayName=Slave
+LabelExpAxis.DisplayName=\u6a19\u7c64\u8868\u793a\u5f0f
+TextArea.DisplayName=\u4f7f\u7528\u8005\u81ea\u8a02\u8ef8
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config.jelly
new file mode 100644
index 0000000..14128b8
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config.jelly
@@ -0,0 +1,32 @@
+<!--
+The MIT License
+
+Copyright (c) 2010, InfraDNA, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <f:entry title="${%Name}" field="name">
+ <f:textbox />
+ </f:entry>
+ <f:entry title="${%Values}" field="valueString">
+ <f:expandableTextbox />
+ </f:entry>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_da.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_da.properties
new file mode 100644
index 0000000..402f2e9
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_da.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Values=V\u00e6rdier
+Name=Navn
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_de.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_de.properties
new file mode 100644
index 0000000..52b1fb3
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_de.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Values=Werte
+Name=Name
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_es.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_es.properties
new file mode 100644
index 0000000..5bcf3f4
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_es.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Values=Valores
+Name=Nombre
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_ja.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_ja.properties
new file mode 100644
index 0000000..27fe8f6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_ja.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc., Seiji Sogabe
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Name=\u540d\u524d
+Values=\u5024
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_pt.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_pt.properties
new file mode 100644
index 0000000..5c750de
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_pt.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributers
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Values=Valores
+Name=Nome
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_zh_TW.properties
new file mode 100644
index 0000000..38266d9
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/config_zh_TW.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Name=\u540d\u7a31
+Values=\u503c
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString.html
new file mode 100644
index 0000000..ab60f50
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString.html
@@ -0,0 +1,4 @@
+<div>
+ Values assigned to variables. Multiple values are separated by whitespace or newlines.
+ Use shell quoting syntax for a value that contains whitespace.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_de.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_de.html
new file mode 100644
index 0000000..b874856
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_de.html
@@ -0,0 +1,5 @@
+<div>
+ Geben Sie hier die Werte an, welche die Variable annehmen kann.
+ Mehrere Werte werden durch Leerraum oder Zeilenumbrüche getrennt.
+ Verwenden Sie die Shell-Notation, um Werte mit Leerräumen anzugeben.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_fr.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_fr.html
new file mode 100644
index 0000000..3bf5521
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_fr.html
@@ -0,0 +1,4 @@
+<div>
+ Valeurs à assigner aux variables. Les valeurs multiples sont
+ séparées par des espaces ou des retours à la ligne.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_ja.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_ja.html
new file mode 100644
index 0000000..e399128
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_ja.html
@@ -0,0 +1,4 @@
+<div>
+ 変数に割り当てる値です。複数の値を設定する場合は、スペースか改行で区切ります。
+ 値がスペースを含む場合は、Shellと同様に引用符を使用してください。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_nl.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_nl.html
new file mode 100644
index 0000000..f3447bd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_nl.html
@@ -0,0 +1,3 @@
+<div>
+ Waardenreeks voor uw dimensie. Waarden dienen gescheiden te worden door spaties of een nieuwe lijn character.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_pt_BR.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_pt_BR.html
new file mode 100644
index 0000000..40cdeeb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_pt_BR.html
@@ -0,0 +1,3 @@
+<div>
+ Valores associados a variáveis. Valores múltiplos estão separados por espaço em branco ou nova linha.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_ru.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_ru.html
new file mode 100644
index 0000000..43fae70
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_ru.html
@@ -0,0 +1,3 @@
+<div>
+ Значения присваиваются переменным. Множественные значения разделяются пробелами или переводами строк.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_tr.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_tr.html
new file mode 100644
index 0000000..480593f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_tr.html
@@ -0,0 +1,3 @@
+<div>
+ Değerler, değişkenlere atanır. Birden fazla değer boşluk karakteri veya yeni satır seçeneği ile ayrılmalıdır.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_zh_TW.html b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_zh_TW.html
new file mode 100644
index 0000000..c2c3606
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/matrix/TextAxis/help-valueString_zh_TW.html
@@ -0,0 +1,4 @@
+<div>
+ 指定給變數的值。不同值之間請用空白或是換行來隔開。
+ 如果值當中有空白字元,請使用 Shell 的引號語法來處理。
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/resources/hudson/tasks/test/MatrixTestResult/index.jelly b/plugins/matrix-project-plugin/src/main/resources/hudson/tasks/test/MatrixTestResult/index.jelly
new file mode 100644
index 0000000..dcc8d0e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/hudson/tasks/test/MatrixTestResult/index.jelly
@@ -0,0 +1,72 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Red Hat, Inc., Tom Huybrechts
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:local="local" xmlns:test="/lib/test">
+ <l:layout title="Test">
+ <st:include page="sidepanel.jelly" it="${it.owner}"/>
+ <l:main-panel>
+ <h1 class="matrix-test-result-headline page-headline">Test Result</h1>
+ <test:bar/>
+
+ <table class="pane sortable bigtable">
+ <tr>
+ <td class="pane-header">Configuration Name</td>
+ <td class="pane-header" style="width:4em">Duration</td>
+ <td class="pane-header" style="width:4em">All</td>
+ <td class="pane-header" style="width:4em">Failed</td>
+ <td class="pane-header" style="width:4em">Skipped</td>
+ </tr>
+
+ <j:forEach var="report" items="${it.childReports}">
+ <tr>
+ <td class="pane">
+ <a href="../${report.child.project.shortUrl}testReport" class="model-link inside">${report.child.project.name}</a>
+ </td>
+ <td data="${report.result.duration}" class="pane" style="text-align:right">
+ ${report.result.durationString}
+ </td>
+ <td class="pane" style="text-align:right;">
+ ${report.result.totalCount}
+ </td>
+ <td class="pane" style="text-align:right;">
+ <!-- if only we have if..then..else in Jelly -->
+ <j:if test="${report.result.failCount!=0}">
+ <a href="#${report.child.project.name}">${report.result.failCount}</a>
+ </j:if>
+ <j:if test="${report.result.failCount==0}">0</j:if>
+
+
+ </td>
+ <td class="pane" style="text-align:right;">
+ ${report.result.skipCount}
+ </td>
+ </tr>
+ </j:forEach>
+ </table>
+
+ <t:aggregated-failed-tests/>
+ </l:main-panel>
+ </l:layout>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/index.jelly b/plugins/matrix-project-plugin/src/main/resources/index.jelly
new file mode 100644
index 0000000..f99f7fd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/index.jelly
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+The MIT License
+
+Copyright 2014 Jesse Glick.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core">
+ Multi-configuration (matrix) project type.
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix.jelly b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix.jelly
new file mode 100644
index 0000000..720e6fa
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix.jelly
@@ -0,0 +1,103 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!--
+ Generate configuration matrix and invoke body with 'p' as the instance of T
+ (of Layouter<T>)
+
+ Used by Matrix* classes
+-->
+<?jelly escape-by-default='true'?>
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
+ <st:documentation>
+ Generate configuration matrix and invoke body with 'p' as the instance of T
+ (of Layouter<T>)
+
+ <st:attribute name="autoRefresh">
+ If specified, the content of the matrix will be automatically updated via AJAX.
+ (This happens by requesting URL "./ajaxMatrix", so the caller needs "ajaxMatrix.jelly"
+ to serve this request.)
+ </st:attribute>
+ </st:documentation>
+
+ <j:set var="o" value="${it.layouter}"/>
+ <div id='matrix'>
+ <j:choose>
+ <!-- Optimized case when there's only one dimension to the axis (or zero dimension) -->
+ <j:when test="${empty(o.x) and empty(o.y)}">
+ <h2>${%Configurations}</h2>
+ <j:forEach var="p" items="${o.rows[0][0]}">
+ <d:invokeBody />
+ <st:nbsp />
+ </j:forEach>
+ </j:when>
+ <j:otherwise>
+ <table id="configuration-matrix">
+ <!-- X-axis -->
+ <j:forEach var="x" items="${o.x}" varStatus="loop">
+ <tr class="matrix-row">
+ <!-- space for Y-axis -->
+ <j:if test="${!empty(o.y)}">
+ <td id="matrix-title" colspan="${size(o.y)}">${%Configuration Matrix}</td>
+ </j:if>
+ <j:forEach begin="1" end="${o.repeatX(loop.index)}">
+ <j:forEach var="v" items="${x.values}">
+ <td class="matrix-header" colspan="${o.width(loop.index)}">${v}</td>
+ </j:forEach>
+ </j:forEach>
+ </tr>
+ </j:forEach>
+
+ <!-- Y-axis -->
+ <j:forEach var="r" items="${o.rows}">
+ <tr>
+ <j:forEach var="y" items="${o.y}" varStatus="loop">
+ <j:if test="${r.drawYHeader(loop.index)!=null}">
+ <td class="matrix-leftcolumn" rowspan="${o.height(loop.index)}">${r.drawYHeader(loop.index)}</td>
+ </j:if>
+ </j:forEach>
+
+ <j:forEach var="c" items="${r}">
+ <td class="matrix-cell">
+ <j:choose>
+ <j:forEach var="p" items="${c}">
+ <div>
+ <d:invokeBody />
+ </div>
+ </j:forEach>
+ </j:choose>
+ </td>
+ </j:forEach>
+ </tr>
+ </j:forEach>
+ </table>
+ </j:otherwise>
+ </j:choose>
+ <j:if test="${ajax==null and attrs.autoRefresh and !h.isAutoRefresh(request)}">
+ <script defer="defer">
+ refreshPart('matrix',"./ajaxMatrix");
+ </script>
+ </j:if>
+ </div>
+</j:jelly>
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ar.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ar.properties
new file mode 100644
index 0000000..196c18b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ar.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Configurations=\u0627\u0639\u062F\u0627\u062F\u0627\u062A
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_cs.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_cs.properties
new file mode 100644
index 0000000..04ad3a2
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_cs.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Konfigurace
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_da.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_da.properties
new file mode 100644
index 0000000..4309fde
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_da.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Konfigurationer
+Configuration\ Matrix=Konfigurationsmatrice
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_de.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_de.properties
new file mode 100644
index 0000000..e3aa83e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_de.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Konfigurationen
+Configuration\ Matrix=Konfigurationsmatrix
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_es.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_es.properties
new file mode 100644
index 0000000..e532e72
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_es.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Configuraciones
+Configuration\ Matrix=Matriz de configuraci�n
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_fi.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_fi.properties
new file mode 100644
index 0000000..42c66e4
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_fi.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Konfiguraatiot
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_fr.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_fr.properties
new file mode 100644
index 0000000..953560a
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_fr.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Configurations
+Configuration\ Matrix=Matrice de Configuration
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_he.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_he.properties
new file mode 100644
index 0000000..6bbb569
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_he.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Configuration\ Matrix=\u05DE\u05D8\u05E8\u05D9\u05E6\u05EA \u05D4\u05D2\u05D3\u05E8\u05D5\u05EA
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_it.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_it.properties
new file mode 100644
index 0000000..94f696c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_it.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Configurazioni
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ja.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ja.properties
new file mode 100644
index 0000000..a136724
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ja.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=\u69cb\u6210
+Configuration\ Matrix=\u69cb\u6210\u30de\u30c8\u30ea\u30c3\u30af\u30b9
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ko.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ko.properties
new file mode 100644
index 0000000..5c19c1c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ko.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Configurations=\uC124\uC815
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_nl.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_nl.properties
new file mode 100644
index 0000000..a1fea7e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_nl.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Configuraties
+Configuration\ Matrix=Configuratiematix
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pl.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pl.properties
new file mode 100644
index 0000000..5290fbd
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pl.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configuration\ Matrix=Macierz konfiguracji
+Configurations=Konfiguracje
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pt_BR.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pt_BR.properties
new file mode 100644
index 0000000..30bce8c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pt_BR.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva, Fernando Boaglio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Configura\u00e7\u00f5es
+Configuration\ Matrix=Matriz de configura\u00e7\u00e3o
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pt_PT.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pt_PT.properties
new file mode 100644
index 0000000..47da6b2
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_pt_PT.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configuration\ Matrix=Matrix de Configura\u00E7\u00F5es
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ro.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ro.properties
new file mode 100644
index 0000000..ca9f67d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ro.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Configuration\ Matrix=Matricea de configurare
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ru.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ru.properties
new file mode 100644
index 0000000..5491cf1
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_ru.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
+Configuration\ Matrix=\u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_sv_SE.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_sv_SE.properties
new file mode 100644
index 0000000..55f4c32
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_sv_SE.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Configuration\ Matrix=Konfigurationsmatris
+Configurations=Inst\u00E4llningar
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_tr.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_tr.properties
new file mode 100644
index 0000000..93237e6
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_tr.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=Konfig\u00fcrasyonlar
+Configuration\ Matrix=Konfig\u00fcrasyon Matrisi
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_uk.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_uk.properties
new file mode 100644
index 0000000..0367c63
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_uk.properties
@@ -0,0 +1,3 @@
+# This file is under the MIT License by authors
+
+Configurations=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_zh_CN.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_zh_CN.properties
new file mode 100644
index 0000000..000c9a4
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_zh_CN.properties
@@ -0,0 +1,23 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=\u914D\u7F6E
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_zh_TW.properties b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_zh_TW.properties
new file mode 100644
index 0000000..ffeb753
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/matrix_zh_TW.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Configurations=\u914D\u7F6E
+Configuration\ Matrix=\u8a2d\u5b9a\u77e9\u9663
diff --git a/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/taglib b/plugins/matrix-project-plugin/src/main/resources/lib/hudson/matrix-project/taglib
new file mode 100644
index 0000000..e69de29
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes.html
new file mode 100644
index 0000000..1cab051
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes.html
@@ -0,0 +1,22 @@
+<div>
+ If your configuration matrix needs additional axes, you can specify them here.
+ <p>
+ For example, let's say you are trying to run a test for your database application,
+ and you need to test it with three databases: MySQL, PostgreSQL, and Oracle. Your
+ build script is designed so that you can test with a particular database by doing
+ <tt>ant -Ddatabase=mysql</tt>.
+ <p>
+ This is the concept of an axis. You can have a variable called "database",
+ which takes three values. When you configure it, Jenkins will run 3 builds, each with
+ different values assigned to the "database" variable to exhaustively cover
+ the configuration matrix.
+ <p>
+ Variables specified here are made available to the build as environment variables.
+ In addition, for Ant and Maven, variables are also exposed as properties, as if
+ <tt>-D<i>variableName</i>=<i>value</i></tt> are specified on the command line.
+ <p>
+ When multiple axes are specified, all of the possible combinations of axes are built
+ exhaustively. Multiple values in labels and JDKs are treated in the same way. So
+ if you specify jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle], container=[jetty,tomcat],
+ then each build will consists of 2x3x2=12 different sub-builds.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_de.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_de.html
new file mode 100644
index 0000000..e2fb644
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_de.html
@@ -0,0 +1,24 @@
+<div>
+ Hier können Sie die Achsen Ihrer Konfigurationsmatrix angeben.
+ <p>
+ Beispiel: Sie haben eine Datenbankanwendung geschrieben und möchten diese mit
+ den drei Datenbanksystemen MySQL, PostgreSQL und Oracle testen. Ihr Build-Skript
+ ist so gestaltet, dass Sie ein bestimmtes Datenbanksystem testen können, indem
+ Sie Ant etwa folgendermaßen aufrufen: <tt>ant -Ddatabase=mysql</tt>.
+ <p>
+ Dies ist das Konzept einer "Achse". Sie definieren dazu eine Variable namens "database",
+ welche unterschiedliche Werte annehmen kann. Wenn Sie für diese Variable 3 Werte
+ konfigurieren, wird Jenkins 3 Unter-Builds ausführen - jeder mit einem anderen Wert
+ für die Variable "database", um die Konfigurationsmatrix erschöpfend abzudecken.
+ <p>
+ Variablen, die hier als Achse spezifiziert werden, stehen dem Build als Umgebungsvariablen
+ zur Verfügung. Für Ant und Maven sind die Variablen zusätzlich auch als Eigenschaften
+ (properties) sichtbar - genau so, als ob <tt>-D<i>variableName</i>=<i>value</i></tt>
+ in der Kommandozeile angegeben worden wäre.
+ <p>
+ Sind mehrere Achsen eingerichtet, so werden alle möglichen Kombinationen
+ erschöpfend in Unter-Builds ausgeführt. Mehrfache Auswahlen in Labels und JDKs
+ werden auf dieselbe Weise behandelt. Geben Sie beispielsweise
+ <tt>jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle], container=[jetty,tomcat]</tt>
+ an, so besteht ein Build aus 2x3x2=12 unterschiedlichen Unter-Builds.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_fr.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_fr.html
new file mode 100644
index 0000000..f371aed
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_fr.html
@@ -0,0 +1,30 @@
+<div>
+ Si votre matrice de configuration a besoin d'axes supplémentaires,
+ vous pouvez les spécifiez ici.
+ <p>
+ Par exemple, supposons que vous voulez lancer un test pour une
+ application de base de données et que vous devez la tester avec trois
+ bases : MySQL, PostgreSQL et Oracle.
+ Votre script de build est conçu de façon à spécifier la base à tester
+ ainsi :
+ <tt>ant -Ddatabase=mysql</tt>.
+ <p>
+ Un axe, c'est ça. Vous pouvez avoir une variable "database",
+ qui prend trois valeurs possibles. Quand vous configurez l'axe, Jenkins
+ lancera 3 builds, avec les 3 valeurs possibles assignées à la variable
+ "database" afin de couvrir toutes combinaisons de configurations
+ possibles (la matrice des configurations).
+ <p>
+ Les variables spécifiées ici sont disponibles pour le build comme
+ variables d'environnement.
+ De plus, pour Ant et Maven, les variables sont également exposées en
+ tant que propriétés, comme si elles étaient passées avec
+ <tt>-D<i>nomVariable</i>=<i>valeur</i></tt> en ligne de commande.
+ <p>
+ Quand plusieurs axes sont spécifiés, toutes les combinaisons d'axe
+ possibles sont construites de façon exhaustive. Les valeurs multiples
+ pour les labels et les JDKs sont traitées de la même façon. Par exemple,
+ si vous spécifiez jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle],
+ container=[jetty,tomcat], alors chaque build exhaustif consistera en
+ 2x3x2=12 sous-builds différents.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_ja.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_ja.html
new file mode 100644
index 0000000..99f2630
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_ja.html
@@ -0,0 +1,21 @@
+<div>
+ 構成軸を追加する必要があれば、ここで指定します。
+ <p>
+ 例えば、データベースアプリケーションのテストを実行し、
+ MySQL、PostgreSQLおよびOracleの3つのデータベースでテストする必要があるとしましょう。
+ <tt>ant -Ddatabase=mysql</tt>を実行して特定のデータベースでテストできるように、
+ ビルドスクリプトがデザインされています。
+ <p>
+ これが、構成軸のコンセプトです。"database"という変数を使用し、その変数は3つの値をとります。
+ 構成軸を設定すると、Jenkinsは3つのビルドを起動します。それぞれのビルドは、構成マトリックスを全てカバーするように、
+ "database"変数に異なる値が割り当てられます。
+ <p>
+ ここで指定した変数は、環境変数としてビルドで利用できます。さらに、
+ コマンドラインで<tt>-D<i>variableName</i>=<i>value</i></tt>と指定したのと同様に、
+ AntやMavenでプロパティでも利用できます。
+ <p>
+ 複数の軸が指定されている場合、軸の取り得る全ての組み合わせが組み立てられます。
+ ラベルやJDKに複数の値を設定した場合も同様に扱われます。つまり、jdk=[JDK5,JDK6]、
+ database=[mysql,postgresql,oracle]およびcontainer=[jetty,tomcat]と指定した場合、
+ 各ビルドは、2x3x2=12個の異なるサブビルドで構成されます。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_nl.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_nl.html
new file mode 100644
index 0000000..fa3ad85
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_nl.html
@@ -0,0 +1,15 @@
+<div>
+ Indien uw configuratiematrix extra dimensies benodigd, kunt U die hier opgeven.
+ <p>
+ Stel dat U uw databankapplicatie wenst te testen t.o.v. 3 databanken : MySQL, PostgreSQL, en Oracle.
+ U hebt uw bouwspecifcatie zo ontworpen dat U, door het opgeven van een optie, kunt kiezen t.o.v. welk systeem U wenst te testen, bvb.
+ <tt>ant -Ddatabank=mysql</tt>.
+ <p>
+ Dit is het concept van een matrixdimensie. U kunt een variabele "databank" hebben, met drie waarden. Zo geconfigureerd, zal Jenkins 3 bouwpogingen lanceren, elk met een andere waarde voor die parameter. Op die manier worden alle mogelijkheden in de matrix afgetoetst.
+ <p>
+De hier gedefinieerde variabelen worden als omgevingsparameters beschikbaar gesteld aan uw bouwpogingen.
+ Meer nog, in het geval U Ant of Maven gebruikt, zullen de variabelen ook als parameters beschikbaar gesteld worden, alsof
+ <tt>-D<i>parameterNaam</i>=<i>waarde</i></tt> op de commandolijn meegegeven werd.
+ <p>
+ Indien U meerdere dimensies opgeeft, zullen alle mogelijke combinaties afgetoetst worden. Meerdere waarden in labels en JDKs worden op dezelfde manier behandeld. Indien U dus jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle], container=[jetty,tomcat] opgeeft, zal een bouwpoging feitelijk 2x3x2=12 verschillende bouwpogingen omvatten.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_pt_BR.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_pt_BR.html
new file mode 100644
index 0000000..8a8e337
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_pt_BR.html
@@ -0,0 +1,22 @@
+<div>
+ Se sua matriz de configuração precisa de eixos adicionais, você pode especificá-los aqui.
+ <p>
+ Por exemplo, vamos dizer que você está tentando executar um teste para sua aplicação de banco de dados,
+ e você precisa testá-la com três bancos de dados: MySQL, PostgreSQL, e Oracle. Seu
+ script de construção está projetado tal que você possa testar com um banco de dados particular usando
+ <tt>ant -Ddatabase=mysql</tt>.
+ <p>
+ Este é o conceito de um eixo. Você pode ter uma variável chamada "database",
+ que recebe três valores. Quando você configurá-la, Jenkins executará 3 construções, cada uma com
+ valores diferentes para a variável "database" para exaustivamente cobrir
+ a matriz de configuração.
+ <p>
+ Variáveis especificadas aqui se tornam disponíveis para a construção como variáveis de ambiente.
+ Em adição, para Ant e Maven, as variáveis também são expostas como propriedades, como se
+ <tt>-D<i>nomeDaVariavel</i>=<i>valor</i></tt> fossem especificadas na linha de comando.
+ <p>
+ Quando múltiplos eixos são especificados, todas as possíveis combinações dos eixos são construídas
+ exaustivamente. Valores múltiplos em labels e JDKs são tratados da mesma maneira. Assim
+ se você especificar jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle], container=[jetty,tomcat],
+ então cada construção consistirá de 2x3x2=12 diferentes sub-construções.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_ru.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_ru.html
new file mode 100644
index 0000000..a2eee1a
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_ru.html
@@ -0,0 +1,24 @@
+<div>
+ Если ваша конфигурационная матрица нуждается в дополнительных осях (размерностях, степенях свободы),
+ вы можете настроить их здесь.
+ <p>
+ Например, скажем вы собираетесь запускать тесты для вашего приложения использующего СУБД
+ и вам необходимо проверить его с тремя СУБД: MySQL, PostgreSQL и Oracle. Ваш сборочный
+ скрипт разработан таким образом, что вы можете протестировать работу приложения с конкретной
+ СУБД с помощью команды <tt>ant -Ddatabase=mysql</tt>.
+ <p>
+ Это и есть концепция осей. Вы можете создать переменную с именем "database", которая
+ может принимать 3 значения. Когда вы её настроите, Jenkins будет запускать 3 сборки, каждую с
+ одним элементом из области значений переменной "database", чтобы полностью покрыть
+ конфигурационную матрицу.
+ <p>
+ Переменные, описанные здесь, доступны сборке как переменные окружения. Вдобавок,
+ для Ant и Maven, переменные также предоставляются как свойства, как будто
+ в командной строке было указано <tt>-D<i>ИмяПеременной</i>=<i>Значение</i></tt>.
+ <p>
+ В случае, когда определено несколько осей, все возможные комбинации будут использованы
+ при сборке. Множественные значения в метках и JDK интерпретируются таким же образом.
+ Так что если вы укажете jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle],
+ container=[jetty,tomcat], тогда каждая сборка будет содержать 2x3x2=12 различных
+ подсборок.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_tr.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_tr.html
new file mode 100644
index 0000000..0094c8a
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_tr.html
@@ -0,0 +1,20 @@
+<div>
+ Konfigürasyon matrisinizin daha fazla eksene ihtiyacı varsa, burada belirleyebilirsiniz.
+ <p>
+ Diyelim ki veritabanı uygulamanız ile ilgili bir test çalıştırmanız gerekiyor ve
+ bunu da üç ayrı veritabanı ile yapmak istiyorsunuz: MySQL, PostgreSQL, ve Oracle.
+ Yapılandırma dosyalarınızı, <tt>ant -Ddatabase=mysql</tt> şeklinde çalışabilecek bir biçimde tasarlayabilirsiniz.
+ <p>
+ Eksenin devreye girdiği kısım burasıdır. "database" isimli bir değişkeniniz vardır ve üç değer alır.
+ Konfigürasyonu yaptığınızda, Jenkins konfigürasyon matrisini tamamlamak adına "database"
+ değişkenine atanan üç ayrı değişkenle yapılandırmayı 3 kere çalıştıracaktır.
+ <p>
+ Burada belirlenen değişkenler, yapılandırmaya ortam değişkeni olarak aktarılabilirler.
+ Ant ve Maven için buna ek olarak, değişkenler, komut satırında <tt>-D<i>variableName</i>=<i>value</i></tt>
+ şeklindeki gibi özellik olarak bulunabilirler.
+ <p>
+ Birden fazla eksen tanımı yapıldığında, eksenlerin mümkün tüm kombinasyonları ayrıntılı bir şekilde
+ yapılandırılır. Etiketlerde veya JDK'larda tanımlanan çoklu-değerler de aynı şekilde işlenir.
+ Yani, eğer jdk=[JDK5,JDK6],database=[mysql,postgresql,oracle] ve container=[jetty,tomcat] şeklinde
+ bir tanım yaparsanız, her yapılandırma için 2x3x2=12 adet alt-yapılandırma çalıştırılacaktır.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_zh_TW.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_zh_TW.html
new file mode 100644
index 0000000..e85e23f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/axes_zh_TW.html
@@ -0,0 +1,21 @@
+<div>
+ 您可以在這裡新增設定矩陣的軸線。
+
+ <p>
+ 假如想要在 MySQL, PostgreSQL 及 Oracle 上測試開發的資料庫應用程式,
+ 您的建置 Script 應該就要能指定要測試的資料庫,例如 <code>ant -Ddatabase=mysql</code>。
+
+ <p>
+ 這就是軸線的概念,您可以設計出帶三種值的 "database" 變數。
+ 設定好後,Jenkins 會執行三次建置,每一次都套不同的 "database" 變數值,完整涵蓋整個設定矩陣。
+
+ <p>
+ 這裡定義的變數會變成建置過程中可以看到的環境變數。
+ 對 Ant 及 Maven 而言,變數同時會以屬性方式帶入,就等同在命令列加上
+ <code>-D<i>variableName</i>=<i>value</i></code>。
+
+ <p>
+ 如果設定多個軸線,軸線所有的排列組合都會被建置一次,標籤及 JDK 軸也一樣。
+ 所以如果您設定 jdk=[JDK5,JDK6], database=[mysql,postgresql,oracle], container=[jetty,tomcat],
+ 那麼每次建置都會有 2 × 3 × 2 = 12 種不同的子建置。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter.html
new file mode 100644
index 0000000..4449b39
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter.html
@@ -0,0 +1,54 @@
+<div>
+ By default, Jenkins builds all the possible combinations of axes exhaustively. But sometimes this is too many,
+ or may contain combinations that don't make sense.
+ In such a situation, you can make the matrix sparse by filtering out combinations that you don't want through
+ a Groovy expression that returns true or false.
+
+ <p>
+ When you specify a Groovy expression here, only the combinations that result in <b>true</b>
+ will be built. In evaluating the expression, axes are exposed as variables (with their values set
+ to the current combination evaluated).
+
+ <h4>Filtering based on values</h4>
+ <p>
+ For example, let's say you are building on different operating systems for
+ different compilers. Assume that your slave labels are <b>label=[linux,solaris]</b> and you have
+ created an axis as <b>compiler=[gcc,cc].</b>
+
+ Any of the following expressions will filter out <b>cc</b> builds on <b>linux</b>. Depending on
+ how you think about this constraint, you'll probably find some more intuitive than others.
+
+ <center>
+ <table>
+ <tr>
+ <td>Read "if both linux and cc, it's invalid"</td>
+ <td>
+ <pre>!(label=="linux" && compiler=="cc")</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>Read "for a combination to be valid, it has to be either on solaris or on gcc."</td>
+ <td>
+ <pre>label=="solaris" || compiler=="gcc"</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>Read "if on Solaris, just do cc"</td>
+ <td>
+ <pre>(label=="solaris").implies(compiler=="cc")</pre>
+ </td>
+ </tr>
+ </table>
+ </center>
+
+ <h4>Sparsening of the matrix</h4>
+ <p>
+ In addition to the specific filtering rules based on values, one can also use a special
+ variable "<tt>index</tt>", which can be used to sparsen the matrix.
+
+ <p>
+ For example, <tt>index%2==0</tt> would cut the matrix size in half by removing one
+ combination per every 2 combinations, in such a way that the coverage is still reasonable.
+ Similarly, <tt>index%3!=0</tt> would cut the matrix size into 66% by throwing
+ away every 1 out of 3 combinations.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_de.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_de.html
new file mode 100644
index 0000000..93bc8f0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_de.html
@@ -0,0 +1,55 @@
+<div>
+ Jenkins baut standardmäßig alle möglichen Kombinationen aller Achsen auf erschöpfende Weise.
+ Manchmal sind dies jedoch einfach zu viele Kombinationen oder es gibt Kombinationen, die
+ aus fachlicher Sicht nicht erwünscht sind.
+
+ In diesen Situationen können Sie die Matrix ausdünnen, indem Sie über einen Groovy-Ausdruck
+ unerwünschte Kombinationen herausfiltern.
+
+ <p>
+ Geben Sie hier einen Groovy-Ausdruck an, so werden nur diejenigen Kombinationen gebaut, für
+ die der Ausdruck <b>true</b> ergibt. Die momentanen Werte der Achsen stehen dem Ausdruck
+ dabei als initialisierte Variablen zur Verfügung.
+
+ <h4>Werte-basiertes Filtern</h4>
+ <p>
+ Beispiel: Sie bauen auf unterschiedlichen Betriebssystemen mit unterschiedlichen Compilern.
+ Ihre Slave-Knoten sind mit den Labels <b>label=[linux,solaris]</b> gekennzeichnet und Sie haben
+ eine Achse <b>compiler=[gcc,cc]</b> angelegt.
+
+ Jeder der folgenden Ausdrücke wird Builds mit <b>cc</b> auf <b>linux</b> herausfiltern. Je nach
+ persönlicher Herangehensweise werden Sie die Ausdrücke unterschiedlich intuitiv finden.
+
+ <center>
+ <table>
+ <tr>
+ <td>Ansatz: "Wenn linux und cc gleichzeitig zutrifft, ist die Kombination ungültig."</td>
+ <td>
+ <pre>!(label=="linux" && compiler=="cc")</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>Ansatz: "Eine gültige Kombination verwendet entweder solaris oder gcc."</td>
+ <td>
+ <pre>label=="solaris" || compiler=="gcc"</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>Ansatz: "Wenn auf solaris, dann nur cc erlauben."</td>
+ <td>
+ <pre>(label=="solaris").implies(compiler=="cc")</pre>
+ </td>
+ </tr>
+ </table>
+ </center>
+
+ <h4>Ausdünnen der Matrix</h4>
+ <p>
+ Zusätzlich zu den werte-basierten Filterregeln, können Sie die Variable "<tt>index</tt>" verwenden,
+ um die Matrix auszudünnen.
+
+ <p>
+ Beispiel: <tt>index%2==0</tt> halbiert die Größe der Matrix, in dem nur noch jede zweite Kombination
+ gebaut wird. Analog drittelt <tt>index%3!=0</tt> die Größe der Matrix, in dem nur noch jede dritte
+ Kombination gebaut wird, usw.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_fr.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_fr.html
new file mode 100644
index 0000000..d89741b
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_fr.html
@@ -0,0 +1,54 @@
+<div>
+ Par défaut, Jenkins builde toutes les combinaisons possibles de tous les axes, de façon exhaustive. Parfois,
+ cela fait trop de combinaisons ou certaines combinaisons n'ont pas de sens.
+ Dans ce cas, vous pouvez réduire la matrice en filtrant les combinaisons que vous ne voulez pas à l'aide
+ d'une expression Groovy qui retourne vrai ou faux.
+
+ <p>
+ Quand vous spécifiez une expression Groovy ici, seules les combinaisons qui retournent <b>true</b>
+ seront construites. Lors de l'évaluation de l'expression, les axes sont exposés comme des variables
+ (avec leurs valeurs positionnées sur la combinaison courante).
+
+ <h4>Filtre basé sur les valeurs</h4>
+ <p>
+ Par exemple, disons que vous buildez sur des systèmes d'exploitation différents, pour des compilateurs
+ différents. Supposons que les libellés de vos esclaves sont <b>label=[linux,solaris]</b> et que vous
+ avez un axe <b>compiler=[gcc,cc].</b>
+
+ Chacune des expressions suivantes filtreront (c-à-d retireront) les builds <b>cc</b> sur <b>linux</b>.
+ Selon la façon dont vous envisagez cette contrainte, vous trouverez certaines expressions plus claires
+ que d'autres.
+
+ <center>
+ <table>
+ <tr>
+ <td>Lire "si simultanément linux et cc, alors c'est invalide"</td>
+ <td>
+ <pre>!(label=="linux" && compiler=="cc")</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>Lire "pour qu'une combinaison soit valide, elle doit être soit sur solaris, soit utiliser gcc."</td>
+ <td>
+ <pre>label=="solaris" || compiler=="gcc"</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>Lire "quand on est sur solaris, n'utiliser que cc"</td>
+ <td>
+ <pre>(label=="solaris").implies(compiler=="cc")</pre>
+ </td>
+ </tr>
+ </table>
+ </center>
+
+ <h4>Limitation de la matrice</h4>
+ <p>
+ En plus des règles de filtrage basées sur les valeurs, on peut également utiliser une
+ variable spéciale "<tt>index</tt>" qui peut être utilisée pour diminuer la matrice.
+
+ <p>
+ Par exemple, <tt>index%2==0</tt> diminuerait la matrice de moitié en retirant 1 combinaison sur 2,
+ de façon à ce que la couverture reste raisonnable.
+ De même, <tt>index%3!=0</tt> réduirait la matrice à 66% en supprimant 1 combinaison sur 3.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_ja.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_ja.html
new file mode 100644
index 0000000..81d8a04
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_ja.html
@@ -0,0 +1,49 @@
+<div>
+ デフォルトで、Jenkinsは構成軸のすべての組み合わせをビルドします。しかし、場合によってはこれでは組み合わせが多すぎるか、
+ 望ましくない組み合わせができてしまうことがあります。
+ そのような場合、真偽値を返すGroovyの式で必要のない組み合わせをフィルタリングする事で、構成マトリックスをまばらにすることができます。
+
+ <p>
+ Groovyの式をここで指定すると、式の結果が<b>true</b>になる組み合わせのみビルドされます。
+ 式の評価では、軸は変数として扱われます(評価中の組み合わせに値をセットします)。
+
+ <h4>値によるフィルタリング</h4>
+ <p>
+ 例えば、異なるOS上で複数のコンパイラを使用してビルドすることを考えてみましょう。
+ スレーブのラベルは<b>label=[linux,solaris]</b>とし、<b>compiler=[gcc,cc]</b>という構成軸を作成したとします。
+
+ 次の式は、どれも<b>linux</b>上での<b>cc</b>によるビルドを除去します。
+ この制約をどう考えるかにもよって、どの式が望ましいと思うかは個人差があるでしょう。
+
+ <center>
+ <table>
+ <tr>
+ <td>"linuxとccの場合は無効"</td>
+ <td>
+ <pre>!(label=="linux" && compiler=="cc")</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>"solarisかgccの場合は有効"</td>
+ <td>
+ <pre>label=="solaris" || compiler=="gcc"</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>"solarisであればccのみ使用する"</td>
+ <td>
+ <pre>(label=="solaris").implies(compiler=="cc")</pre>
+ </td>
+ </tr>
+ </table>
+ </center>
+
+ <h4>まばらな行列を作る</h4>
+ <p>
+ 特定の値の組み合わせの除去に加えて、予約された<tt>index</tt>変数を使って行列を一様にまばらにすることができます。
+
+ <p>
+ 例えば、<tt>index%2==0</tt>とすると、2つに1つの組み合わせを除去することで、ビルドする組み合わせのサイズを半分に
+ することができます。同様に、<tt>index%3!=0</tt>とすると、3つに1つの組み合わせが除去されサイズは66%になります。
+ indexの値は、剰余計算においてビルドが特定の値に偏らないように計算されます。
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_zh_TW.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_zh_TW.html
new file mode 100644
index 0000000..de9dd19
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/combinationfilter_zh_TW.html
@@ -0,0 +1,47 @@
+<div>
+ Jenkins 預設會建置所有軸線可能的排列組合。不過有時候組合會過多,或是有些組合根本就不合理。
+ 這種情況下,您可以使用 Groovy 表示式回傳值過濾掉不要的組合,讓矩陣稀疏點。
+
+ <p>
+ 設定了 Groovy 表示式後,只有回傳結果是 <b>true</b> 的組合才會建置。
+ 表示式執行時,軸線值會被當做變數傳入 (變數值設成當下要判斷的組合)。
+
+ <h4>依變數值篩選</h4>
+ <p>
+ 假設您要在不同作業系統的不同編譯器上建置。
+ 而您的 Slave 標籤有 <b>label=[linux,solaris]</b>,並建了 <b>compiler=[gcc,cc]</b> 這個軸線。
+
+ 下列的每一個表式示都會過濾掉在 <b>linux</b> 上的 <b>cc</b> 建置。
+ 差別在您怎麼看待這個限制,您可能會覺得某些方式就是比較直觀。
+
+ <center>
+ <table>
+ <tr>
+ <td>讀作「同時是 Linux 跟 cc 時,就不要做」。</td>
+ <td>
+ <pre>!(label=="linux" && compiler=="cc")</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>讀作「一定要在 Solaris 上或是用 gcc 才算是有效的組合」。</td>
+ <td>
+ <pre>label=="solaris" || compiler=="gcc"</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>讀作「在 Solaris 上,只用 cc」。</td>
+ <td>
+ <pre>(label=="solaris").implies(compiler=="cc")</pre>
+ </td>
+ </tr>
+ </table>
+ </center>
+
+ <h4>矩陣稀疏化</h4>
+ <p>
+ 除了設定變數值篩選規則外,您也可以使用 "<code>index</code>" 特別變數,將矩陣稀疏化。
+
+ <p>
+ 例如 <code>index%2==0</code> 可以跳過一種組合後再挑一種,讓矩陣大小減半,這種涵蓋率也很合常理。
+ 同樣的,<code>index%3!=0</code> 會每三種組合就挑一個掉,讓矩陣縮小三分之一。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk.html
new file mode 100644
index 0000000..398c341
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk.html
@@ -0,0 +1,12 @@
+<div>
+ Specify the JDK(s) with which builds are performed. If none is selected,
+ the default JDK is used (no explicit <tt>JAVA_HOME</tt>, and <tt>java</tt> command
+ is assumed to be in <tt>PATH</tt>.) If multiple JDKs are selected,
+ the configuration matrix will include all of the specified JDKs.
+ <br>
+ Selecting multiple values is typically useful when this job is running tests,
+ and you need to run tests on multiple different versions of JDKs.
+ <br>
+ During a build, the selected JDK value for the given run is available as the "jdk" axis.
+ See the help of "axes" below for more information about how to access the axis value.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_de.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_de.html
new file mode 100644
index 0000000..9f2d94d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_de.html
@@ -0,0 +1,15 @@
+<div>
+ Geben Sie die JDK(s) an, mit denen die Unter-Builds durchgeführt werden sollen.
+ Wenn kein JDK ausgewählt ist, wird das Default-JDK verwendet (kein explizites
+ Setzen der Umgebungsvariable <tt>JAVA_HOME</tt>; es wird erwartet, dass die
+ Kommandozeilenanwendung <tt>java</tt> im Suchpfad <tt>PATH</tt> enthalten ist).
+ Wenn mehrere JDKs ausgewählt sind, deckt die Konfigurationsmatrix alle diese
+ JDKs ab.
+ <p>
+ Eine Mehrfachauswahl ist typischerweise dann nützlich, wenn dieser Job Tests
+ beinhaltet und Sie diese Tests mit unterschiedlichen JDKs ausführen möchten.
+ <p>
+ Während eines Builds ist das aktuelle JDK als Achse <tt>jdk</tt> sichtbar.
+ Im Hilfetext zu "Achsen" finden Sie weitere Informationen, wie Sie auf die
+ Werte der Achsenvariablen zugreifen können.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_fr.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_fr.html
new file mode 100644
index 0000000..2073b49
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_fr.html
@@ -0,0 +1,15 @@
+<div>
+ Spécifie le(s) JDK avec le(s)quel(s) les builds seront exécutés. Si aucun
+ n'est donné, le JDK par défaut est utilisé (pas de variable
+ <tt>JAVA_HOME</tt> explicite; on suppose que la commande <tt>java</tt>
+ est dans le <tt>PATH</tt>). Si de multiples JDK sont précisés, la
+ matrice de configuration incluera tous ces JDK.
+ <br>
+ Avoir de multiples valeurs est utile typiquement quand le job exécute des
+ tests et que vous devez les lancer sur plusieurs versions différentes
+ du JDK.
+ <br>
+ Au cours d'un build, le JDK sélectionné est visible dans l'axe 'jdk'.
+ Référez-vous à l'aide sur les 'axes' ci-dessous pour plus d'information
+ sur l'accès à la valeur d'un axe.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_ja.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_ja.html
new file mode 100644
index 0000000..cd0f1be
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_ja.html
@@ -0,0 +1,10 @@
+<div>
+ ビルドを実行するJDKを指定します。指定しなければ、
+ デフォルトのJDKを使用します(明示的に<tt>JAVA_HOME</tt>はしませんし、<tt>java</tt>コマンドはパスに設定されていると想定します)。
+ 複数のJDKを指定した場合、構成軸は指定した全てのJDKを含みます。
+ <br>
+ ジョブがテストを実行する場合や、異なるバージョンのJDKでテストする必要がある場合に、複数の値の選択は便利です。
+ <br>
+ 指定されたJDKの値は、ビルド中は"jdk"という軸として利用可能です。
+ 軸の値のアクセス方法の詳細については、"構成軸"のヘルプを参照してください。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_nl.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_nl.html
new file mode 100644
index 0000000..35f52cc
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_nl.html
@@ -0,0 +1,8 @@
+<div>
+ Geef uw JDK(s) op waarmee U uw bouwpoging wenst te lanceren. Indien U ervoor kiest geen specifieke JDK(s) op te geven, zal de standaard JDK gebruikt worden. Hierbij wordt er vanuit gegaan dat er geen <tt>JAVA_HOME</tt> gedefinieerd werd en dat het <tt>java</tt> commando niet op uw <tt>PATH</tt> aanwezig is. Indien U meerdere JDKs selecteert, zal uw matrixconfiguratie al deze omvatten.
+ <br>
+ Meerdere waarden zijn typisch nuttig wanneer een job onder meerdere JDKs getest dient te worden.
+ <br>
+ Gedurende uw bouwpoging is de gekozen versie van de JDK beschikbaar als de "jdk"-dimensie.
+ Zie de hulpagina over dimensies voor meer informatie over het gebruik van dimensies.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_pt_BR.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_pt_BR.html
new file mode 100644
index 0000000..e4bea2f
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_pt_BR.html
@@ -0,0 +1,12 @@
+<div>
+ Especifica a(s) JDK(s) com as quais as construções são executadas. Se nenhuma for selecionada,
+ a JDK padrão é usada (sem <tt>JAVA_HOME</tt> explícito, e o comando <tt>java</tt>
+ é assumido que está no <tt>PATH</tt>.) Se múltiploas JDKs forem selecionadas,
+ a matriz de configuração incluirá todos as JDKs especificadas.
+ <br>
+ Selecionar valores múltiplos é tipicamente útil quando a tarefa for executar teste,
+ e você precisar executar testes em múltiplas versões diferentes de JDKs.
+ <br>
+ Durante uma construção, o valor de JDK selecionado para a execução está disponível como o eixo "jdK".
+ Veja a ajuda de "eixos" abaixo para mais informações sobre como acessar o valor do eixo.
+</div>
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_ru.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_ru.html
new file mode 100644
index 0000000..35cbfcf
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_ru.html
@@ -0,0 +1,13 @@
+<div>
+ Выберите JDK с которым(и) будет выполняться сборка. Если ни одного не выбрано,
+ будет использован JDK по-умолчанию (без явного <tt>JAVA_HOME</tt>, и команды <tt>java</tt>
+ не будет указано в <tt>PATH</tt>). Если несколько JDK выбрано,
+ конфигурационная матрица будет содержать все выбранные JDK.
+ <br>
+ Выбор нескольких значений обычно полезен в случаях когда проект тестируется и вам нужно
+ запускать тесты на нескольких разных версиях JDK.
+ <br>
+ Во время сборки выбранное значение JDK доступно как ось "jdk".
+ Смотрите в подсказку к опции "Оси (axes)" ниже для получения более подробной информации о том как
+ получить значения по осям.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_tr.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_tr.html
new file mode 100644
index 0000000..d7aaa75
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_tr.html
@@ -0,0 +1,11 @@
+<div>
+ Yapılandırmaların çalıştırılacağı JDK(ları) belirleyiniz. Eğer, herhangi biri seçilmez ise
+ varsayılan JDK kullanılacaktır (<tt>JAVA_HOME</tt>'un olmadığı, ve <tt>java</tt> komutunun
+ <tt>PATH</tt> içerisinde olduğu varsayılmaktadır.). Eğer birden fazla JDK seçilirse, konfigürasyon matrisi belirtilen
+ tüm JDK'ları içerecektir.
+ <br>
+ Eğer yapılmak istenen testin, farklı JDK'lar üzerinde çalıştırılması isteniyorsa, birden fazla değer seçmek kullanışlı olacaktır,
+ <br>
+ Yapılandırma esnasında, seçilen JDK değeri "jdK" ekseni olarak görülecektir.
+ Eksen değerlerine nasıl erişileceğine dair daha fazla bilgi için, aşağıda "eksenler" ile ilgili yardım kısmına bakınız.
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_zh_TW.html b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_zh_TW.html
new file mode 100644
index 0000000..66fe048
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/main/webapp/help/matrix/jdk_zh_TW.html
@@ -0,0 +1,10 @@
+<div>
+ 指定要用來執行建置的 JDK。如果沒有選取任何項目,會使用預設 JDK (如果沒有明確的
+ <code>JAVA_HOME</code> 設定,會使用在 <code>PATH</code> 路徑裡的 <code>java</code> 指令)。
+ 如果選了超過一個 JDK,設定陣矩會將它們全部納進來。
+ <br>
+ 如果您的作業會執行測試,而且需要在不同版本的 JDK 上都跑過一次,您就可以將這些 JDK 都選進來。
+ <br>
+ 建置時,選取的 JDK 值會在 "jdk" 軸上出現。
+ 請參考下方的「軸線」,了解如何存取座標值的相關資料。
+</div>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/test/groovy/hudson/matrix/MatrixProjectCustomWorkspaceTest.groovy b/plugins/matrix-project-plugin/src/test/groovy/hudson/matrix/MatrixProjectCustomWorkspaceTest.groovy
new file mode 100644
index 0000000..436a0c0
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/groovy/hudson/matrix/MatrixProjectCustomWorkspaceTest.groovy
@@ -0,0 +1,147 @@
+package hudson.matrix
+
+import java.util.concurrent.CountDownLatch
+import org.jvnet.hudson.test.TestBuilder
+import hudson.model.AbstractBuild
+import hudson.Launcher
+import hudson.model.BuildListener
+import org.jvnet.hudson.test.HudsonTestCase
+
+/**
+ * Tests the custom workspace support in {@link MatrixProject}.
+ *
+ * To validate the lease behaviour, use concurrent builds to run two builds and make sure they get
+ * same/different workspaces.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+class MatrixProjectCustomWorkspaceTest extends HudsonTestCase {
+ /**
+ * Test the case where both the parent and the child has custom workspace specified.
+ */
+ void testCustomWorkspace1() {
+ def p = createMatrixProject()
+ def dir = env.temporaryDirectoryAllocator.allocate()
+ p.customWorkspace = dir
+ p.childCustomWorkspace = "xyz"
+
+ configRoundtrip(p)
+ configureCustomWorkspaceConcurrentBuild(p)
+
+ // all concurrent builds should build on the same one workspace
+ runTwoConcurrentBuilds(p).each { b ->
+ assertEquals(dir.path, b.workspace.getRemote())
+ b.runs.each { r -> assertEquals(new File(dir,"xyz").path, r.workspace.getRemote()) }
+ }
+ }
+
+ /**
+ * Test the case where only the parent has a custom workspace.
+ */
+ void testCustomWorkspace2() {
+ def p = createMatrixProject()
+ def dir = env.temporaryDirectoryAllocator.allocate()
+ p.customWorkspace = dir
+ p.childCustomWorkspace = null
+
+ configRoundtrip(p)
+ configureCustomWorkspaceConcurrentBuild(p)
+
+ def bs = runTwoConcurrentBuilds(p)
+
+ // all parent builds share the same workspace
+ bs.each { b ->
+ assertEquals(dir.path, b.workspace.getRemote())
+ }
+ // foo=1 #1 and foo=1 #2 shares the same workspace,
+ (0..<2).each { i ->
+ assertTrue bs[0].runs[i].workspace == bs[1].runs[i].workspace
+ }
+ // but foo=1 #1 and foo=2 #1 shouldn't.
+ (0..<2).each { i ->
+ assertTrue bs[i].runs[0].workspace != bs[i].runs[1].workspace
+ }
+ }
+
+ /**
+ * Test the case where only the child has a custom workspace.
+ */
+ void testCustomWorkspace3() {
+ def p = createMatrixProject()
+ p.customWorkspace = null
+ p.childCustomWorkspace = "."
+
+ configRoundtrip(p)
+ configureCustomWorkspaceConcurrentBuild(p)
+
+ def bs = runTwoConcurrentBuilds(p)
+
+ // each parent gets different directory
+ assertTrue bs[0].workspace != bs[1].workspace
+ // but all #1 builds should get the same workspace
+ bs.each { b ->
+ (0..<2).each { i-> assertTrue b.workspace == b.runs[i].workspace }
+ }
+ }
+
+ /**
+ * Test the case where neither has custom workspace
+ */
+ void testCustomWorkspace4() {
+ def p = createMatrixProject()
+ p.customWorkspace = null
+ p.childCustomWorkspace = null
+
+ configRoundtrip(p)
+ configureCustomWorkspaceConcurrentBuild(p)
+
+ def bs = runTwoConcurrentBuilds(p)
+
+ // each parent gets different directory
+ assertTrue bs[0].workspace != bs[1].workspace
+ // and every sub-build gets a different directory
+ bs.each { b ->
+ def x = b.runs[0].workspace
+ def y = b.runs[1].workspace
+ def z = b.workspace
+
+ assertTrue x!=y
+ assertTrue y!=z
+ assertTrue z!=x
+ }
+ }
+
+ /**
+ * Configures MatrixProject such that two builds run concurrently.
+ */
+ def configureCustomWorkspaceConcurrentBuild(MatrixProject p) {
+ // needs sufficient parallel execution capability
+ jenkins.numExecutors = 10
+ jenkins.updateComputerList()
+
+ p.axes = new AxisList(new TextAxis("foo", "1", "2"))
+ p.concurrentBuild = true;
+ def latch = new CountDownLatch(4)
+
+ p.buildersList.add(new TestBuilder() {
+ boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) {
+ latch.countDown()
+ latch.await()
+ return true
+ }
+ })
+ }
+
+ /**
+ * Runs two concurrent builds and return their results.
+ */
+ List<MatrixBuild> runTwoConcurrentBuilds(MatrixProject p) {
+ def f1 = p.scheduleBuild2(0)
+ // get one going
+ f1.waitForStart()
+ def f2 = p.scheduleBuild2(0)
+
+ def bs = [f1, f2]*.get().each { assertBuildStatusSuccess(it) }
+ return bs
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/test/groovy/hudson/matrix/MatrixProjectTest.groovy b/plugins/matrix-project-plugin/src/test/groovy/hudson/matrix/MatrixProjectTest.groovy
new file mode 100644
index 0000000..118f0bb
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/groovy/hudson/matrix/MatrixProjectTest.groovy
@@ -0,0 +1,522 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2011, Sun Microsystems, Inc., CloudBees, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix
+
+import hudson.model.Cause
+import hudson.model.Result
+import hudson.slaves.DumbSlave
+import hudson.slaves.RetentionStrategy
+import hudson.tasks.Ant
+import hudson.tasks.ArtifactArchiver
+import hudson.tasks.Fingerprinter
+import hudson.tasks.Maven
+import hudson.tasks.Shell
+import hudson.tasks.BatchFile
+import org.jvnet.hudson.test.Email
+import org.jvnet.hudson.test.SingleFileSCM
+import org.jvnet.hudson.test.UnstableBuilder
+import org.jvnet.hudson.test.recipes.LocalData;
+import com.gargoylesoftware.htmlunit.html.HtmlTable
+import org.jvnet.hudson.test.Bug
+import org.jvnet.hudson.test.TestBuilder
+import hudson.model.AbstractBuild
+import hudson.Launcher
+import hudson.model.BuildListener
+import hudson.util.OneShotEvent
+import java.util.concurrent.Future
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeoutException
+import hudson.model.JDK
+import hudson.model.Slave
+import hudson.Functions
+import hudson.model.ParametersDefinitionProperty
+import hudson.model.FileParameterDefinition
+import hudson.model.Cause.LegacyCodeCause
+import hudson.model.ParametersAction
+import hudson.model.FileParameterValue
+import hudson.model.StringParameterDefinition
+import hudson.model.StringParameterValue
+import hudson.scm.SubversionSCM.SvnInfo;
+import hudson.scm.RevisionParameterAction;
+import java.util.List;
+import java.util.ArrayList;
+import hudson.model.Action;
+
+import java.util.concurrent.CountDownLatch
+
+import static hudson.model.Node.Mode.EXCLUSIVE
+import static org.junit.Assert.*
+import org.junit.Rule
+import org.junit.Test
+import org.jvnet.hudson.test.JenkinsRule
+import org.jvnet.hudson.test.RandomlyFails
+import org.junit.rules.TemporaryFolder
+
+/**
+ *
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixProjectTest {
+
+ @Rule public JenkinsRule j = new JenkinsRule();
+ @Rule public TemporaryFolder tmp = new TemporaryFolder();
+
+ /**
+ * Tests that axes are available as build variables in the Ant builds.
+ */
+ @Test
+ public void testBuildAxisInAnt() throws Exception {
+ MatrixProject p = createMatrixProject();
+ Ant.AntInstallation ant = j.configureDefaultAnt();
+ p.getBuildersList().add(new Ant('-Dprop=${db} test',ant.getName(),null,null,null));
+
+ // we need a dummy build script that echos back our property
+ p.setScm(new SingleFileSCM("build.xml",'<project default="test"><target name="test"><echo>assertion ${prop}=${db}</echo></target></project>'));
+
+ MatrixBuild build = p.scheduleBuild2(0, new Cause.UserCause()).get();
+ List<MatrixRun> runs = build.getRuns();
+ assertEquals(4,runs.size());
+ for (MatrixRun run : runs) {
+ j.assertBuildStatus(Result.SUCCESS, run);
+ String expectedDb = run.getParent().getCombination().get("db");
+ j.assertLogContains("assertion "+expectedDb+"="+expectedDb, run);
+ }
+ }
+
+ /**
+ * Tests that axes are available as build variables in the Maven builds.
+ */
+ @RandomlyFails("Not a v4.0.0 POM. for project org.jvnet.maven-antrun-extended-plugin:maven-antrun-extended-plugin at /home/jenkins/.m2/repository/org/jvnet/maven-antrun-extended-plugin/maven-antrun-extended-plugin/1.40/maven-antrun-extended-plugin-1.40.pom")
+ @Test
+ public void testBuildAxisInMaven() throws Exception {
+ MatrixProject p = createMatrixProject();
+ Maven.MavenInstallation maven = j.configureDefaultMaven();
+ p.getBuildersList().add(new Maven('-Dprop=${db} validate',maven.getName()));
+
+ // we need a dummy build script that echos back our property
+ p.setScm(new SingleFileSCM("pom.xml",getClass().getResource("echo-property.pom")));
+
+ MatrixBuild build = p.scheduleBuild2(0).get();
+ List<MatrixRun> runs = build.getRuns();
+ assertEquals(4,runs.size());
+ for (MatrixRun run : runs) {
+ j.assertBuildStatus(Result.SUCCESS, run);
+ String expectedDb = run.getParent().getCombination().get("db");
+ System.out.println(run.getLog());
+ j.assertLogContains("assertion "+expectedDb+"="+expectedDb, run);
+ // also make sure that the variables are expanded at the command line level.
+ assertFalse(run.getLog().contains('-Dprop=${db}'));
+ }
+ }
+
+ /**
+ * Test that configuration filters work
+ */
+ @Test
+ public void testConfigurationFilter() throws Exception {
+ MatrixProject p = createMatrixProject();
+ p.setCombinationFilter("db==\"mysql\"");
+ MatrixBuild build = p.scheduleBuild2(0).get();
+ assertEquals(2, build.getRuns().size());
+ }
+
+ /**
+ * Test that touch stone builds work
+ */
+ @Test
+ public void testTouchStone() throws Exception {
+ MatrixProject p = createMatrixProject();
+ p.setTouchStoneCombinationFilter("db==\"mysql\"");
+ p.setTouchStoneResultCondition(Result.SUCCESS);
+ MatrixBuild build = p.scheduleBuild2(0).get();
+ assertEquals(4, build.getRuns().size());
+
+ p.getBuildersList().add(new UnstableBuilder());
+ build = p.scheduleBuild2(0).get();
+ assertEquals(2, build.exactRuns.size());
+ }
+
+ protected MatrixProject createMatrixProject() throws IOException {
+ MatrixProject p = j.createMatrixProject();
+
+ // set up 2x2 matrix
+ AxisList axes = new AxisList();
+ axes.add(new TextAxis("db","mysql","oracle"));
+ axes.add(new TextAxis("direction","north","south"));
+ p.setAxes(axes);
+
+ return p;
+ }
+
+ /**
+ * Fingerprinter failed to work on the matrix project.
+ */
+ @Email("http://www.nabble.com/1.286-version-and-fingerprints-option-broken-.-td22236618.html")
+ @Test
+ public void testFingerprinting() throws Exception {
+ MatrixProject p = createMatrixProject();
+ if (Functions.isWindows())
+ p.getBuildersList().add(new BatchFile("echo \"\" > p"));
+ else
+ p.getBuildersList().add(new Shell("touch p"));
+
+ p.getPublishersList().add(new ArtifactArchiver("p",null,false, false));
+ p.getPublishersList().add(new Fingerprinter("",true));
+ j.buildAndAssertSuccess(p);
+ }
+
+ void assertRectangleTable(MatrixProject p) {
+ def html = j.createWebClient().getPage(p);
+ HtmlTable table = html.selectSingleNode("id('matrix')/table")
+
+ // remember cells that are extended from rows above.
+ def rowSpans = [:];
+ def masterWidth = null
+ for (r in table.rows) {
+ int width = r.cells*.columnSpan.sum() + rowSpans.values().sum(0);
+ if (masterWidth==null)
+ masterWidth = width;
+ else
+ assertEquals(masterWidth,width);
+
+ for (c in r.cells)
+ rowSpans[c.rowSpan] = (rowSpans[c.rowSpan]?:0)+c.columnSpan
+ // shift rowSpans by one
+ def nrs =[:]
+ rowSpans.each { k,v -> if(k>1) nrs[k-1]=v }
+ rowSpans = nrs
+ }
+ }
+
+ @Bug(4245)
+ @Test
+ void testLayout1() {
+ // 5*5*5*5*5 matrix
+ def p = createMatrixProject();
+ p.axes = new AxisList(
+ ['a','b','c','d','e'].collect { name -> new TextAxis(name, (1..4)*.toString() ) }
+ );
+ assertRectangleTable(p)
+ }
+
+ @Bug(4245)
+ @Test
+ void testLayout2() {
+ // 2*3*4*5*6 matrix
+ def p = createMatrixProject();
+ p.axes = new AxisList(
+ (2..6).collect { n -> new TextAxis("axis${n}", (1..n)*.toString() ) }
+ );
+ assertRectangleTable(p)
+ }
+
+ /**
+ * Makes sure that the configuration correctly roundtrips.
+ */
+ @Test
+ public void testConfigRoundtrip() {
+ j.jenkins.getJDKs().addAll([
+ new JDK("jdk1.7","somewhere"),
+ new JDK("jdk1.6","here"),
+ new JDK("jdk1.5","there")]);
+
+ List<Slave> slaves = (0..2).collect { j.createSlave() }
+
+ def p = createMatrixProject();
+ p.axes.add(new JDKAxis(["jdk1.6","jdk1.5"]));
+ p.axes.add(new LabelAxis("label1",[slaves[0].nodeName, slaves[1].nodeName]));
+ p.axes.add(new LabelAxis("label2",[slaves[2].nodeName])); // make sure single value handling works OK
+ def o = new AxisList(p.axes);
+ j.configRoundtrip(p);
+ def n = p.axes;
+
+ assertEquals(o.size(),n.size());
+ (0 ..< (o.size())).each { i ->
+ def oi = o[i];
+ def ni = n[i];
+ assertSame(oi.class,ni.class);
+ assertEquals(oi.name,ni.name);
+ assertEquals(oi.values,ni.values);
+ }
+
+
+ def before = new DefaultMatrixExecutionStrategyImpl(true, "foo", Result.UNSTABLE, null)
+ p.executionStrategy = before;
+ j.configRoundtrip(p);
+ j.assertEqualDataBoundBeans(p.executionStrategy,before);
+
+ before = new DefaultMatrixExecutionStrategyImpl(false, null, null, null)
+ p.executionStrategy = before;
+ j.configRoundtrip(p);
+ j.assertEqualDataBoundBeans(p.executionStrategy,before);
+ }
+
+ @Test
+ public void testLabelAxes() {
+ def p = createMatrixProject();
+
+ List<Slave> slaves = (0..<4).collect { j.createSlave() }
+
+ p.axes.add(new LabelAxis("label1",[slaves[0].nodeName, slaves[1].nodeName]));
+ p.axes.add(new LabelAxis("label2",[slaves[2].nodeName, slaves[3].nodeName]));
+
+ System.out.println(p.labels);
+ assertEquals(4,p.labels.size());
+ assertTrue(p.labels.contains(j.jenkins.getLabel("slave0&&slave2")));
+ assertTrue(p.labels.contains(j.jenkins.getLabel("slave1&&slave2")));
+ assertTrue(p.labels.contains(j.jenkins.getLabel("slave0&&slave3")));
+ assertTrue(p.labels.contains(j.jenkins.getLabel("slave1&&slave3")));
+ }
+
+ /**
+ * Quiettng down Hudson causes a dead lock if the parent is running but children is in the queue
+ */
+ @Bug(4873)
+ @Test
+ void testQuietDownDeadlock() {
+ def p = createMatrixProject();
+ p.axes = new AxisList(new TextAxis("foo","1","2"));
+ p.runSequentially = true; // so that we can put the 2nd one in the queue
+
+ OneShotEvent firstStarted = new OneShotEvent();
+ OneShotEvent buildCanProceed = new OneShotEvent();
+
+ p.getBuildersList().add( [perform:{ AbstractBuild build, Launcher launcher, BuildListener listener ->
+ firstStarted.signal();
+ buildCanProceed.block();
+ return true;
+ }] as TestBuilder );
+ Future f = p.scheduleBuild2(0)
+
+ // have foo=1 block to make sure the 2nd configuration is in the queue
+ firstStarted.block();
+ // enter into the quiet down while foo=2 is still in the queue
+ j.jenkins.doQuietDown();
+ buildCanProceed.signal();
+
+ // make sure foo=2 still completes. use time out to avoid hang
+ j.assertBuildStatusSuccess(f.get(10,TimeUnit.SECONDS));
+
+ // MatrixProject scheduled after the quiet down shouldn't start
+ try {
+ Future g = p.scheduleBuild2(0)
+ g.get(3,TimeUnit.SECONDS)
+ fail()
+ } catch (TimeoutException e) {
+ // expected
+ }
+ }
+
+ @Bug(9009)
+ @Test
+ void testTrickyNodeName() {
+ def names = [ j.createSlave("Sean's Workstation",null), j.createSlave("John\"s Workstation",null) ]*.nodeName;
+ def p = createMatrixProject();
+ p.setAxes(new AxisList([new LabelAxis("label",names)]));
+ j.configRoundtrip(p);
+
+ LabelAxis a = p.axes.find("label");
+ assertEquals(a.values as Set,names as Set);
+ }
+
+ @Bug(10108)
+ @Test
+ void testTwoFileParams() {
+ def p = createMatrixProject();
+ p.axes = new AxisList(new TextAxis("foo","1","2","3","4"));
+ p.addProperty(new ParametersDefinitionProperty(
+ new FileParameterDefinition("a.txt",""),
+ new FileParameterDefinition("b.txt",""),
+ ));
+
+ def dir = tmp.getRoot()
+ def f = p.scheduleBuild2(0,new LegacyCodeCause(),new ParametersAction(
+ ["aaa","bbb"].collect { it ->
+ def v = new FileParameterValue(it+".txt",File.createTempFile(it,"", dir),it)
+ v.setLocation(it)
+ return v;
+ }
+ ))
+
+ j.assertBuildStatusSuccess(f.get(10,TimeUnit.SECONDS));
+ }
+
+ /**
+ * Verifies that the concurrent build feature works, and makes sure
+ * that each gets its own unique workspace.
+ */
+ @Test
+ void testConcurrentBuild() {
+ j.jenkins.numExecutors = 10
+ j.jenkins.updateComputerList()
+
+ def p = createMatrixProject()
+ p.axes = new AxisList(new TextAxis("foo","1","2"))
+ p.concurrentBuild = true;
+ def latch = new CountDownLatch(4)
+ def dirs = Collections.synchronizedSet(new HashSet())
+
+ p.buildersList.add(new TestBuilder() {
+ boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) {
+ dirs << build.workspace.getRemote()
+ def marker = build.workspace.child("file")
+ def name = build.fullDisplayName
+ marker.write(name,"UTF-8")
+ latch.countDown()
+ latch.await()
+ assertEquals(name,marker.readToString())
+ return true
+ }
+ })
+
+ // should have gotten all unique names
+ def f1 = p.scheduleBuild2(0)
+ // get one going
+ f1.waitForStart()
+ def f2 = p.scheduleBuild2(0)
+ [f1,f2]*.get().each{ j.assertBuildStatusSuccess(it)}
+
+ assertEquals 4, dirs.size()
+ }
+
+
+ /**
+ * Test that Actions are passed to configurations
+ */
+ @Test
+ public void testParameterActions() throws Exception {
+ MatrixProject p = createMatrixProject();
+
+ ParametersDefinitionProperty pdp = new ParametersDefinitionProperty(
+ new StringParameterDefinition("PARAM_A","default_a"),
+ new StringParameterDefinition("PARAM_B","default_b"),
+ );
+
+ p.addProperty(pdp);
+ ParametersAction pa = new ParametersAction( pdp.getParameterDefinitions().collect { return it.getDefaultParameterValue() } )
+
+ MatrixBuild build = p.scheduleBuild2(0,new LegacyCodeCause(), pa).get();
+
+ assertEquals(4, build.getRuns().size());
+
+ for(MatrixRun run : build.getRuns()) {
+ ParametersAction pa1 = run.getAction(ParametersAction.class);
+ assertNotNull(pa1);
+ ["PARAM_A","PARAM_B"].each{ assertNotNull(pa1.getParameter(it)) }
+ }
+ }
+
+ /**
+ * Test that other Actions are passed to configurations
+ * requires supported version of subversion plugin 1.43+
+ */
+
+ //~ public void testMatrixChildActions() throws Exception {
+ //~ MatrixProject p = createMatrixProject();
+
+ //~ ParametersDefinitionProperty pdp = new ParametersDefinitionProperty(
+ //~ new StringParameterDefinition("PARAM_A","default_a"),
+ //~ new StringParameterDefinition("PARAM_B","default_b"),
+ //~ );
+
+ //~ p.addProperty(pdp);
+
+ //~ List<Action> actions = new ArrayList<Action>();
+ //~ actions.add(new RevisionParameterAction(new SvnInfo("http://example.com/svn/repo/",1234)));
+ //~ actions.add(new ParametersAction( pdp.getParameterDefinitions().collect { return it.getDefaultParameterValue() } ));
+
+ //~ MatrixBuild build = p.scheduleBuild2(0,new LegacyCodeCause(), actions).get();
+
+ //~ assertEquals(4, build.getRuns().size());
+
+ //~ for(MatrixRun run : build.getRuns()) {
+ //~ ParametersAction pa1 = run.getAction(ParametersAction.class);
+ //~ assertNotNull(pa1);
+ //~ ["PARAM_A","PARAM_B"].each{ assertNotNull(pa1.getParameter(it)) };
+
+ //~ assertNotNull(run.getAction(RevisionParameterAction.class));
+ //~ }
+ //~ }
+
+ @Bug(15271)
+ @LocalData
+ @Test
+ public void testUpgrade() throws Exception {
+ MatrixProject p = j.jenkins.getItemByFullName("x", MatrixProject.class);
+ assertNotNull(p);
+ MatrixExecutionStrategy executionStrategy = p.getExecutionStrategy();
+ assertEquals(DefaultMatrixExecutionStrategyImpl.class, executionStrategy.getClass());
+ DefaultMatrixExecutionStrategyImpl defaultExecutionStrategy = (DefaultMatrixExecutionStrategyImpl) executionStrategy;
+ assertFalse(defaultExecutionStrategy.isRunSequentially());
+ assertNull(defaultExecutionStrategy.getTouchStoneCombinationFilter());
+ assertNull(defaultExecutionStrategy.getTouchStoneResultCondition());
+ assertNull(defaultExecutionStrategy.getSorter());
+ }
+
+ @Bug(17337)
+ @Test public void reload() throws Exception {
+ MatrixProject p = j.createMatrixProject();
+ AxisList axes = new AxisList();
+ axes.add(new TextAxis("p", "only"));
+ p.setAxes(axes);
+ String n = p.getFullName();
+ j.buildAndAssertSuccess(p);
+ j.jenkins.reload();
+ p = j.jenkins.getItemByFullName(n, MatrixProject.class);
+ assertNotNull(p);
+ MatrixConfiguration c = p.getItem("p=only");
+ assertNotNull(c);
+ assertNotNull(c.getBuildByNumber(1));
+ }
+
+ /**
+ * Given a small master and a big exclusive slave, the fair scheduling would prefer running the flyweight job
+ * in the slave. But if the scheduler honors the EXCLUSIVE flag, then we should see it built on the master.
+ *
+ * Since there's a chance that the fair scheduling just so happens to pick up the master by chance,
+ * we try multiple jobs to reduce the chance of that happening.
+ */
+ @Bug(5076)
+ @Test
+ public void dontRunOnExclusiveSlave() {
+ def projects = (0..10).collect {
+ def m = j.createMatrixProject()
+ def axes = new AxisList();
+ axes.add(new TextAxis("p", "only"));
+ m.axes = axes
+ return m;
+ }
+
+ def s = new DumbSlave("big", "this is a big slave", j.createTmpDir().path, "20", EXCLUSIVE, "", j.createComputerLauncher(null), RetentionStrategy.NOOP);
+ j.jenkins.addNode(s);
+
+ s.toComputer().connect(false).get(); // connect this guy
+
+ projects.each { p ->
+ def b = j.assertBuildStatusSuccess(p.scheduleBuild2(2))
+ assertSame(b.builtOn, j.jenkins)
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/test/java/hudson/matrix/CombinationFilterUsingBuildParamsTest.java b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/CombinationFilterUsingBuildParamsTest.java
new file mode 100644
index 0000000..a302c7e
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/CombinationFilterUsingBuildParamsTest.java
@@ -0,0 +1,304 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012, RedHat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import hudson.ExtensionList;
+import hudson.matrix.MatrixBuild.MatrixBuildExecution;
+import hudson.matrix.listeners.MatrixBuildListener;
+import hudson.model.AbstractItem;
+import hudson.model.BuildListener;
+import hudson.model.Cause;
+import hudson.model.Node;
+import hudson.model.ParametersAction;
+import hudson.model.Result;
+import hudson.model.Run;
+import hudson.model.StringParameterValue;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import jenkins.model.Jenkins;
+
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.jvnet.hudson.test.Bug;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.verification.VerificationMode;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+/**
+ * Make sure that the combination filter schedules correct builds in correct order
+ *
+ * @author ogondza
+ */
+ at RunWith(PowerMockRunner.class)
+ at PrepareForTest( {Jenkins.class, MatrixBuildListener.class, MatrixProject.class, AbstractItem.class})
+public class CombinationFilterUsingBuildParamsTest {
+
+ /**
+ * Execute releases: experimental, stable, beta, devel
+ *
+ * x s b d
+ * 0.1
+ * 0.9 * * * *
+ * 1 * * *
+ * 2 * *
+ * 3 *
+ */
+ private static final String filter =
+ String.format(
+ "(%s) || (%s) || (%s)",
+ "RELEASE == 'stable' && VERSION == '1'",
+ "RELEASE == 'beta' && VERSION >= '1' && VERSION <= '2'",
+ "RELEASE == 'devel' && VERSION >= '1' && VERSION <= '3'"
+ );
+
+ private static final String touchstoneFilter = "VERSION == '0.9'";
+
+ private static final List<String> releases = Arrays.asList(
+ "stable", "beta", "devel", "experimental"
+ );
+
+ private final Map<String, MatrixConfiguration> confs = new HashMap<String, MatrixConfiguration>();
+ private final MatrixExecutionStrategy strategy = new DefaultMatrixExecutionStrategyImpl (
+ true, touchstoneFilter, Result.SUCCESS, new NoopMatrixConfigurationSorter()
+ );
+
+ private MatrixProject project;
+ @Mock private MatrixBuildExecution execution;
+ @Mock private MatrixBuild build;
+ @Mock private MatrixRun run;
+ @Mock private BuildListener listener;
+
+ @Mock private Jenkins jenkins;
+ @Mock private ExtensionList<MatrixBuildListener> extensions;
+
+ @Before
+ public void setUp() throws Exception {
+
+ MockitoAnnotations.initMocks(this);
+
+ usingDummyJenkins();
+ usingNoListeners();
+ usingDummyProject();
+ usingDummyExecution();
+ withReleaseAxis(releases);
+ }
+
+ @Test
+ public void testCombinationFilterV01() throws InterruptedException, IOException {
+
+ givenTheVersionIs("0.1");
+
+ strategy.run(execution);
+
+ wasNotBuilt(confs.get("devel"));
+ wasNotBuilt(confs.get("beta"));
+ wasNotBuilt(confs.get("stable"));
+ wasNotBuilt(confs.get("experimental"));
+ }
+
+ @Test
+ public void testCombinationFilterV09() throws InterruptedException, IOException {
+
+ givenTheVersionIs("0.9");
+
+ strategy.run(execution);
+
+ wasBuilt(confs.get("devel"));
+ wasBuilt(confs.get("beta"));
+ wasBuilt(confs.get("stable"));
+ wasBuilt(confs.get("experimental"));
+ }
+
+ @Test
+ public void testCombinationFilterV1() throws InterruptedException, IOException {
+
+ givenTheVersionIs("1");
+
+ strategy.run(execution);
+
+ wasBuilt(confs.get("devel"));
+ wasBuilt(confs.get("beta"));
+ wasBuilt(confs.get("stable"));
+ wasNotBuilt(confs.get("experimental"));
+ }
+
+ @Test
+ public void testCombinationFilterV2() throws InterruptedException, IOException {
+
+ givenTheVersionIs("2");
+
+ strategy.run(execution);
+
+ wasBuilt(confs.get("devel"));
+ wasBuilt(confs.get("beta"));
+ wasNotBuilt(confs.get("stable"));
+ wasNotBuilt(confs.get("experimental"));
+ }
+
+ @Test
+ public void testCombinationFilterV3() throws InterruptedException, IOException {
+
+ givenTheVersionIs("3");
+
+ strategy.run(execution);
+
+ wasBuilt(confs.get("devel"));
+ wasNotBuilt(confs.get("beta"));
+ wasNotBuilt(confs.get("stable"));
+ wasNotBuilt(confs.get("experimental"));
+ }
+
+ @Test
+ @Bug(7285)
+ public void reproduceTouchstoneRegression () throws InterruptedException, IOException {
+
+ givenTheVersionIs("3");
+
+ // No touchstone
+ MatrixExecutionStrategy myStrategy = new DefaultMatrixExecutionStrategyImpl (
+ true, null, Result.SUCCESS, new NoopMatrixConfigurationSorter()
+ );
+
+ myStrategy.run(execution);
+
+ wasBuilt(confs.get("devel"));
+ wasNotBuilt(confs.get("beta"));
+ wasNotBuilt(confs.get("stable"));
+ wasNotBuilt(confs.get("experimental"));
+ }
+
+ private void usingDummyProject() {
+
+ project = PowerMockito.mock(MatrixProject.class);
+
+ PowerMockito.when(build.getParent()).thenReturn(project);
+ PowerMockito.when(project.getUrl()).thenReturn("/my/project/");
+
+ when(project.getAxes()).thenReturn(new AxisList(new Axis("RELEASE", releases)));
+ when(project.getCombinationFilter()).thenReturn(filter);
+ }
+
+ private void usingDummyExecution() {
+
+ when(execution.getProject()).thenReturn(project);
+ when(execution.getBuild()).thenReturn(build);
+ when(execution.getListener()).thenReturn(listener);
+
+ // throw away logs
+ when(listener.getLogger()).thenReturn(new PrintStream(
+ new ByteArrayOutputStream()
+ ));
+
+ // Succeed immediately
+ when(run.isBuilding()).thenReturn(false);
+ when(run.getResult()).thenReturn(Result.SUCCESS);
+ }
+
+ private void usingDummyJenkins() {
+
+ PowerMockito.mockStatic(Jenkins.class);
+ when(Jenkins.getInstance()).thenReturn(jenkins);
+ when(jenkins.getNodes()).thenReturn(new ArrayList<Node>());
+ }
+
+ private void usingNoListeners() {
+
+ when(extensions.iterator()).thenReturn(new ArrayList<MatrixBuildListener>().iterator());
+ when(MatrixBuildListener.all()).thenReturn(extensions);
+ }
+
+ private void withReleaseAxis(final List<String> releases) {
+
+ for(final String release: releases) {
+
+ confs.put(release, getConfiguration("RELEASE=" + release));
+ }
+
+ when(execution.getActiveConfigurations()).thenReturn(
+ new HashSet<MatrixConfiguration>(confs.values())
+ );
+ }
+
+ private MatrixConfiguration getConfiguration (final String axis) {
+
+ final MatrixConfiguration conf = mock(MatrixConfiguration.class);
+ when(conf.getParent()).thenReturn(project);
+ when(conf.getCombination()).thenReturn(Combination.fromString(axis));
+ when(conf.getDisplayName()).thenReturn(axis);
+ when(conf.getUrl()).thenReturn(axis);
+ when(conf.getBuildByNumber(anyInt())).thenReturn(run);
+
+ return conf;
+ }
+
+ private void givenTheVersionIs(final String version) {
+
+ final ParametersAction parametersAction = new ParametersAction(
+ new StringParameterValue("VERSION", version)
+ );
+
+ when(build.getAction(ParametersAction.class))
+ .thenReturn(parametersAction)
+ ;
+ }
+
+ private void wasBuilt(final MatrixConfiguration conf) {
+
+ wasBuildTimes(conf, times(1));
+ }
+
+ private void wasNotBuilt(final MatrixConfiguration conf) {
+
+ wasBuildTimes(conf, never());
+ }
+
+ private void wasBuildTimes(
+ final MatrixConfiguration conf, final VerificationMode mode
+ ) {
+
+ verify(conf, mode).scheduleBuild(
+ new ArrayList<MatrixChildAction>(),
+ new Cause.UpstreamCause((Run<?, ?>) build)
+ );
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/test/java/hudson/matrix/CombinationTest.java b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/CombinationTest.java
new file mode 100644
index 0000000..9ee7c60
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/CombinationTest.java
@@ -0,0 +1,62 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author Kohsuke Kawaguchi
+ */
+public class CombinationTest extends TestCase {
+ AxisList axes = new AxisList(
+ new Axis("a","X","x"),
+ new Axis("b","Y","y"));
+
+ @SuppressWarnings({"RedundantStringConstructorCall"})
+ public void testEval() {
+ Map<String,String> r = new HashMap<String, String>();
+ r.put("a","X");
+ r.put("b",new String("Y")); // make sure this 'Y' is not the same object as literal "Y".
+ Combination c = new Combination(r);
+
+ r.put("a","x");
+ Combination d = new Combination(r);
+
+ assertTrue(eval(c, null));
+ assertTrue(eval(c," "));
+ assertTrue(eval(c,"true"));
+ assertTrue(eval(c,"a=='X'"));
+ assertTrue(eval(c,"b=='Y'"));
+ assertTrue(eval(c,"(a=='something').implies(b=='other')"));
+ assertTrue(eval(c,"index%2==0")^eval(d,"index%2==0"));
+ assertTrue(eval(c,"index%2==1")^eval(d,"index%2==1"));
+ }
+
+ private boolean eval(Combination c, String exp) {
+ return c.evalGroovyExpression(axes, exp);
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixConfigurationSorterTest.java b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixConfigurationSorterTest.java
new file mode 100644
index 0000000..ef78a58
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixConfigurationSorterTest.java
@@ -0,0 +1,48 @@
+package hudson.matrix;
+
+import hudson.model.Item;
+import hudson.util.FormValidation;
+
+import org.jvnet.hudson.test.HudsonTestCase;
+import org.jvnet.hudson.test.TestExtension;
+import org.kohsuke.stapler.DataBoundConstructor;
+
+/**
+ * @author Kohsuke Kawaguchi
+ */
+public class MatrixConfigurationSorterTest extends HudsonTestCase {
+ public void testConfigRoundtrip() throws Exception {
+ MatrixProject p = createMatrixProject();
+ configRoundtrip((Item)p);
+ assertEqualDataBoundBeans(new NoopMatrixConfigurationSorter(),p.getSorter());
+
+ SorterImpl before = new SorterImpl();
+ p.setSorter(before);
+ p.setRunSequentially(true);
+ configRoundtrip((Item)p);
+ Object after = p.getSorter();
+ assertNotSame(before,after);
+ assertSame(before.getClass(),after.getClass());
+ }
+
+ public static class SorterImpl extends MatrixConfigurationSorter {
+ @DataBoundConstructor
+ public SorterImpl() {}
+
+ @Override
+ public void validate(MatrixProject p) throws FormValidation {
+ }
+
+ public int compare(MatrixConfiguration o1, MatrixConfiguration o2) {
+ return o1.getDisplayName().compareTo(o2.getDisplayName());
+ }
+
+ @TestExtension
+ public static class DescriptorImpl extends MatrixConfigurationSorterDescriptor {
+ @Override
+ public String getDisplayName() {
+ return "Test Sorter";
+ }
+ }
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixProjectDependencyTest.java b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixProjectDependencyTest.java
new file mode 100644
index 0000000..750cff7
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixProjectDependencyTest.java
@@ -0,0 +1,41 @@
+package hudson.matrix;
+
+import java.util.List;
+
+import org.jvnet.hudson.test.HudsonTestCase;
+
+import hudson.model.AbstractProject;
+import hudson.model.FreeStyleBuild;
+import hudson.model.FreeStyleProject;
+import hudson.model.Result;
+import hudson.tasks.BuildTrigger;
+import hudson.util.RunList;
+
+/**
+ * @author Stefan Wolf
+ */
+public class MatrixProjectDependencyTest extends HudsonTestCase {
+
+ /**
+ * Checks if the MatrixProject adds and Triggers downstream Projects via
+ * the DependencyGraph
+ */
+ public void testMatrixProjectTriggersDependencies() throws Exception {
+ MatrixProject matrixProject = createMatrixProject();
+ FreeStyleProject freestyleProject = createFreeStyleProject();
+ matrixProject.getPublishersList().add(new BuildTrigger(freestyleProject.getName(), false));
+
+ jenkins.rebuildDependencyGraph();
+
+ buildAndAssertSuccess(matrixProject);
+ waitUntilNoActivity();
+
+ RunList<FreeStyleBuild> builds = freestyleProject.getBuilds();
+ assertEquals("There should only be one FreestyleBuild", 1, builds.size());
+ FreeStyleBuild build = builds.iterator().next();
+ assertEquals(Result.SUCCESS, build.getResult());
+ List<AbstractProject> downstream = jenkins.getDependencyGraph().getDownstream(matrixProject);
+ assertTrue(downstream.contains(freestyleProject));
+ }
+
+}
diff --git a/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixRunTest.java b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixRunTest.java
new file mode 100644
index 0000000..32dae70
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixRunTest.java
@@ -0,0 +1,55 @@
+/*
+ * The MIT License
+ *
+ * Copyright 2014 Jesse Glick.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package hudson.matrix;
+
+import hudson.model.Run;
+import java.io.InputStream;
+import jenkins.model.CauseOfInterruption;
+import jenkins.model.InterruptedBuildAction;
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.jvnet.hudson.test.Bug;
+
+public class MatrixRunTest {
+
+ /**
+ * Unmarshall a matrix build.xml result.
+ */
+ @Bug(10903)
+ @Test public void unmarshalRunMatrix() {
+ InputStream is = MatrixRunTest.class.getResourceAsStream("runMatrix.xml");
+ MatrixRun result = (MatrixRun) Run.XSTREAM.fromXML(is);
+ assertNotNull(result);
+ assertNotNull(result.getPersistentActions());
+ assertEquals(2, result.getPersistentActions().size());
+ InterruptedBuildAction action = (InterruptedBuildAction) result.getPersistentActions().get(1);
+ assertNotNull(action.getCauses());
+ assertEquals(1, action.getCauses().size());
+ CauseOfInterruption.UserInterruption cause =
+ (CauseOfInterruption.UserInterruption) action.getCauses().get(0);
+ assertNotNull(cause);
+ }
+
+}
diff --git a/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixTest.java b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixTest.java
new file mode 100644
index 0000000..369898c
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/java/hudson/matrix/MatrixTest.java
@@ -0,0 +1,76 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010-2011, Alan Harder
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package hudson.matrix;
+
+import hudson.model.Item;
+import hudson.security.AuthorizationMatrixProperty;
+import hudson.security.ProjectMatrixAuthorizationStrategy;
+import java.util.Collections;
+import org.acegisecurity.context.SecurityContextHolder;
+import com.gargoylesoftware.htmlunit.xml.XmlPage;
+import org.jvnet.hudson.test.HudsonTestCase;
+import org.jvnet.hudson.test.Bug;
+
+/**
+ * @author Alan Harder
+ */
+public class MatrixTest extends HudsonTestCase {
+
+ /**
+ * Test that spaces are encoded as %20 for project name, axis name and axis value.
+ */
+ public void testSpaceInUrl() {
+ MatrixProject mp = new MatrixProject("matrix test");
+ MatrixConfiguration mc = new MatrixConfiguration(mp, Combination.fromString("foo bar=baz bat"));
+ assertEquals("job/matrix%20test/", mp.getUrl());
+ assertEquals("job/matrix%20test/foo%20bar=baz%20bat/", mc.getUrl());
+ }
+
+ /**
+ * Test that project level permissions apply to child configurations as well.
+ */
+ @Bug(9293)
+ public void testConfigurationACL() throws Exception {
+ jenkins.setAuthorizationStrategy(new ProjectMatrixAuthorizationStrategy());
+ MatrixProject mp = createMatrixProject();
+ mp.setAxes(new AxisList(new Axis("foo", "a", "b")));
+ MatrixConfiguration mc = mp.getItem("foo=a");
+ assertNotNull(mc);
+ SecurityContextHolder.clearContext();
+ assertFalse(mc.getACL().hasPermission(Item.READ));
+ mp.addProperty(new AuthorizationMatrixProperty(
+ Collections.singletonMap(Item.READ, Collections.singleton("anonymous"))));
+ // Project-level permission should apply to single configuration too:
+ assertTrue(mc.getACL().hasPermission(Item.READ));
+ }
+
+ public void testApi() throws Exception {
+ MatrixProject project = createMatrixProject();
+ project.setAxes(new AxisList(
+ new Axis("FOO", "abc", "def"),
+ new Axis("BAR", "uvw", "xyz")));
+ XmlPage xml = new WebClient().goToXml(project.getUrl() + "api/xml");
+ assertEquals(4, xml.getByXPath("//matrixProject/activeConfiguration").size());
+ }
+}
diff --git a/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/MatrixProjectTest/testUpgrade/config.xml b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/MatrixProjectTest/testUpgrade/config.xml
new file mode 100644
index 0000000..5b53ede
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/MatrixProjectTest/testUpgrade/config.xml
@@ -0,0 +1 @@
+<hudson/>
diff --git a/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/MatrixProjectTest/testUpgrade/jobs/x/config.xml b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/MatrixProjectTest/testUpgrade/jobs/x/config.xml
new file mode 100644
index 0000000..5a6966d
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/MatrixProjectTest/testUpgrade/jobs/x/config.xml
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<matrix-project>
+ <actions/>
+ <description></description>
+ <keepDependencies>false</keepDependencies>
+ <properties/>
+ <scm class="hudson.scm.NullSCM"/>
+ <canRoam>true</canRoam>
+ <disabled>false</disabled>
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
+ <triggers class="vector"/>
+ <concurrentBuild>false</concurrentBuild>
+ <axes/>
+ <builders/>
+ <publishers/>
+ <buildWrappers/>
+ <!-- somehow not here: <runSequentially>false</runSequentially> -->
+</matrix-project>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/echo-property.pom b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/echo-property.pom
new file mode 100644
index 0000000..a189489
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/echo-property.pom
@@ -0,0 +1,70 @@
+<!--
+The MIT License
+
+Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<!--
+ POM that echos back a few properties. Used by MatrixProjectTest
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>test</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.jvnet.maven-antrun-extended-plugin</groupId>
+ <artifactId>maven-antrun-extended-plugin</artifactId>
+ <version>1.40</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <configuration>
+ <tasks>
+ <echo>assertion ${prop}=${db}</echo>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>m.g.o-public</id>
+ <url>http://maven.glassfish.org/content/groups/public/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+
+</project>
\ No newline at end of file
diff --git a/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/runMatrix.xml b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/runMatrix.xml
new file mode 100644
index 0000000..37513c8
--- /dev/null
+++ b/plugins/matrix-project-plugin/src/test/resources/hudson/matrix/runMatrix.xml
@@ -0,0 +1,39 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<matrix-run>
+ <actions>
+ <hudson.model.CauseAction>
+ <causes>
+ <hudson.model.Cause_-UpstreamCause>
+ <upstreamProject>MatrixProject</upstreamProject>
+ <upstreamUrl>job/MatrixProject/</upstreamUrl>
+ <upstreamBuild>8</upstreamBuild>
+ <upstreamCauses>
+ <hudson.model.Cause_-UserCause>
+ <authenticationName>auser</authenticationName>
+ </hudson.model.Cause_-UserCause>
+ </upstreamCauses>
+ </hudson.model.Cause_-UpstreamCause>
+ </causes>
+ </hudson.model.CauseAction>
+ <jenkins.model.InterruptedBuildAction>
+ <causes class="com.google.common.collect.SingletonImmutableList" resolves-to="com.google.common.collect.ImmutableList$SerializedForm">
+ <elements>
+ <jenkins.model.CauseOfInterruption_-UserInterruption>
+ <user>auser</user>
+ </jenkins.model.CauseOfInterruption_-UserInterruption>
+ </elements>
+ </causes>
+ </jenkins.model.InterruptedBuildAction>
+ </actions>
+ <number>8</number>
+ <result>ABORTED</result>
+ <duration>3253844</duration>
+ <charset>windows-1252</charset>
+ <keepLog>false</keepLog>
+ <builtOn>amachine</builtOn>
+ <workspace>C:\jenkins\slave\workspace\MatrixProject\blah\blah\blah</workspace>
+ <hudsonVersion>1.427</hudsonVersion>
+ <culprits>
+ <string>auser</string>
+ </culprits>
+</matrix-run>
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jenkins.git
More information about the pkg-java-commits
mailing list