提交 841511c2 编写于 作者: J Jesse Glick

Merge branch 'master' of github.com:jenkinsci/jenkins

#Tue Mar 05 22:28:46 CET 2013
CLI.Usage=Jenkins Kommandozeilenschnittstelle (Jenkins CLI)\n\
Verwendung: java -jar jenkins-cli.jar [-s URL] command [opts...] args...\n\
Optionen:\n\
\ -s URL : URL des Hudson-Servers (Wert der Umgebungsvariable JENKINS_URL ist der Vorgabewert)\n\
-s URL : URL des Hudson-Servers (Wert der Umgebungsvariable JENKINS_URL ist der Vorgabewert)\n\
-i KEY : Datei mit privatem SSH-Schlssel zur Authentisierung\n\
-p HOST\:PORT : HTTP-Proxy-Host und -Port fr HTTPS-Proxy-Tunnel. Siehe http://jenkins-ci.org/https-proxy-tunnel\n\
-noCertificateCheck : berspringt die Zertifikatsprfung bei HTTPS. Bitte mit Vorsicht einsetzen.\n\
\n\
Die verfügbaren Kommandos hängen vom kontaktierten Server ab. Verwenden Sie das Kommando \
'help', um eine Liste aller verfügbaren Kommandos anzuzeigen.
Die verfgbaren Kommandos hngen vom kontaktierten Server ab. Verwenden Sie das Kommando help, um eine Liste aller verfgbaren Kommandos anzuzeigen.
CLI.NoURL=Weder die Option -s noch eine Umgebungsvariable JENKINS_URL wurde spezifiziert.
CLI.VersionMismatch=Versionskonflikt: Diese Version von Jenkins CLI ist nicht mit dem Hudson-Server kompatibel.
CLI.NoSuchFileExists=Diese Datei existiert nicht {0}
CLI.VersionMismatch=Versionskonflikt: Diese Version von Jenkins CLI ist nicht mit dem kontaktierten Jenkins-Server kompatibel.
......@@ -42,7 +42,7 @@ THE SOFTWARE.
<properties>
<staplerFork>true</staplerFork>
<stapler.version>1.204</stapler.version>
<stapler.version>1.206</stapler.version>
<spring.version>2.5.6.SEC03</spring.version>
</properties>
......
......@@ -34,6 +34,7 @@ import hudson.model.BuildListener;
import hudson.model.Environment;
import hudson.model.JobProperty;
import hudson.model.Run;
import hudson.model.Run.RunnerAbortedException;
import hudson.model.TaskListener;
import jenkins.model.Jenkins;
import hudson.scm.SCM;
......@@ -86,6 +87,9 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
* The listener for this build. This can be used to produce log messages, for example,
* which becomes a part of the "console output" of this build. But when this method runs,
* the build is considered completed, so its status cannot be changed anymore.
* @throws RuntimeException
* Any exception/error thrown from this method will be swallowed to prevent broken listeners
* from breaking all the builds.
*/
public void onCompleted(R r, @Nonnull TaskListener listener) {}
......@@ -95,6 +99,10 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
* <p>
* At this point, all the records related to a build is written down to the disk. As such,
* {@link TaskListener} is no longer available. This happens later than {@link #onCompleted(Run, TaskListener)}.
*
* @throws RuntimeException
* Any exception/error thrown from this method will be swallowed to prevent broken listeners
* from breaking all the builds.
*/
public void onFinalized(R r) {}
......@@ -107,6 +115,9 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
* @param listener
* The listener for this build. This can be used to produce log messages, for example,
* which becomes a part of the "console output" of this build.
* @throws RuntimeException
* Any exception/error thrown from this method will be swallowed to prevent broken listeners
* from breaking all the builds.
*/
public void onStarted(R r, TaskListener listener) {}
......@@ -134,9 +145,12 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
* @throws IOException
* terminates the build abnormally. Hudson will handle the exception
* and reports a nice error message.
* @throws RunnerAbortedException
* If a fatal error is detected and the callee handled it gracefully, throw this exception
* to suppress a stack trace by the receiver.
* @since 1.410
*/
public Environment setUpEnvironment( AbstractBuild build, Launcher launcher, BuildListener listener ) throws IOException, InterruptedException {
public Environment setUpEnvironment( AbstractBuild build, Launcher launcher, BuildListener listener ) throws IOException, InterruptedException, RunnerAbortedException {
return new Environment() {};
}
......@@ -144,6 +158,9 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
* Called right before a build is going to be deleted.
*
* @param r The build.
* @throws RuntimeException
* Any exception/error thrown from this method will be swallowed to prevent broken listeners
* from breaking all the builds.
*/
public void onDeleted(R r) {}
......@@ -194,7 +211,7 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
if(l.targetType.isInstance(r))
try {
l.onStarted(r,listener);
} catch (Exception e) {
} catch (Throwable e) {
report(e);
}
}
......@@ -211,7 +228,7 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
if(l.targetType.isInstance(r))
try {
l.onFinalized(r);
} catch (Exception e) {
} catch (Throwable e) {
report(e);
}
}
......@@ -225,7 +242,7 @@ public abstract class RunListener<R extends Run> implements ExtensionPoint {
if(l.targetType.isInstance(r))
try {
l.onDeleted(r);
} catch (Exception e) {
} catch (Throwable e) {
report(e);
}
}
......
# The MIT License
#
# Copyright (c) 2004-2012, 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.
PluginCycles=Die folgenden Plugins sind deaktiviert wegen zyklischen Abhängigkeiten. Höchstwahrscheinlich läßt sich dies durch Aktualisierung dieser Plugins auf eine neuere Version beheben.
\ No newline at end of file
# The MIT License
#
# Copyright (c) 2004-2012, 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.
RequiredPluginUpdates=Die folgenden Plugins müssen aktualisiert werden:
\ No newline at end of file
......@@ -28,9 +28,7 @@ Upload=Hochladen
lastUpdated=Letzte Datenaktualisierung des Update-Centers: Vor {0}
Check\ now=Jetzt aktualisieren
uploadtext=Geben Sie hier den Pfad zu einer lokalen Plugin-Datei (Dateiendung .hpi) an, die installiert werden soll.
Server=Server
Port=Port
User\ name=Benutzername
Password=Kennwort
Update\ Site=Seite für Aktualisierung
URL=URL
\ No newline at end of file
Update\ Site=Aktualisierungsserver
URL=URL
Other\ Sites=Andere Aktualisierungsserver
Update\ Center=Update-Center
\ No newline at end of file
Checking\ Updates...=Suche Updates...
Checking\ Updates...=Suche nach Updates...
Go\ back\ to\ update\ center=Zurück zum Update-Center
Done=Fertig
Update\ Center=Update-Center
......@@ -21,7 +21,6 @@
# THE SOFTWARE.
No\ plugins\ installed.=Keine Plugins installiert.
New\ plugins\ will\ take\ effect\ once\ you\ restart\ Jenkins=Neue Plugins werden erst nach einem Neustart von Jenkins aktiviert.
Changes\ will\ take\ effect\ when\ you\ restart\ Jenkins=Änderungen treten nach einem Neustart von Jenkins in Kraft.
Uncheck\ to\ disable\ the\ plugin=Zum Deaktivieren des Plugins Markierung löschen
Enabled=Aktiviert
......@@ -33,3 +32,6 @@ downgradeTo={0} wiederherstellen
Pinned=Gesperrt
Unpin=Entsperren
wiki.url=http://wiki.jenkins-ci.org/display/JENKINS/Pinned+Plugins
Uninstall=Deinstallieren
Uninstallation\ pending=Zur Deinstallation vorgemerkt
Update\ Center=Update-Center
......@@ -22,4 +22,4 @@
Back\ to\ Dashboard=Zurück zur Übersicht
Manage\ Jenkins=Jenkins verwalten
Update\ Center=Aktualisierungen
Update\ Center=Update-Center
......@@ -22,3 +22,4 @@
Add...=Hinzufügen...
Remove=Entfernen
Update\ Center=Update-Center
......@@ -20,17 +20,21 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Check\ to\ install\ the\ plugin=Zum Aktualisieren hier anwählen
Check\ to\ install\ the\ plugin=Zum Aktualisieren anwählen
Install=Installieren
Name=Name
Version=Version
No\ updates=Keine Aktualisierungen
Inactive=Deaktiviert
Installed=Installiert
Filter=Filter
Update\ Center=Update-Center
Install\ without\ restart=Installieren ohne Neustart
Download\ now\ and\ install\ after\ restart=Jetzt herunterladen und bei Neustart installieren
compatWarning=\
Warnung: Die neue Version ist nicht kompatibel mit der momentan installierten Version. \
Jobs, welche dieses Plugin verwenden, müssen gegebenenfalls neu konfiguriert werden.
coreWarning=\
Warnung: Dieses Plugin wurde für Jenkins {0} oder neuer entwickelt. Es kann mit Ihrer \
Jenkins-Installation funktionieren... oder auch nicht.
Click\ this\ heading\ to\ sort\ by\ category=Klicke hier, um nach der Kategorie zu sortieren
\ No newline at end of file
Click\ this\ heading\ to\ sort\ by\ category=Hier klicken, um nach der Kategorie zu sortieren
\ No newline at end of file
......@@ -20,8 +20,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
JDK\ to\ be\ used\ for\ this\ project=JDK, das f\u00FCr dieses Projekt verwendet wird
JDK\ to\ be\ used\ for\ this\ project=JDK, das für dieses Projekt verwendet wird
default.value=(Vorgabewert)
Advanced\ Project\ Options=Erweiterte Projekteinstellungen
Restrict\ where\ this\ project\ can\ be\ run=Beschr\u00E4nke wo dieses Projekt ausgef\u00FChrt werden darf
Restrict\ where\ this\ project\ can\ be\ run=Beschränke, wo dieses Projekt ausgeführt werden darf
Label\ Expression=Label-Ausdruck
# 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.
DISABLE\ AUTO\ REFRESH=AUTO-AKTUALISIERUNG AUSSCHALTEN
ENABLE\ AUTO\ REFRESH=AUTO-AKTUALISIERUNG EINSCHALTEN
......@@ -40,6 +40,7 @@ import hudson.ExtensionPoint;
import hudson.model.Describable;
import hudson.model.Descriptor;
import jenkins.model.Jenkins;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.jvnet.hudson.test.HudsonTestCase;
import org.kohsuke.stapler.DataBoundConstructor;
......@@ -79,9 +80,9 @@ public class RepeatableTest extends HudsonTestCase {
public void testSimple() throws Exception {
doTestSimple();
assertEquals("[{\"bool\":false,\"txt\":\"value one\"},"
assertEqualsJsonArray("[{\"bool\":false,\"txt\":\"value one\"},"
+ "{\"bool\":false,\"txt\":\"value two\"},{\"bool\":true,\"txt\":\"value three\"}]",
formData.get("foos").toString());
formData.get("foos"));
}
// ========================================================================
......@@ -102,10 +103,10 @@ public class RepeatableTest extends HudsonTestCase {
public void testSimple_ExistingData() throws Exception {
addData();
doTestSimple();
assertEquals("[{\"bool\":true,\"txt\":\"existing one\"},"
assertEqualsJsonArray("[{\"bool\":true,\"txt\":\"existing one\"},"
+ "{\"bool\":false,\"txt\":\"existing two\"},{\"bool\":true,\"txt\":\"value one\"},"
+ "{\"bool\":false,\"txt\":\"value two\"},{\"bool\":false,\"txt\":\"value three\"}]",
formData.get("foos").toString());
formData.get("foos"));
}
public void testMinimum() throws Exception {
......@@ -118,9 +119,9 @@ public class RepeatableTest extends HudsonTestCase {
try { f.getInputByValue(""); fail("?"); } catch (ElementNotFoundException expected) { }
f.getInputsByName("bool").get(2).click();
submit(f);
assertEquals("[{\"bool\":false,\"txt\":\"value one\"},"
assertEqualsJsonArray("[{\"bool\":false,\"txt\":\"value one\"},"
+ "{\"bool\":false,\"txt\":\"value two\"},{\"bool\":true,\"txt\":\"value three\"}]",
formData.get("foos").toString());
formData.get("foos"));
}
public void testMinimum_ExistingData() throws Exception {
......@@ -132,9 +133,9 @@ public class RepeatableTest extends HudsonTestCase {
try { f.getInputByValue(""); fail("?"); } catch (ElementNotFoundException expected) { }
f.getInputsByName("bool").get(1).click();
submit(f);
assertEquals("[{\"bool\":true,\"txt\":\"existing one\"},"
assertEqualsJsonArray("[{\"bool\":true,\"txt\":\"existing one\"},"
+ "{\"bool\":true,\"txt\":\"existing two\"},{\"bool\":false,\"txt\":\"new one\"}]",
formData.get("foos").toString());
formData.get("foos"));
}
public void testNoData() throws Exception {
......@@ -174,8 +175,8 @@ public class RepeatableTest extends HudsonTestCase {
addDefaults();
gotoAndSubmitConfig(viewName);
assertNotNull(formData.get("list"));
assertEquals("[{\"bool\":true,\"txt\":\"default one\"},{\"bool\":false,\"txt\":\"default two\"}]",
formData.get("list").toString());
assertEqualsJsonArray("[{\"bool\":true,\"txt\":\"default one\"},{\"bool\":false,\"txt\":\"default two\"}]",
formData.get("list"));
}
private void assertDefaultsIgnoredIfHaveData(final String viewName) throws Exception {
......@@ -183,8 +184,8 @@ public class RepeatableTest extends HudsonTestCase {
addDefaults();
gotoAndSubmitConfig(viewName);
assertNotNull(formData.get("list"));
assertEquals("[{\"bool\":true,\"txt\":\"existing one\"},{\"bool\":false,\"txt\":\"existing two\"}]",
formData.get("list").toString());
assertEqualsJsonArray("[{\"bool\":true,\"txt\":\"existing one\"},{\"bool\":false,\"txt\":\"existing two\"}]",
formData.get("list"));
}
private void gotoAndSubmitConfig(final String viewName) throws Exception {
......@@ -207,9 +208,9 @@ public class RepeatableTest extends HudsonTestCase {
f.getInputByValue("").setValueAttribute("txt two");
f.getElementsByAttribute("INPUT", "type", "radio").get(3).click();
submit(f);
assertEquals("[{\"radio\":\"two\",\"txt\":\"txt one\"},"
+ "{\"radio\":\"two\",\"txt\":\"txt two\"}]",
formData.get("foos").toString());
assertEqualsJsonArray("[{\"radio\":\"two\",\"txt\":\"txt one\"},"
+ "{\"radio\":\"two\",\"txt\":\"txt two\"}]",
formData.get("foos"));
}
public static class FooRadio {
......@@ -227,9 +228,9 @@ public class RepeatableTest extends HudsonTestCase {
f.getInputByValue("").setValueAttribute("txt 4");
f.getElementsByAttribute("INPUT", "type", "radio").get(7).click();
submit(f);
assertEquals("[{\"radio\":\"one\",\"txt\":\"1\"},{\"radio\":\"two\",\"txt\":\"2\"},"
assertEqualsJsonArray("[{\"radio\":\"one\",\"txt\":\"1\"},{\"radio\":\"two\",\"txt\":\"2\"},"
+ "{\"radio\":\"one\",\"txt\":\"three\"},{\"radio\":\"two\",\"txt\":\"txt 4\"}]",
formData.get("foos").toString());
formData.get("foos"));
}
// hudson-behavior uniquifies radiobutton names so the browser properly handles each group,
......@@ -247,9 +248,9 @@ public class RepeatableTest extends HudsonTestCase {
f.getElementsByAttribute("INPUT", "type", "radio").get(2).click();
f.getInputByValue("").setValueAttribute("avalue two");
submit(f);
assertEquals("[{\"radio\":{\"b\":\"bvalue\",\"value\":\"two\"},\"txt\":\"txt one\"},"
assertEqualsJsonArray("[{\"radio\":{\"b\":\"bvalue\",\"value\":\"two\"},\"txt\":\"txt one\"},"
+ "{\"radio\":{\"a\":\"avalue two\",\"value\":\"one\"},\"txt\":\"txt two\"}]",
formData.get("foos").toString());
formData.get("foos"));
}
// ========================================================================
......@@ -394,9 +395,13 @@ public class RepeatableTest extends HudsonTestCase {
throw e;
}
submit(f);
assertEquals("[{\"moo\":{\"inner\":\"inone\"},\"outer\":\"two\"},"
+ "{\"moo\":[{\"inner\":\"intwo\"},{\"inner\":\"inone\"}],\"outer\":\"one\"}]",
formData.get("items").toString());
assertEqualsJsonArray("[{\"moo\":{\"inner\":\"inone\"},\"outer\":\"two\"},"
+ "{\"moo\":[{\"inner\":\"intwo\"},{\"inner\":\"inone\"}],\"outer\":\"one\"}]",
formData.get("items"));
}
private void assertEqualsJsonArray(String golden, Object jsonArray) {
assertEquals(JSONArray.fromObject(golden),jsonArray);
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册