diff --git a/cli/pom.xml b/cli/pom.xml
index 8ba4ce91c6..f4d76304d5 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.mainpom
- 1.630-SNAPSHOT
+ 1.633-SNAPSHOTcli
diff --git a/core/pom.xml b/core/pom.xml
index 82db02b555..739eb80c82 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.mainpom
- 1.630-SNAPSHOT
+ 1.633-SNAPSHOTjenkins-core
@@ -200,7 +200,7 @@ THE SOFTWARE.
org.jenkins-cibytecode-compatibility-transformer
- 1.5
+ 1.6.2org.jenkins-ci
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message.properties
similarity index 95%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message.properties
index d303a63fc3..c2f487f7b5 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message.properties
@@ -21,7 +21,7 @@
# THE SOFTWARE.
NewVersionAvailable=New version of Jenkins ({0}) is available for download \
- (changelog).
+ (changelog).
UpgradeComplete=Upgrade to Jenkins {0} is complete, awaiting restart.
UpgradeCompleteRestartNotSupported=Upgrade to Jenkins {0} is complete, awaiting restart.
UpgradeProgress=Upgrade to Jenkins {0} is in progress or failed.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_cs.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_cs.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_cs.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_cs.properties
index 0627dbf1e4..691b46b7f0 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_cs.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_cs.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Nov\u00E1 verze Jenkins-u ({0}) je k dispozici ke sta\u017Een\u00ED (changelog).
+NewVersionAvailable=Nov\u00E1 verze Jenkins-u ({0}) je k dispozici ke sta\u017Een\u00ED (changelog).
Or\ Upgrade\ Automatically=Nebo Upgradovat Automaticky
UpgradeComplete=Upgrade na Jenkinse {0} je hotov, \u010Dek\u00E1 na restart.
UpgradeCompleteRestartNotSupported=Upgrade na Jenkinse {0} je hotov, \u010Dek\u00E1 na restart.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_da.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_da.properties
similarity index 96%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_da.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_da.properties
index 37285e900f..8b5776e534 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_da.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_da.properties
@@ -25,4 +25,4 @@ UpgradeCompleteRestartNotSupported=Opdatering til Jenkins {0} er fuldf\u00f8rt,
UpgradeProgress=Opdatering til Jenkins {0} er i gang eller er fejlet.
Or\ Upgrade\ Automatically=Eller opdater automatisk
NewVersionAvailable=En ny version af Jenkins ({0}) er tilg\u00e6ngelig til hentning \
- (changelog).
+ (changelog).
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_de.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_de.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_de.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_de.properties
index 5eb9dc4079..344e457118 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_de.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_de.properties
@@ -23,5 +23,5 @@
UpgradeComplete=Aktualisierung auf Jenkins {0} abgeschlossen. Neustart von Jenkins erforderlich.
UpgradeCompleteRestartNotSupported=Aktualisierung auf Jenkins {0} abgeschlossen. Neustart von Jenkins erforderlich.
UpgradeProgress=Aktualisierung auf Jenkins {0} in Arbeit oder fehlgeschlagen.
-NewVersionAvailable=Eine neue Version von Jenkins ({0}) kann hier heruntergeladen werden (Was ist neu?).
+NewVersionAvailable=Eine neue Version von Jenkins ({0}) kann hier heruntergeladen werden (Was ist neu?).
Or\ Upgrade\ Automatically=Automatisch aktualisieren
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_es.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_es.properties
similarity index 66%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_es.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_es.properties
index f3bd1ba6f4..6016d4d17c 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_es.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_es.properties
@@ -20,8 +20,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Hay una nueva versión de Jenkins disponible ({0}). descargar (listado de cambios).
-Or\ Upgrade\ Automatically=O actualizar automáticamente
-UpgradeComplete=La actualización a Jenkins {0} se ha completado, esperando para reiniciar.
-UpgradeCompleteRestartNotSupported=La actualización a Jenkins {0} se ha completado, esperando para reiniciar.
-UpgradeProgress=La actualización a Jenkins {0} está en ejecución o ha fallado.
+NewVersionAvailable=Hay una nueva versi\u00f3n de Jenkins disponible ({0}). descargar (listado de cambios).
+Or\ Upgrade\ Automatically=O actualizar autom\u00e1ticamente
+UpgradeComplete=La actualizaci\u00f3n a Jenkins {0} se ha completado, esperando para reiniciar.
+UpgradeCompleteRestartNotSupported=La actualizaci\u00f3n a Jenkins {0} se ha completado, esperando para reiniciar.
+UpgradeProgress=La actualizaci\u00f3n a Jenkins {0} est\u00e1 en ejecuci\u00f3n o ha fallado.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_et.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_et.properties
similarity index 52%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_et.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_et.properties
index 7cd8b01f2a..1df6054b14 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_et.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_et.properties
@@ -1,3 +1,3 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Jenkinsi uus versioon ({0}) on saadaval allalaadimiseks (muudatuste nimekiri).
+NewVersionAvailable=Jenkinsi uus versioon ({0}) on saadaval allalaadimiseks (muudatuste nimekiri).
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fi.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fi.properties
similarity index 58%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fi.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fi.properties
index 4822e11895..8243a6f685 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fi.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fi.properties
@@ -1,3 +1,3 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Uusi Jenkinsin versio ({0}) on saatavana (muutosloki).
+NewVersionAvailable=Uusi Jenkinsin versio ({0}) on saatavana (muutosloki).
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fr.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fr.properties
similarity index 94%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fr.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fr.properties
index f009876578..0dbdae69d7 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fr.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_fr.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Une nouvelle version de Jenkins ({0}) est disponible (changelog).
+NewVersionAvailable=Une nouvelle version de Jenkins ({0}) est disponible (changelog).
Or\ Upgrade\ Automatically=Ou mettre \u00E0 jour automatiquement
UpgradeProgress=Mise \u00E0 jour vers Jenkins {0} est en cours ou en \u00E9chec.
UpgradeComplete=La mise \u00E0 jour de Jenkins en {0} est termin\u00E9e, en attente de red\u00E9marrage.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_hu.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_hu.properties
similarity index 90%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_hu.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_hu.properties
index c28160d659..19587285ca 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_hu.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_hu.properties
@@ -20,5 +20,5 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=A Jenkins \u00FAj verzi\u00F3ja ({0}) el\u00E9rhet\u0151 let\u00F6lt\u00E9sre (v\u00E1ltoz\u00E1sok).
+NewVersionAvailable=A Jenkins \u00FAj verzi\u00F3ja ({0}) el\u00E9rhet\u0151 let\u00F6lt\u00E9sre (v\u00E1ltoz\u00E1sok).
Or\ Upgrade\ Automatically=Vagy friss\u00EDtsen automatikusan
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties
similarity index 64%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties
index aa157c3f69..c28903b2dd 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_id.properties
@@ -1,4 +1,4 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Versi baru Jenkins ({0}) tersedia untuk diunduh (catatan perubahan).
+NewVersionAvailable=Versi baru Jenkins ({0}) tersedia untuk diunduh (catatan perubahan).
Or\ Upgrade\ Automatically=Atau Perbarui Secara Otomatis
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties
index f6538f878e..7378e405c7 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_it.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=C''\u00E8 una nuova versione di Jenkins ({0}) disponibile per il download (changelog).
+NewVersionAvailable=C''\u00E8 una nuova versione di Jenkins ({0}) disponibile per il download (changelog).
Or\ Upgrade\ Automatically=Oppure aggiorna automaticamente
UpgradeComplete=Aggiornamento a Jenkins {0} completato, in attesa di riavvio.
UpgradeCompleteRestartNotSupported=Aggiornamento a Jenkins {0} completato, in attesa di riavvio.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ja.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ja.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ja.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ja.properties
index 91ea7ae49a..5738b71b76 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ja.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ja.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Jenkins\u306E\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3({0})\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3067\u304D\u307E\u3059 (\u5909\u66F4\u5C65\u6B74)\u3002
+NewVersionAvailable=Jenkins\u306E\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3({0})\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3067\u304D\u307E\u3059 (\u5909\u66F4\u5C65\u6B74)\u3002
Or\ Upgrade\ Automatically=\u81EA\u52D5\u3067\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9
UpgradeComplete=Jenkins {0} \u3078\u306E\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u306F\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002\u518D\u8D77\u52D5\u5F85\u3061\u3067\u3059\u3002
UpgradeProgress=Jenkins {0}\u3078\u306E\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u306F\u5B9F\u884C\u4E2D\u304B\u3001\u5931\u6557\u3057\u307E\u3057\u305F\u3002
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ko.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ko.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ko.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ko.properties
index 3e54bb7c12..f5f6a77276 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ko.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ko.properties
@@ -20,5 +20,5 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Jenkins \uC2E0\uADDC\uBC84\uC804({0})\uC744 \uC5EC\uAE30\uC11C \uBC1B\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.(\uBCC0\uACBD\uC0AC\uD56D).
+NewVersionAvailable=Jenkins \uC2E0\uADDC\uBC84\uC804({0})\uC744 \uC5EC\uAE30\uC11C \uBC1B\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.(\uBCC0\uACBD\uC0AC\uD56D).
Or\ Upgrade\ Automatically=\uB610\uB294 \uC790\uB3D9 \uC5C5\uADF8\uB808\uC774\uB4DC
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lt.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lt.properties
similarity index 62%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lt.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lt.properties
index b9995fe88b..2a16d979f6 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lt.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lt.properties
@@ -1,4 +1,4 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Galima parsisi\u0173sti nauj\u0105 ({0}) Jenkins versij\u0105. (pakeitimai).
+NewVersionAvailable=Galima parsisi\u0173sti nauj\u0105 ({0}) Jenkins versij\u0105. (pakeitimai).
Or\ Upgrade\ Automatically=Parsi\u0173sti automati\u0161kai
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lv.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lv.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lv.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lv.properties
index cf14b56b6f..9193a28385 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lv.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_lv.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Jauna Jenkins ({0}) versija ir pieejama lejupl\u0101dei (izmai\u0146as).
+NewVersionAvailable=Jauna Jenkins ({0}) versija ir pieejama lejupl\u0101dei (izmai\u0146as).
Or\ Upgrade\ Automatically=Vai atjaunin\u0101t autom\u0101tiski
UpgradeComplete=Atjaunin\u0101s\u0101na uz Jenkins {0} ir pabeigta; gaidu p\u0101rstart\u0113\u0161anos.
UpgradeCompleteRestartNotSupported=Atjaunin\u0101s\u0101na uz Jenkins {0} ir pabeigta; gaidu p\u0101rstart\u0113\u0161anos.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nb_NO.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nb_NO.properties
similarity index 92%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nb_NO.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nb_NO.properties
index d86c6788e0..b15161b442 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nb_NO.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nb_NO.properties
@@ -20,4 +20,4 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=En ny versjon av Jenkins ({0}) er n\u00E5 tilgjengelig (Endringer).
+NewVersionAvailable=En ny versjon av Jenkins ({0}) er n\u00E5 tilgjengelig (Endringer).
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nl.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nl.properties
similarity index 93%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nl.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nl.properties
index d3a0df68e5..9c291b0fdd 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nl.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_nl.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Er is een nieuwere versie van Jenkins ({0}) beschikbaar. downloaden (changelog).
+NewVersionAvailable=Er is een nieuwere versie van Jenkins ({0}) beschikbaar. downloaden (changelog).
Or\ Upgrade\ Automatically=Of werk automatisch bij
UpgradeComplete=Upgrade naar Jenkins {0} is volledig; aan het wachten op herstart.
UpgradeCompleteRestartNotSupported=Upgrade naar Jenkins {0} is volledig; aan het wachten op herstart.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties
similarity index 74%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties
index d22c58b0cc..0ec4e8637b 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pl.properties
@@ -1,5 +1,5 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Nowa wersja Jenkinsa ({0}) jest dost\u0119pna do pobrania (changelog).
+NewVersionAvailable=Nowa wersja Jenkinsa ({0}) jest dost\u0119pna do pobrania (changelog).
Or\ Upgrade\ Automatically=Albo uaktualnij automatycznie
UpgradeProgress=Aktualizacja Jenkinsa do wersji {0} trwa lub nie powiod\u0142a si\u0119.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_BR.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_BR.properties
similarity index 96%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_BR.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_BR.properties
index 96e622fc3b..216eee44d9 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_BR.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_BR.properties
@@ -27,5 +27,5 @@ UpgradeCompleteRestartNotSupported=Atualiza\u00e7\u00e3o do Jenkins {0} completa
UpgradeProgress=Atualiza\u00e7\u00e3o para Jenkins {0} est\u00e1 em andamento ou falhou.
Or\ Upgrade\ Automatically=Ou fazer a atualiza\u00e7\u00e3o automaticamente.
# New version of Jenkins ({0}) is available for download \
-# (changelog).
+# (changelog).
NewVersionAvailable=Nova vers\u00e3o do Jenkins ({0}) est\u00e1 dispon\u00edvel em download
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_PT.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_PT.properties
similarity index 55%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_PT.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_PT.properties
index ad3dcdcaef..dd2d81456d 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_PT.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_pt_PT.properties
@@ -1,4 +1,4 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Uma nova vers\u00E3o do Jenkins ({0}) est\u00E1 dispon\u00EDvel para download (registo de altera\u00E7\u00F5es).
+NewVersionAvailable=Uma nova vers\u00E3o do Jenkins ({0}) est\u00E1 dispon\u00EDvel para download (registo de altera\u00E7\u00F5es).
Or\ Upgrade\ Automatically=Ou atualizar automaticamente
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ru.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ru.properties
similarity index 92%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ru.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ru.properties
index c3cd495635..97659c57c7 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ru.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_ru.properties
@@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=\u041D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F Jenkins ({0}) \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 (\u0441\u043F\u0438\u0441\u043E\u043A \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439).
+NewVersionAvailable=\u041D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F Jenkins ({0}) \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 (\u0441\u043F\u0438\u0441\u043E\u043A \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439).
Or\ Upgrade\ Automatically=\u0418\u043B\u0438 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438
UpgradeComplete=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0434\u043E Jenkins {0} \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E, \u043E\u0436\u0438\u0434\u0430\u0435\u0442 \u043F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438.
UpgradeCompleteRestartNotSupported=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0434\u043E Jenkins {0} \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E, \u043E\u0436\u0438\u0434\u0430\u0435\u0442 \u043F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sk.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sk.properties
similarity index 92%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sk.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sk.properties
index bca3d05fab..96543df586 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sk.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sk.properties
@@ -20,4 +20,4 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=Nov\u00E1 verzia Jenkins ({0}) je dostupn\u00E1 na stiahnutie (zoznam zmien).
+NewVersionAvailable=Nov\u00E1 verzia Jenkins ({0}) je dostupn\u00E1 na stiahnutie (zoznam zmien).
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sl.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sl.properties
similarity index 61%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sl.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sl.properties
index b69224ebd3..649104bcf5 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sl.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sl.properties
@@ -1,4 +1,4 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Nova razli\u010Dica Jenkins-a ({0}) je na voljo za prenos (seznam sprememb).
+NewVersionAvailable=Nova razli\u010Dica Jenkins-a ({0}) je na voljo za prenos (seznam sprememb).
Or\ Upgrade\ Automatically=ali posodobi samodejno
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sv_SE.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sv_SE.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sv_SE.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_sv_SE.properties
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_uk.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_uk.properties
similarity index 92%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_uk.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_uk.properties
index 3379d20367..625195c351 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_uk.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_uk.properties
@@ -20,5 +20,5 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-NewVersionAvailable=\u041D\u043E\u0432\u0430 \u0432\u0435\u0440\u0441\u0456\u044F \u0414\u0436\u0435\u043D\u043A\u0456\u043D\u0441 ({0}) \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0434\u043B\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F (\u0437\u043C\u0456\u043D\u0438).
+NewVersionAvailable=\u041D\u043E\u0432\u0430 \u0432\u0435\u0440\u0441\u0456\u044F \u0414\u0436\u0435\u043D\u043A\u0456\u043D\u0441 ({0}) \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0434\u043B\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F (\u0437\u043C\u0456\u043D\u0438).
Or\ Upgrade\ Automatically=\u0410\u0431\u043E \u043E\u043D\u043E\u0432\u0456\u0442\u044C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_CN.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_CN.properties
similarity index 77%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_CN.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_CN.properties
index 1ddf921908..0ef79b530b 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_CN.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_CN.properties
@@ -1,6 +1,6 @@
# This file is under the MIT License by authors
-NewVersionAvailable=Jenkins\u65B0\u7248\u672C ({0})\u53EF\u70B9\u51FB download (\u53D8\u66F4\u8BF4\u660E)\u4E0B\u8F7D\u3002
+NewVersionAvailable=Jenkins\u65B0\u7248\u672C ({0})\u53EF\u70B9\u51FB download (\u53D8\u66F4\u8BF4\u660E)\u4E0B\u8F7D\u3002
Or\ Upgrade\ Automatically=\u6216 \u81EA\u52A8\u5347\u7EA7\u7248\u672C
UpgradeComplete=Jenkins {0} \u7248\u672C\u5347\u7EA7\u5DF2\u5B8C\u6210,\u7B49\u5F85\u91CD\u542F\u4E2D.
UpgradeCompleteRestartNotSupported=Jenkins {0} \u7248\u672C\u5347\u7EA7\u5DF2\u5B8C\u6210,\u7B49\u5F85\u91CD\u542F\u4E2D.
diff --git a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_TW.properties b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_TW.properties
similarity index 92%
rename from core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_TW.properties
rename to core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_TW.properties
index 0423c94c73..76967e8ea1 100644
--- a/core/src/main/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_TW.properties
+++ b/core/src/filter/resources/hudson/model/UpdateCenter/CoreUpdateMonitor/message_zh_TW.properties
@@ -24,5 +24,5 @@
UpgradeComplete=Jenkins {0} \u5347\u7248\u5b8c\u6210\uff0c\u7b49\u5019\u91cd\u65b0\u555f\u52d5\u3002
UpgradeCompleteRestartNotSupported=Jenkins {0} \u5347\u7248\u5b8c\u6210\uff0c\u7b49\u5019\u91cd\u65b0\u555f\u52d5\u3002
UpgradeProgress=Jenkins {0} \u5347\u7d1a\u4f5c\u696d\u6b63\u5728\u9032\u884c\u4e2d\u6216\u662f\u5df2\u7d93\u5931\u6557\u3002
-NewVersionAvailable=\u65b0\u7248\u7684 Jenkins ({0}) \u5df2\u7d93\u53ef\u4ee5\u4e0b\u8f09 (\u6539\u7248\u8a18\u9304)\u3002
+NewVersionAvailable=\u65b0\u7248\u7684 Jenkins ({0}) \u5df2\u7d93\u53ef\u4ee5\u4e0b\u8f09 (\u6539\u7248\u8a18\u9304)\u3002
Or\ Upgrade\ Automatically=\u6216\u662f\u81ea\u52d5\u5347\u7248
diff --git a/core/src/main/java/hudson/Functions.java b/core/src/main/java/hudson/Functions.java
index 4ecd7721d8..f9dcb93654 100644
--- a/core/src/main/java/hudson/Functions.java
+++ b/core/src/main/java/hudson/Functions.java
@@ -75,6 +75,7 @@ import hudson.tasks.UserAvatarResolver;
import hudson.util.Area;
import hudson.util.FormValidation.CheckMethod;
import hudson.util.Iterators;
+import hudson.util.jna.GNUCLibrary;
import hudson.util.Secret;
import hudson.views.MyViewsTabBar;
import hudson.views.ViewsTabBar;
@@ -459,6 +460,15 @@ public class Functions {
public static boolean isWindows() {
return File.pathSeparatorChar==';';
}
+
+ public static boolean isGlibcSupported() {
+ try {
+ GNUCLibrary.LIBC.getpid();
+ return true;
+ } catch(Throwable t) {
+ return false;
+ }
+ }
public static List getLogRecords() {
return Jenkins.logRecords;
diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java
index 623de0f137..2af02aa4c5 100644
--- a/core/src/main/java/hudson/PluginManager.java
+++ b/core/src/main/java/hudson/PluginManager.java
@@ -119,6 +119,8 @@ import org.xml.sax.helpers.DefaultHandler;
import static hudson.init.InitMilestone.*;
import hudson.model.DownloadService;
import hudson.util.FormValidation;
+
+import static java.util.logging.Level.SEVERE;
import static java.util.logging.Level.WARNING;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
@@ -520,9 +522,33 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
}
}
+ // Redo who depends on who.
+ resolveDependantPlugins();
+
LOGGER.info("Plugin " + p.getShortName()+":"+p.getVersion() + " dynamically installed");
}
+ @Restricted(NoExternalUse.class)
+ public synchronized void resolveDependantPlugins() {
+ for (PluginWrapper plugin : plugins) {
+ Set dependants = new HashSet<>();
+ for (PluginWrapper possibleDependant : plugins) {
+ // The plugin could have just been deleted. If so, it doesn't
+ // count as a dependant.
+ if (possibleDependant.isDeleted()) {
+ continue;
+ }
+ List dependencies = possibleDependant.getDependencies();
+ for (Dependency dependency : dependencies) {
+ if (dependency.shortName.equals(plugin.getShortName())) {
+ dependants.add(possibleDependant.getShortName());
+ }
+ }
+ }
+ plugin.setDependants(dependants);
+ }
+ }
+
/**
* If the war file has any "/WEB-INF/plugins/[*.jpi | *.hpi]", extract them into the plugin directory.
*
@@ -779,6 +805,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
*/
public void doInstall(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
boolean dynamicLoad = req.getParameter("dynamicLoad")!=null;
+ final List> deployJobs = new ArrayList<>();
Enumeration en = req.getParameterNames();
while (en.hasMoreElements()) {
@@ -811,9 +838,36 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
if (p == null) {
throw new Failure("No such plugin: " + n);
}
- p.deploy(dynamicLoad);
+
+ deployJobs.add(p.deploy(dynamicLoad));
}
}
+
+ // Fire a one-off thread to wait for the plugins to be deployed and then
+ // refresh the dependant plugins list.
+ new Thread() {
+ @Override
+ public void run() {
+ INSTALLING: while (true) {
+ for (Future deployJob : deployJobs) {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ LOGGER.log(SEVERE, "Unexpected error while waiting for some plugins to install. Plugin Manager state may be invalid. Please restart Jenkins ASAP.", e);
+ }
+ if (!deployJob.isCancelled() && !deployJob.isDone()) {
+ // One of the plugins is not installing/canceled, so
+ // go back to sleep and try again in a while.
+ continue INSTALLING;
+ }
+ }
+ // All the plugins are installed. It's now safe to refresh.
+ resolveDependantPlugins();
+ break;
+ }
+ }
+ }.start();
+
rsp.sendRedirect("../updateCenter/");
}
diff --git a/core/src/main/java/hudson/PluginWrapper.java b/core/src/main/java/hudson/PluginWrapper.java
index 50fad48550..60eabf68cf 100644
--- a/core/src/main/java/hudson/PluginWrapper.java
+++ b/core/src/main/java/hudson/PluginWrapper.java
@@ -24,6 +24,7 @@
*/
package hudson;
+import com.google.common.collect.ImmutableSet;
import hudson.PluginManager.PluginInstanceStore;
import hudson.model.Api;
import hudson.model.ModelObject;
@@ -40,7 +41,10 @@ import java.io.OutputStream;
import java.io.Closeable;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import java.util.Set;
import java.util.jar.Manifest;
import java.util.logging.Logger;
import static java.util.logging.Level.WARNING;
@@ -57,6 +61,7 @@ import java.util.Enumeration;
import java.util.jar.JarFile;
import java.util.logging.Level;
import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
/**
* Represents a Jenkins plug-in and associated control information
@@ -150,6 +155,54 @@ public class PluginWrapper implements Comparable, ModelObject {
*/
/*package*/ boolean isBundled;
+ /**
+ * List of plugins that depend on this plugin.
+ */
+ private Set dependants = Collections.emptySet();
+
+ /**
+ * The core can depend on a plugin if it is bundled. Sometimes it's the only thing that
+ * depends on the plugin e.g. UI support library bundle plugin.
+ */
+ private static Set CORE_ONLY_DEPENDANT = ImmutableSet.copyOf(Arrays.asList("jenkins-core"));
+
+ /**
+ * Set the list of components that depend on this plugin.
+ * @param dependants The list of components that depend on this plugin.
+ */
+ public void setDependants(@Nonnull Set dependants) {
+ this.dependants = dependants;
+ }
+
+ /**
+ * Get the list of components that depend on this plugin.
+ * @return The list of components that depend on this plugin.
+ */
+ public @Nonnull Set getDependants() {
+ if (isBundled && dependants.isEmpty()) {
+ return CORE_ONLY_DEPENDANT;
+ } else {
+ return dependants;
+ }
+ }
+
+ /**
+ * Does this plugin have anything that depends on it.
+ * @return {@code true} if something (Jenkins core, or another plugin) depends on this
+ * plugin, otherwise {@code false}.
+ */
+ public boolean hasDependants() {
+ return (isBundled || !dependants.isEmpty());
+ }
+
+ /**
+ * Does this plugin depend on any other plugins.
+ * @return {@code true} if this plugin depends on other plugins, otherwise {@code false}.
+ */
+ public boolean hasDependencies() {
+ return (dependencies != null && !dependencies.isEmpty());
+ }
+
@ExportedBean
public static final class Dependency {
@Exported
@@ -632,8 +685,14 @@ public class PluginWrapper implements Comparable, ModelObject {
@RequirePOST
public HttpResponse doDoUninstall() throws IOException {
- Jenkins.getInstance().checkPermission(Jenkins.ADMINISTER);
+ Jenkins jenkins = Jenkins.getActiveInstance();
+
+ jenkins.checkPermission(Jenkins.ADMINISTER);
archive.delete();
+
+ // Redo who depends on who.
+ jenkins.getPluginManager().resolveDependantPlugins();
+
return HttpResponses.redirectViaContextPath("/pluginManager/installed"); // send back to plugin manager
}
diff --git a/core/src/main/java/hudson/Util.java b/core/src/main/java/hudson/Util.java
index 24d2ffd268..e9297a83eb 100644
--- a/core/src/main/java/hudson/Util.java
+++ b/core/src/main/java/hudson/Util.java
@@ -26,6 +26,7 @@ package hudson;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
+
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
import hudson.Proc.LocalProc;
import hudson.model.TaskListener;
@@ -33,6 +34,7 @@ import hudson.os.PosixAPI;
import hudson.util.QuotedStringTokenizer;
import hudson.util.VariableResolver;
import hudson.util.jna.WinIOException;
+
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.time.FastDateFormat;
import org.apache.tools.ant.BuildException;
@@ -40,14 +42,18 @@ import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Chmod;
import org.apache.tools.ant.taskdefs.Copy;
import org.apache.tools.ant.types.FileSet;
+
import jnr.posix.FileStat;
import jnr.posix.POSIX;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
+
import java.io.*;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
@@ -70,12 +76,14 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import hudson.util.jna.Kernel32Utils;
-
import static hudson.util.jna.GNUCLibrary.LIBC;
+
import java.security.DigestInputStream;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
import org.apache.commons.codec.digest.DigestUtils;
/**
@@ -1415,16 +1423,36 @@ public class Util {
}
/**
- * Checks if the public method defined on the base type with the given arguments
- * are overridden in the given derived type.
+ * Checks if the method defined on the base type with the given arguments
+ * is overridden in the given derived type.
*/
public static boolean isOverridden(@Nonnull Class base, @Nonnull Class derived, @Nonnull String methodName, @Nonnull Class... types) {
+ return !getMethod(base, methodName, types).equals(getMethod(derived, methodName, types));
+ }
+
+ private static Method getMethod(@Nonnull Class clazz, @Nonnull String methodName, @Nonnull Class... types) {
+ Method res = null;
try {
- return !base.getMethod(methodName, types).equals(
- derived.getMethod(methodName,types));
+ res = clazz.getDeclaredMethod(methodName, types);
+ // private, static or final methods can not be overridden
+ if (res != null && (Modifier.isPrivate(res.getModifiers()) || Modifier.isFinal(res.getModifiers())
+ || Modifier.isStatic(res.getModifiers()))) {
+ res = null;
+ }
} catch (NoSuchMethodException e) {
+ // Method not found in clazz, let's search in superclasses
+ Class superclass = clazz.getSuperclass();
+ if (superclass != null) {
+ res = getMethod(superclass, methodName, types);
+ }
+ } catch (SecurityException e) {
throw new AssertionError(e);
}
+ if (res == null) {
+ throw new IllegalArgumentException(
+ String.format("Method %s not found in %s (or it is private, final or static)", methodName, clazz.getName()));
+ }
+ return res;
}
/**
diff --git a/core/src/main/java/hudson/cli/ReloadJobCommand.java b/core/src/main/java/hudson/cli/ReloadJobCommand.java
new file mode 100644
index 0000000000..f1c114e4b6
--- /dev/null
+++ b/core/src/main/java/hudson/cli/ReloadJobCommand.java
@@ -0,0 +1,120 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 Red Hat, 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.cli;
+
+import hudson.Extension;
+import hudson.cli.handlers.ViewOptionHandler;
+import hudson.model.AbstractItem;
+import hudson.model.AbstractProject;
+import hudson.model.Item;
+import hudson.model.ViewGroup;
+import hudson.model.View;
+
+import jenkins.model.Jenkins;
+import org.kohsuke.args4j.Argument;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * @author pjanouse
+ * @since TODO
+ */
+@Extension
+public class ReloadJobCommand extends CLICommand {
+
+ @Argument(usage="Name of the job(s) to reload", required=true, multiValued=true)
+ private List jobs;
+
+ private static final Logger LOGGER = Logger.getLogger(ReloadJobCommand.class.getName());
+
+ @Override
+ public String getShortDescription() {
+
+ return Messages.ReloadJobCommand_ShortDescription();
+ }
+
+ @Override
+ protected int run() throws Exception {
+
+ boolean errorOccurred = false;
+ final Jenkins jenkins = Jenkins.getInstance();
+
+ if (jenkins == null) {
+ stderr.println("The Jenkins instance has not been started, or was already shut down!");
+ return -1;
+ }
+
+ final HashSet hs = new HashSet();
+ hs.addAll(jobs);
+
+ for (String job_s: hs) {
+ AbstractItem job = null;
+
+ try {
+ // TODO: JENKINS-30786
+ Item item = jenkins.getItemByFullName(job_s);
+ if (item instanceof AbstractItem) {
+ job = (AbstractItem) item;
+ } else if (item != null) {
+ LOGGER.log(Level.WARNING, "Unsupported item type: {0}", item.getClass().getName());
+ }
+
+ if(job == null) {
+ // TODO: JENKINS-30785
+ AbstractProject project = AbstractProject.findNearest(job_s);
+ if(project == null) {
+ stderr.format("No such job \u2018%s\u2019 exists.\n", job_s);
+ } else {
+ stderr.format("No such job \u2018%s\u2019 exists. Perhaps you meant \u2018%s\u2019?", job_s, project.getFullName());
+ }
+ errorOccurred = true;
+ continue;
+ }
+
+ try {
+ job.checkPermission(AbstractItem.CONFIGURE);
+ } catch (Exception e) {
+ stderr.println(e.getMessage());
+ errorOccurred = true;
+ continue;
+ }
+
+ job.doReload();
+ } catch (Exception e) {
+ final String errorMsg = String.format("Unexpected exception occurred during reloading of job '%s': %s",
+ job == null ? "(null)" : job.getFullName(),
+ e.getMessage());
+ stderr.println(errorMsg);
+ LOGGER.warning(errorMsg);
+ errorOccurred = true;
+ //noinspection UnnecessaryContinue
+ continue;
+ }
+ }
+ return errorOccurred ? 1 : 0;
+ }
+}
diff --git a/core/src/main/java/hudson/console/ConsoleLogFilter.java b/core/src/main/java/hudson/console/ConsoleLogFilter.java
index c980c1e1fb..49116ab982 100644
--- a/core/src/main/java/hudson/console/ConsoleLogFilter.java
+++ b/core/src/main/java/hudson/console/ConsoleLogFilter.java
@@ -26,11 +26,14 @@ package hudson.console;
import hudson.ExtensionList;
import hudson.ExtensionPoint;
+import hudson.Util;
import hudson.model.AbstractBuild;
+import hudson.model.Computer;
+import hudson.model.Run;
import hudson.tasks.BuildWrapper;
import hudson.util.ArgumentListBuilder;
-import jenkins.model.Jenkins;
+import javax.annotation.Nonnull;
import java.io.IOException;
import java.io.OutputStream;
@@ -48,8 +51,53 @@ public abstract class ConsoleLogFilter implements ExtensionPoint {
/**
* Called on the start of each build, giving extensions a chance to intercept
* the data that is written to the log.
+ *
+ * @deprecated as of 1.632. Use {@link #decorateLogger(Run, OutputStream)}
*/
- public abstract OutputStream decorateLogger(AbstractBuild build, OutputStream logger) throws IOException, InterruptedException;
+ public OutputStream decorateLogger(AbstractBuild build, OutputStream logger) throws IOException, InterruptedException {
+ if (Util.isOverridden(ConsoleLogFilter.class, getClass(), "decorateLogger", Run.class, OutputStream.class)) {
+ // old client calling newer implementation. forward the call.
+ return decorateLogger((Run) build, logger);
+ } else {
+ // happens only if the subtype fails to override neither decorateLogger method
+ throw new AssertionError("The plugin '" + this.getClass().getName() + "' still uses " +
+ "deprecated decorateLogger(AbstractBuild,OutputStream) method. " +
+ "Update the plugin to use setUp(Run,OutputStream) instead.");
+ }
+ }
+
+ /**
+ * Called on the start of each build, giving extensions a chance to intercept
+ * the data that is written to the log.
+ *
+ *
+ * Even though this method is not marked 'abstract', this is the method that must be overridden
+ * by extensions.
+ */
+ public OutputStream decorateLogger(Run build, OutputStream logger) throws IOException, InterruptedException {
+ // this implementation is backward compatibility thunk in case subtypes only override the
+ // old signature (AbstractBuild,OutputStream)
+
+ if (build instanceof AbstractBuild) {
+ // maybe the plugin implements the old signature.
+ return decorateLogger((AbstractBuild) build, logger);
+ } else {
+ // this ConsoleLogFilter can only decorate AbstractBuild, so just pass through
+ return logger;
+ }
+ }
+
+ /**
+ * Called to decorate logger for master/slave communication.
+ *
+ * @param computer
+ * Slave computer for which the logger is getting decorated. Useful to do
+ * contextual decoration.
+ * @since 1.632
+ */
+ public OutputStream decorateLogger(@Nonnull Computer computer, OutputStream logger) throws IOException, InterruptedException {
+ return logger; // by default no-op
+ }
/**
* All the registered {@link ConsoleLogFilter}s.
diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java
index 1e1f9f4666..7b3818d0f1 100644
--- a/core/src/main/java/hudson/model/AbstractItem.java
+++ b/core/src/main/java/hudson/model/AbstractItem.java
@@ -680,7 +680,6 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
*
* @since 1.556
*/
- @CLIMethod(name="reload-job")
@RequirePOST
public void doReload() throws IOException {
checkPermission(CONFIGURE);
@@ -723,8 +722,11 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet
@Argument(required=true,metaVar="NAME",usage="Job name") String name) throws CmdLineException {
// TODO can this (and its pseudo-override in AbstractProject) share code with GenericItemOptionHandler, used for explicit CLICommand’s rather than CLIMethod’s?
AbstractItem item = Jenkins.getInstance().getItemByFullName(name, AbstractItem.class);
- if (item==null)
- throw new CmdLineException(null,Messages.AbstractItem_NoSuchJobExists(name,AbstractProject.findNearest(name).getFullName()));
+ if (item==null) {
+ AbstractProject project = AbstractProject.findNearest(name);
+ throw new CmdLineException(null, project == null ? Messages.AbstractItem_NoSuchJobExistsWithoutSuggestion(name)
+ : Messages.AbstractItem_NoSuchJobExists(name, project.getFullName()));
+ }
return item;
}
diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java
index 22fc55ecb8..f294a15d69 100644
--- a/core/src/main/java/hudson/model/AbstractProject.java
+++ b/core/src/main/java/hudson/model/AbstractProject.java
@@ -2248,8 +2248,11 @@ public abstract class AbstractProject
,R extends A
public static AbstractProject resolveForCLI(
@Argument(required=true,metaVar="NAME",usage="Job name") String name) throws CmdLineException {
AbstractProject item = Jenkins.getInstance().getItemByFullName(name, AbstractProject.class);
- if (item==null)
- throw new CmdLineException(null,Messages.AbstractItem_NoSuchJobExists(name,AbstractProject.findNearest(name).getFullName()));
+ if (item==null) {
+ AbstractProject project = AbstractProject.findNearest(name);
+ throw new CmdLineException(null, project == null ? Messages.AbstractItem_NoSuchJobExistsWithoutSuggestion(name)
+ : Messages.AbstractItem_NoSuchJobExists(name, project.getFullName()));
+ }
return item;
}
diff --git a/core/src/main/java/hudson/model/Label.java b/core/src/main/java/hudson/model/Label.java
index f0a2df2474..ff32c1f940 100644
--- a/core/src/main/java/hudson/model/Label.java
+++ b/core/src/main/java/hudson/model/Label.java
@@ -85,6 +85,7 @@ public abstract class Label extends Actionable implements Comparable