[jenkins] Update to upstream version 1.581

Michal Srb msrb at fedoraproject.org
Sun Sep 28 08:10:18 UTC 2014


commit b3a894de161361a97cda534c5933d4d31f4f5702
Author: Michal Srb <msrb at redhat.com>
Date:   Sat Sep 27 17:56:05 2014 +0200

    Update to upstream version 1.581
    
    - Migrate to jenkins-winstone
    - Initial support for plugins from RPMs
    - Bugfixes

 .gitignore                                         |    1 +
 add-support-for-plugins-from-RPMs.patch            |  127 +++++++++++++++
 context.xml                                        |    3 -
 dependencies.txt                                   |    2 +
 jenkins.init                                       |  162 +++++++++++++++++++
 jenkins.service                                    |   10 +-
 jenkins.spec                                       |  168 +++++++++++++-------
 ...BoundConstructor-annotation-from-abstract.patch |   53 ++++++
 sources                                            |    3 +-
 9 files changed, 459 insertions(+), 70 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 0b80b42..fa9e839 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
 /jenkins-1.569.tar.gz
 /jenkins-1.575.tar.gz
 /jenkins-1.578.tar.gz
+/jenkins-1.581.tar.gz
diff --git a/add-support-for-plugins-from-RPMs.patch b/add-support-for-plugins-from-RPMs.patch
new file mode 100644
index 0000000..2d03f59
--- /dev/null
+++ b/add-support-for-plugins-from-RPMs.patch
@@ -0,0 +1,127 @@
+From 95d981c81c41be79df1431f7d34e5425593c299c Mon Sep 17 00:00:00 2001
+From: Michal Srb <msrb at redhat.com>
+Date: Tue, 16 Sep 2014 08:52:22 +0200
+Subject: [PATCH] Add support for plugins from RPMs
+
+---
+ core/src/main/java/hudson/PluginManager.java | 56 ++++++++++++++++++++++++++++
+ 1 file changed, 56 insertions(+)
+
+diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java
+index 36f4880..0947fcb 100644
+--- a/core/src/main/java/hudson/PluginManager.java
++++ b/core/src/main/java/hudson/PluginManager.java
+@@ -52,6 +52,7 @@ import jenkins.model.Jenkins;
+ import jenkins.util.io.OnMaster;
+ import net.sf.json.JSONArray;
+ import net.sf.json.JSONObject;
++
+ import org.apache.commons.fileupload.FileItem;
+ import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+ import org.apache.commons.fileupload.servlet.ServletFileUpload;
+@@ -78,12 +79,16 @@ import javax.servlet.ServletContext;
+ import javax.servlet.ServletException;
+ import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.parsers.SAXParserFactory;
++
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.lang.ref.WeakReference;
+ import java.lang.reflect.Method;
+ import java.net.URL;
++import java.nio.file.Files;
++import java.nio.file.Path;
++import java.nio.file.Paths;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+@@ -103,6 +108,7 @@ import java.util.concurrent.Future;
+ import java.util.jar.JarFile;
+ import java.util.logging.Level;
+ import java.util.logging.Logger;
++
+ import org.xml.sax.Attributes;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.helpers.DefaultHandler;
+@@ -111,6 +117,7 @@ import static hudson.init.InitMilestone.*;
+ import hudson.model.DownloadService;
+ import hudson.util.FormValidation;
+ import static java.util.logging.Level.WARNING;
++
+ import org.kohsuke.accmod.Restricted;
+ import org.kohsuke.accmod.restrictions.NoExternalUse;
+ 
+@@ -138,6 +145,9 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
+      */
+     public final File rootDir;
+ 
++    // FIXME: pass this location to Jenkins via system property
++    private final File localRootDir = new File("/usr/share/jenkins/plugins/");
++
+     /**
+      * @deprecated as of 1.355
+      *      {@link PluginManager} can now live longer than {@link jenkins.model.Jenkins} instance, so
+@@ -201,6 +211,49 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
+         return new Api(this);
+     }
+ 
++    private void symlinkRpmfiedPlugins() {
++        if (!localRootDir.exists()) {
++            return;
++        }
++
++        File[] rpmPluginDirs = localRootDir.listFiles();
++        File[] pluginDirs = rootDir.listFiles();
++        boolean isAlreadyInstalled = false;
++
++        for (File rpmPlugin : rpmPluginDirs) {
++            if (rpmPlugin.isDirectory()) {
++                for (File existingPlugin : pluginDirs) {
++                    // remove broken symlinks from $JENKINS_HOME/plugins/
++                    if (Files.isSymbolicLink(existingPlugin.toPath())) {
++                        if (Files.notExists(existingPlugin.toPath())) {
++                            LOGGER.info("Removing broken symbolic link from plugins directory: " + existingPlugin);
++                            existingPlugin.delete();
++                        }
++                    }
++                    if (rpmPlugin.getName().equals(existingPlugin.getName())
++                            || existingPlugin.getName().equals(rpmPlugin.getName() + ".jpi")) {
++                        LOGGER.info(rpmPlugin.getName() + " already exists in plugin directory, skipping");
++                        isAlreadyInstalled = true;
++                        break;
++                    }
++                }
++                if (!isAlreadyInstalled) {
++                    Path link = Paths.get(rootDir.getPath(), rpmPlugin.getName() + ".jpi");
++                    Path target = Paths.get(rpmPlugin.getPath());
++                    try {
++                        Files.createSymbolicLink(link, target);
++                    } catch (IOException e) {
++                        LOGGER.info(e.toString());
++                    }
++                }
++                isAlreadyInstalled = false;
++            } else {
++                LOGGER.info(localRootDir + rpmPlugin.getName()
++                        + " is not a directory, ignoring");
++            }
++        }
++    }
++
+     /**
+      * Called immediately after the construction.
+      * This is a separate method so that code executed from here will see a valid value in
+@@ -208,6 +261,9 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
+      */
+     public TaskBuilder initTasks(final InitStrategy initStrategy) {
+         TaskBuilder builder;
++
++        symlinkRpmfiedPlugins();
++
+         if (!pluginListed) {
+             builder = new TaskGraphBuilder() {
+                 List<File> archives;
+-- 
+1.9.3
+
diff --git a/dependencies.txt b/dependencies.txt
new file mode 100644
index 0000000..98c26a5
--- /dev/null
+++ b/dependencies.txt
@@ -0,0 +1,2 @@
+net.java.dev.jna:jna:jar:3.3.0-jenkins-3:compile
+org.kohsuke:akuma:jar:1.9:compile
diff --git a/jenkins.init b/jenkins.init
new file mode 100644
index 0000000..9f887a5
--- /dev/null
+++ b/jenkins.init
@@ -0,0 +1,162 @@
+#!/bin/sh
+#
+#     SUSE system statup script for Jenkins
+#     Copyright (C) 2007  Pascal Bleser
+#          
+#     This library is free software; you can redistribute it and/or modify it
+#     under the terms of the GNU Lesser General Public License as published by
+#     the Free Software Foundation; either version 2.1 of the License, or (at
+#     your option) any later version.
+#			      
+#     This library is distributed in the hope that it will be useful, but
+#     WITHOUT ANY WARRANTY; without even the implied warranty of
+#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#     Lesser General Public License for more details.
+#      
+#     You should have received a copy of the GNU Lesser General Public
+#     License along with this library; if not, write to the Free Software
+#     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+#     USA.
+#
+### BEGIN INIT INFO
+# Provides:          jenkins
+# Required-Start:    $local_fs $remote_fs $network $time $named
+# Should-Start: $time sendmail
+# Required-Stop:     $local_fs $remote_fs $network $time $named
+# Should-Stop: $time sendmail
+# Default-Start:     3 5
+# Default-Stop:      0 1 2 6
+# Short-Description: Jenkins continuous build server
+# Description:       Start the Jenkins continuous build server
+### END INIT INFO
+
+# Check for existence of needed config file and read it
+JENKINS_CONFIG=/etc/sysconfig/jenkins
+test -e "$JENKINS_CONFIG" || { echo "$JENKINS_CONFIG not existing";
+	if [ "$1" = "stop" ]; then exit 0;
+	else exit 6; fi; }
+test -r "$JENKINS_CONFIG" || { echo "$JENKINS_CONFIG not readable. Perhaps you forgot 'sudo'?";
+	if [ "$1" = "stop" ]; then exit 0;
+	else exit 6; fi; }
+
+JENKINS_PID_FILE="/var/run/jenkins.pid"
+
+# Source function library.
+. /etc/init.d/functions
+
+# Read config	
+[ -f "$JENKINS_CONFIG" ] && . "$JENKINS_CONFIG"
+
+# Set up environment accordingly to the configuration settings
+[ -n "$JENKINS_HOME" ] || { echo "JENKINS_HOME not configured in $JENKINS_CONFIG";
+	if [ "$1" = "stop" ]; then exit 0;
+	else exit 6; fi; }
+[ -d "$JENKINS_HOME" ] || { echo "JENKINS_HOME directory does not exist: $JENKINS_HOME";
+	if [ "$1" = "stop" ]; then exit 0;
+	else exit 1; fi; }
+
+# Search usable Java. We do this because various reports indicated
+# that /usr/bin/java may not always point to Java 1.5
+# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
+for candidate in /etc/alternatives/java /usr/lib/jvm/java-1.6.0/bin/java /usr/lib/jvm/jre-1.6.0/bin/java /usr/lib/jvm/java-1.5.0/bin/java /usr/lib/jvm/jre-1.5.0/bin/java /usr/bin/java
+do
+  [ -x "$JENKINS_JAVA_CMD" ] && break
+  JENKINS_JAVA_CMD="$candidate"
+done
+
+JENKINS_WEBROOT="/usr/share/jenkins/war/"
+
+CLASSPATH="`build-classpath jetty8/jetty-util-8.1.14.v20131031 jetty8/jetty-security-8.1.14.v20131031 jetty8/jetty-server-8.1.14.v20131031 jetty8/jetty-webapp-8.1.14.v20131031 jetty8/jetty-servlet-8.1.14.v20131031 jetty8/jetty-http-8.1.14.v20131031 jetty8/jetty-io-8.1.14.v20131031 jetty8/jetty-continuation-8.1.14.v20131031 jetty8/jetty-xml-8.1.14.v20131031 glassfish-servlet-api`:${JENKINS_WEBROOT}/executable-war.jar:${JENKINS_WEBROOT}/winstone.jar"
+
+JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -cp $CLASSPATH Main"
+PARAMS="--logfile=/var/log/jenkins/jenkins.log --extractedFilesFolder=$JENKINS_WEBROOT --webroot=$JENKINS_WEBROOT --daemon"
+[ -n "$JENKINS_PORT" ] && PARAMS="$PARAMS --httpPort=$JENKINS_PORT"
+[ -n "$JENKINS_LISTEN_ADDRESS" ] && PARAMS="$PARAMS --httpListenAddress=$JENKINS_LISTEN_ADDRESS"
+[ -n "$JENKINS_HTTPS_PORT" ] && PARAMS="$PARAMS --httpsPort=$JENKINS_HTTPS_PORT"
+[ -n "$JENKINS_HTTPS_KEYSTORE" ] && PARAMS="$PARAMS --httpsKeyStore=$JENKINS_HTTPS_KEYSTORE"
+[ -n "$JENKINS_HTTPS_KEYSTORE_PASSWORD" ] && PARAMS="$PARAMS --httpsKeyStorePassword='$JENKINS_HTTPS_KEYSTORE_PASSWORD'"
+[ -n "$JENKINS_HTTPS_LISTEN_ADDRESS" ] && PARAMS="$PARAMS --httpsListenAddress=$JENKINS_HTTPS_LISTEN_ADDRESS"
+[ -n "$JENKINS_AJP_PORT" ] && PARAMS="$PARAMS --ajp13Port=$JENKINS_AJP_PORT"
+[ -n "$JENKINS_AJP_LISTEN_ADDRESS" ] && PARAMS="$PARAMS --ajp13ListenAddress=$JENKINS_AJP_LISTEN_ADDRESS"
+[ -n "$JENKINS_DEBUG_LEVEL" ] && PARAMS="$PARAMS --debug=$JENKINS_DEBUG_LEVEL"
+[ -n "$JENKINS_HANDLER_STARTUP" ] && PARAMS="$PARAMS --handlerCountStartup=$JENKINS_HANDLER_STARTUP"
+[ -n "$JENKINS_HANDLER_MAX" ] && PARAMS="$PARAMS --handlerCountMax=$JENKINS_HANDLER_MAX"
+[ -n "$JENKINS_HANDLER_IDLE" ] && PARAMS="$PARAMS --handlerCountMaxIdle=$JENKINS_HANDLER_IDLE"
+[ -n "$JENKINS_ARGS" ] && PARAMS="$PARAMS $JENKINS_ARGS"
+
+if [ "$JENKINS_ENABLE_ACCESS_LOG" = "yes" ]; then
+    PARAMS="$PARAMS --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/var/log/jenkins/access_log"
+fi
+
+RETVAL=0
+
+case "$1" in
+    start)
+	echo -n "Starting Jenkins "
+	daemon --user "$JENKINS_USER" --pidfile "$JENKINS_PID_FILE" $JAVA_CMD $PARAMS > /dev/null
+	RETVAL=$?
+	if [ $RETVAL = 0 ]; then
+	    success
+	    echo > "$JENKINS_PID_FILE"  # just in case we fail to find it
+            MY_SESSION_ID=`/bin/ps h -o sess -p $$`
+            # get PID
+            /bin/ps hww -u "$JENKINS_USER" -o sess,ppid,pid,cmd | \
+            while read sess ppid pid cmd; do
+		[ "$ppid" = 1 ] || continue
+		# this test doesn't work because Jenkins sets a new Session ID
+                # [ "$sess" = "$MY_SESSION_ID" ] || continue
+	       	echo "$cmd" | grep $JENKINS_WEBROOT > /dev/null
+		[ $? = 0 ] || continue
+		# found a PID
+		echo $pid > "$JENKINS_PID_FILE"
+	    done
+	else
+	    failure
+	fi
+	echo
+	;;
+    stop)
+	echo -n "Shutting down Jenkins "
+	killproc jenkins
+	RETVAL=$?
+	echo
+	;;
+    try-restart|condrestart)
+	if test "$1" = "condrestart"; then
+		echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
+	fi
+	$0 status
+	if test $? = 0; then
+		$0 restart
+	else
+		: # Not running is not a failure.
+	fi
+	;;
+    restart)
+	$0 stop
+	$0 start
+	;;
+    force-reload)
+	echo -n "Reload service Jenkins "
+	$0 try-restart
+	;;
+    reload)
+    	$0 restart
+	;;
+    status)
+    	status jenkins
+	RETVAL=$?
+	;;
+    probe)
+	## Optional: Probe for the necessity of a reload, print out the
+	## argument to this init script which is required for a reload.
+	## Note: probe is not (yet) part of LSB (as of 1.9)
+
+	test "$JENKINS_CONFIG" -nt "$JENKINS_PID_FILE" && echo reload
+	;;
+    *)
+	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
+	exit 1
+	;;
+esac
+exit $RETVAL
diff --git a/jenkins.service b/jenkins.service
index 611fe5d..0c20b33 100644
--- a/jenkins.service
+++ b/jenkins.service
@@ -3,13 +3,11 @@ Description=Jenkins continuous build server
 After=syslog.target network.target
 
 [Service]
-EnvironmentFile=/etc/jenkins/tomcat.conf
 EnvironmentFile=-/etc/sysconfig/jenkins
-User=jenkins
-Group=jenkins
-ExecStart=/usr/libexec/tomcat/server start
-ExecStop=/usr/libexec/tomcat/server stop
+ExecStart=/usr/libexec/jenkins/jenkins start
+ExecStop=/usr/libexec/jenkins/jenkins stop
+Type=forking
+PIDFile=/var/run/jenkins.pid
 
 [Install]
 WantedBy=multi-user.target
-
diff --git a/jenkins.spec b/jenkins.spec
index dd8bfbd..58c2b90 100644
--- a/jenkins.spec
+++ b/jenkins.spec
@@ -4,10 +4,11 @@
 %global bootstrap 0
 
 %global homedir %{_datadir}/%{name}
+%global workdir %{_sharedstatedir}/%{name}
 %global juid    175
 
 Name:           jenkins
-Version:        1.578
+Version:        1.581
 Release:        1%{?dist}
 Summary:        An extendable open source continuous integration server
 
@@ -25,10 +26,9 @@ Source1:        http://www.apache.org/licenses/LICENSE-2.0.txt
 # taken from https://netbeans.org/cddl-gplv2.html
 Source2:        CDDL-LICENSE
 Source4:        jenkins-sysconfig
-Source5:        context.xml
 Source6:        jenkins.service
-# default configuration for Jenkins (based on tomcat's default configuration)
-Source7:        jenkins-conf.zip
+Source7:        jenkins.init
+Source8:        dependencies.txt
 
 # animal sniffer is not really useful in Fedora
 Patch1:         remove-animal-sniffer-annotations.patch
@@ -49,6 +49,8 @@ Patch8:         remove-windows-support.patch
 Patch9:         remove-windows-support-from-processtree.patch
 Patch10:        remove-dotnet-support.patch
 Patch11:        remove-windows-installer-support.patch
+Patch12:        remove-DataBoundConstructor-annotation-from-abstract.patch
+Patch13:        add-support-for-plugins-from-RPMs.patch
 
 BuildArch:      noarch
 
@@ -139,6 +141,7 @@ BuildRequires:  mvn(org.bouncycastle:bcpkix-jdk15on)
 BuildRequires:  mvn(org.acegisecurity:acegi-security)
 BuildRequires:  mvn(org.kohsuke.stapler:stapler-adjunct-codemirror)
 BuildRequires:  mvn(org.jenkins-ci.plugins.icon-shim:icon-set)
+BuildRequires:  mvn(org.jenkins-ci:winstone)
 BuildRequires:  systemd-units
 %if !%{bootstrap}
 #BuildRequires:  mvn(org.jenkins-ci.lib:lib-jenkins-maven-embedder)
@@ -350,10 +353,17 @@ Requires:       apache-commons-collections
 Requires:       jenkins-crypto-util
 Requires:       glassfish-jaxb
 Requires:       geronimo-validation
-Requires:       js-yui2
 Requires:       acegisecurity
 Requires:       stapler-adjunct-codemirror
 Requires:       jenkins-icon-shim
+Requires:       jetty8
+Requires:       jenkins-winstone
+Requires:       jenkins-executable-war
+Requires:       jenkins-javadoc-plugin
+Requires:       jenkins-external-monitor-job-plugin
+Requires:       jenkins-ant-plugin
+Requires:       jenkins-mailer-plugin
+Requires:       js-yui2-jenkins
 
 
 %description webapp
@@ -381,6 +391,8 @@ This package contains API documentation for %{name}.
 %patch9 -p1
 %patch10 -p1
 %patch11 -p1
+%patch12 -p1
+%patch13 -p1
 
 # Remove bundled JARs and classes
 find . -name "*.jar" -delete
@@ -406,7 +418,6 @@ cp %{SOURCE2} LICENSE-CDDL.txt
 %mvn_package :jenkins-war __noinstall
 %endif
 
-
 # Jenkins uses its own fork of xstream
 %pom_change_dep -r org.kohsuke.stapler:json-lib : core '
 <exclusions>
@@ -415,7 +426,7 @@ cp %{SOURCE2} LICENSE-CDDL.txt
         <artifactId>xstream</artifactId>
     </exclusion>
 </exclusions>'
-%pom_change_dep org.springframework:spring-webmvc : core '
+%pom_change_dep org.kohsuke.stapler:stapler-groovy : core '
 <exclusions>
     <exclusion>
         <groupId>com.thoughtworks.xstream</groupId>
@@ -433,9 +444,21 @@ cp %{SOURCE2} LICENSE-CDDL.txt
     <artifactId>spring-support</artifactId>
   </exclusion>
   <exclusion>
+    <groupId>org.springframework</groupId>
+    <artifactId>spring-context</artifactId>
+  </exclusion>
+  <exclusion>
+    <groupId>org.springframework</groupId>
+    <artifactId>spring-test</artifactId>
+  </exclusion>
+  <exclusion>
     <groupId>com.thoughtworks.xstream</groupId>
     <artifactId>xstream</artifactId>
   </exclusion>
+  <exclusion>
+    <groupId>com.sun</groupId>
+    <artifactId>tools</artifactId>
+  </exclusion>
 </exclusions>'
 
 # spring-aop pulls in a lot of tomcat libs, these will be provided by tomcat itself
@@ -447,12 +470,29 @@ cp %{SOURCE2} LICENSE-CDDL.txt
     </exclusion>
 </exclusions>'
 
+%pom_change_dep org.springframework:spring-webmvc : core '
+<exclusions>
+  <exclusion>
+    <groupId>com.sun</groupId>
+    <artifactId>tools</artifactId>
+  </exclusion>
+  <exclusion>
+    <groupId>org.codehaus.groovy</groupId>
+    <artifactId>groovy</artifactId>
+  </exclusion>
+  <exclusion>
+    <groupId>com.thoughtworks.xstream</groupId>
+    <artifactId>xstream</artifactId>
+  </exclusion>
+</exclusions>'
+
 
 # quick fix for newer version of jenkins-remoting
 # this is already fixed upstream in newer Jenkins
 sed -i 's|protected synchronized void terminate(|public synchronized void terminate(|g' core/src/main/java/hudson/Launcher.java
 sed -i 's|protected synchronized void terminate(|public synchronized void terminate(|g' core/src/main/java/hudson/slaves/Channels.java
 
+%pom_change_dep org.jenkins-ci:winstone :::compile war
 
 # CLI uber JAR
 # useful, but bundling exception will be needed
@@ -504,18 +544,24 @@ sed -i 's|protected synchronized void terminate(|public synchronized void termin
 %pom_remove_dep org.jenkins-ci.modules:launchd-slave-installer war
 %pom_remove_dep org.jenkins-ci.modules:upstart-slave-installer war
 %pom_remove_dep org.jenkins-ci.modules:systemd-slave-installer war
-%pom_remove_dep :winstone war
+%pom_remove_dep org.jenkins-ci.modules:slave-installer war
 %pom_remove_dep :maven-plugin war
 %pom_remove_dep :test-annotations
 
-%if !%{bootstrap}
+#%%if %{bootstrap}
+#%%endif
 %pom_remove_plugin :maven-dependency-plugin war
+#%%pom_xpath_remove "pom:plugin[pom:artifactId[text()='maven-dependency-plugin']]/pom:executions" war
 %pom_remove_dep :cli war
-%pom_remove_dep org.jenkins-ci.modules:slave-installer war
-%pom_add_dep org.apache.sshd:sshd-core war
 %pom_add_dep org.bouncycastle:bcprov-jdk16 war
 %pom_add_dep org.bouncycastle:bcpkix-jdk15on war
-%endif
+%pom_add_dep org.apache.sshd:sshd-core war '
+<exclusions>
+  <exclusion>
+    <groupId>org.apache.tomcat</groupId>
+    <artifactId>tomcat-coyote</artifactId>
+  </exclusion>
+</exclusions>'
 
 # fix gId:aId
 # findbugs annotations
@@ -523,7 +569,7 @@ sed -i 's|protected synchronized void terminate(|public synchronized void termin
 %pom_add_dep com.google.code.findbugs:jsr305 core
 # groovy
 %pom_remove_dep org.codehaus.groovy:groovy-all core
-%pom_add_dep org.codehaus.groovy:groovy18:1.8
+%pom_add_dep org.codehaus.groovy:groovy18:1.8 core
 # jfreechart
 %pom_remove_dep jfree:jfreechart core
 %pom_add_dep org.jfree:jfreechart
@@ -535,6 +581,22 @@ sed -i 's|protected synchronized void terminate(|public synchronized void termin
 %pom_remove_dep jline:jline core
 %pom_add_dep jline:jline:1 core
 
+%pom_change_dep org.codehaus.groovy:groovy18 : core '
+<exclusions>
+  <exclusion>
+    <groupId>com.thoughtworks.xstream</groupId>
+    <artifactId>xstream</artifactId>
+  </exclusion>
+  <exclusion>
+    <groupId>org.apache.tomcat</groupId>
+    <artifactId>tomcat-servlet-api</artifactId>
+  </exclusion>
+  <exclusion>
+    <groupId>org.apache.tomcat</groupId>
+    <artifactId>tomcat-jsp-api</artifactId>
+  </exclusion>
+</exclusions>'
+
 %build
 %mvn_build -f -X
 
@@ -548,60 +610,45 @@ sed -i 's|protected synchronized void terminate(|public synchronized void termin
 
 %if !%{bootstrap}
 
-install -d -m 755 %{buildroot}/%{_datadir}/%{name}
-install -d -m 755 %{buildroot}/%{_datadir}/%{name}/webapp
-install -d -m 755 %{buildroot}/%{_datadir}/%{name}/catalina_base
-install -d -m 755 %{buildroot}/%{_datadir}/%{name}/catalina_base/webapps
-install -d -m 755 %{buildroot}/%{_datadir}/%{name}/plugins
-install -d -m 755 %{buildroot}/%{jenkins_catalina_base}
-install -d -m 755 %{buildroot}/%{jenkins_catalina_base}/webapps
-install -d -m 755 %{buildroot}/%{_sharedstatedir}/jenkins
-install -d -m 755 %{buildroot}/%{_localstatedir}/cache/jenkins/temp
-install -d -m 755 %{buildroot}/%{_localstatedir}/cache/jenkins/work
-install -d -m 755 %{buildroot}/%{_localstatedir}/log/jenkins
-install -d -m 755 %{buildroot}/%{_sysconfdir}/jenkins
+install -d -m 755 %{buildroot}/%{homedir}
+install -d -m 755 %{buildroot}/%{homedir}/war
+install -d -m 755 %{buildroot}/%{homedir}/plugins
+install -d -m 755 %{buildroot}/%{workdir}
+install -d -m 755 %{buildroot}/%{_localstatedir}/log/%{name}
+install -d -m 755 %{buildroot}/%{_sysconfdir}/%{name}
 install -d -m 755 %{buildroot}/%{_unitdir}
+install -d -m 755 %{buildroot}/%{_libexecdir}/%{name}
 
 install -m 644 %{SOURCE6} %{buildroot}/%{_unitdir}/%{name}.service
+install -m 644 %{SOURCE7} %{buildroot}/%{_libexecdir}/%{name}/%{name}
 
 # webapp
 # we don't have packaging guidelines for web applications yet.
-# just install exploded WAR to /usr/share/jenkins/webapp/
-unzip -d %{buildroot}/%{homedir}/webapp war/target/jenkins.war
-pushd %{buildroot}/%{homedir}/webapp/WEB-INF/lib
+# just install exploded WAR to /usr/share/jenkins/war/
+unzip -d %{buildroot}/%{homedir}/war war/target/jenkins.war
+pushd %{buildroot}/%{homedir}/war/WEB-INF/lib
+    rm asm*-distroshaded-*.jar
+    rm groovy18*.jar
     xmvn-subst .
     ln -sf `build-classpath objectweb-asm3/asm-tree-distroshaded` asm-tree-distroshaded-any.jar
     ln -sf `build-classpath objectweb-asm3/asm-util-distroshaded` asm-util-distroshaded-any.jar
     ln -sf `build-classpath objectweb-asm3/asm-distroshaded` asm-distroshaded-any.jar
     ln -sf `build-classpath objectweb-asm3/asm-commons-distroshaded` asm-commons-distroshaded-any.jar
     ln -sf `build-classpath objectweb-asm3/asm-analysis-distroshaded` asm-analysis-distroshaded-any.jar
+    ln -sf `build-classpath groovy18-1.8` groovy18-1.8.jar
     ln -sf `build-classpath hsqldb1-1.jar` hsqldb-1.jar
     ln -sf `build-classpath jenkins/cli` cli-%{version}.jar
     ln -sf `build-classpath jenkins/jenkins-core` jenkins-core-%{version}.jar
+    ln -sf `build-classpath jenkins-winstone/winstone` ../../winstone.jar
+    ln -sf `build-classpath jenkins-executable-war/executable-war` ../../executable-war.jar
 popd
 
-# unbundle yui2
-pushd %{buildroot}/%{homedir}/webapp/scripts/
-rm -Rf  yui/
-ln -s /usr/share/javascript/js-yui2/ yui
-popd
-
-pushd %{buildroot}/%{_datadir}/%{name}/catalina_base
-    ln -s %{_localstatedir}/cache/jenkins/temp .
-    ln -s %{_localstatedir}/cache/jenkins/work .
-    ln -s %{_localstatedir}/log/jenkins logs
-    ln -s %{_javadir}/tomcat lib
-    ln -s %{homedir}/webapp webapps/jenkins
-
-    unzip %{SOURCE7}
-    mv conf/* %{buildroot}/%{_sysconfdir}/jenkins
-    rmdir conf
-
-    ln -s %{_sysconfdir}/jenkins conf
-popd
+cp %{SOURCE8} %{buildroot}/%{homedir}/war/WEB-INF/classes/dependencies.txt
+# remove bundled YUI library
+rm -Rf %{buildroot}/%{homedir}/war/scripts/yui
 
 # symlink remoting and cli JAR into WEB-INF/
-pushd %{buildroot}/%{homedir}/webapp/WEB-INF/
+pushd %{buildroot}/%{homedir}/war/WEB-INF/
 ln -s `build-classpath jenkins-remoting/remoting` remoting.jar
 ln -s `build-classpath jenkins-remoting/remoting` slave.jar
 ln -s `build-classpath jenkins/cli` jenkins-cli.jar
@@ -609,8 +656,6 @@ popd
 
 install -d -m 755 %{buildroot}%{_sysconfdir}/sysconfig
 cp -p %{SOURCE4} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
-
-cp -p %{SOURCE5} %{buildroot}/%{homedir}/webapp/META-INF/context.xml
 %endif # bootstrap
 
 %pre
@@ -618,9 +663,9 @@ cp -p %{SOURCE5} %{buildroot}/%{homedir}/webapp/META-INF/context.xml
 getent group %{name} >/dev/null || groupadd -f -g %{juid} -r %{name}
 if ! getent passwd %{name} >/dev/null ; then
   if ! getent passwd %{juid} >/dev/null ; then
-    useradd -r -u %{juid} -g %{name} -d %{homedir} -s /sbin/nologin -c "Jenkins Continuous Build server" %{name}
+    useradd -r -u %{juid} -g %{name} -d %{workdir} -s /sbin/nologin -c "Jenkins Continuous Build server" %{name}
   else
-    useradd -r -g %{name} -d %{homedir} -s /sbin/nologin -c "Jenkins Continuous Build server" %{name}
+    useradd -r -g %{name} -d %{workdir} -s /sbin/nologin -c "Jenkins Continuous Build server" %{name}
   fi
 fi
 exit 0
@@ -634,7 +679,6 @@ exit 0
 %postun
 %systemd_postun_with_restart %{name}.service
 
-
 %files core -f .mfiles-core
 %dir %{_javadir}/%{name}
 %doc LICENSE.txt LICENSE-ASL-2.0.txt LICENSE-CDDL.txt
@@ -642,11 +686,11 @@ exit 0
 %files
 %defattr(0664, jenkins, jenkins, 0755)
 %{_sysconfdir}/jenkins
-%attr(0660, jenkins, jenkins) %{_sysconfdir}/jenkins/tomcat-users.xml
 %{_unitdir}/%{name}.service
-%{_datadir}/%{name}/catalina_base
-%attr(0770, jenkins, jenkins) %{_localstatedir}/cache/jenkins
-%attr(0770, jenkins, jenkins) %{_localstatedir}/log/jenkins
+%dir %{homedir}
+%dir %{homedir}/plugins
+%attr(0770, jenkins, jenkins) %{_libexecdir}/%{name}
+%attr(0770, jenkins, jenkins) %{_localstatedir}/log/%{name}
 
 %files plugins-pom -f .mfiles-plugins-pom
 
@@ -656,9 +700,9 @@ exit 0
 
 %if !%{bootstrap}
 %files webapp
-%{homedir}/webapp/*
+%{homedir}/war/
 %config(noreplace) %{_sysconfdir}/sysconfig/%{name}
-%attr(0770, jenkins, jenkins) %dir %{_sharedstatedir}/jenkins
+%attr(0770, jenkins, jenkins) %dir %{workdir}
 %doc LICENSE.txt
 %endif # bootstrap
 
@@ -666,6 +710,12 @@ exit 0
 %doc LICENSE.txt
 
 %changelog
+* Mon Sep 22 2014 Michal Srb <msrb at redhat.com> - 1.581-1
+- Update to upstream version 1.581
+- Migrate to jenkins-winstone
+- Initial support for plugins from RPMs
+- Bugfixes
+
 * Wed Sep 03 2014 Michal Srb <msrb at redhat.com> - 1.578-1
 - Update to upstream version 1.578
 
diff --git a/remove-DataBoundConstructor-annotation-from-abstract.patch b/remove-DataBoundConstructor-annotation-from-abstract.patch
new file mode 100644
index 0000000..e15ea25
--- /dev/null
+++ b/remove-DataBoundConstructor-annotation-from-abstract.patch
@@ -0,0 +1,53 @@
+From 8a831e9956892797cea1cbd761d96076c7ddd552 Mon Sep 17 00:00:00 2001
+From: Michal Srb <msrb at redhat.com>
+Date: Mon, 22 Sep 2014 16:21:19 +0200
+Subject: [PATCH] Remove @DataBoundConstructor annotation from abstract classes
+
+---
+ core/src/main/java/hudson/model/Slave.java                            | 2 --
+ core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java | 2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/core/src/main/java/hudson/model/Slave.java b/core/src/main/java/hudson/model/Slave.java
+index d29ed99..625cea4 100644
+--- a/core/src/main/java/hudson/model/Slave.java
++++ b/core/src/main/java/hudson/model/Slave.java
+@@ -62,7 +62,6 @@ import jenkins.model.Jenkins;
+ import jenkins.slaves.WorkspaceLocator;
+ 
+ import org.apache.commons.io.IOUtils;
+-import org.kohsuke.stapler.DataBoundConstructor;
+ import org.kohsuke.stapler.HttpResponse;
+ import org.kohsuke.stapler.QueryParameter;
+ import org.kohsuke.stapler.StaplerRequest;
+@@ -134,7 +133,6 @@ public abstract class Slave extends Node implements Serializable {
+      */
+     private String userId;
+ 
+-    @DataBoundConstructor
+     public Slave(String name, String nodeDescription, String remoteFS, String numExecutors,
+                  Mode mode, String labelString, ComputerLauncher launcher, RetentionStrategy retentionStrategy, List<? extends NodeProperty<?>> nodeProperties) throws FormException, IOException {
+         this(name,nodeDescription,remoteFS,Util.tryParseNumber(numExecutors, 1).intValue(),mode,labelString,launcher,retentionStrategy, nodeProperties);
+diff --git a/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java b/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java
+index be90b91..384133b 100644
+--- a/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java
++++ b/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java
+@@ -5,7 +5,6 @@ import hudson.node_monitors.DiskSpaceMonitorDescriptor.DiskSpace;
+ 
+ import org.kohsuke.accmod.Restricted;
+ import org.kohsuke.accmod.restrictions.NoExternalUse;
+-import org.kohsuke.stapler.DataBoundConstructor;
+ 
+ import java.text.ParseException;
+ import java.util.logging.Logger;
+@@ -21,7 +20,6 @@ public abstract class AbstractDiskSpaceMonitor extends NodeMonitor {
+      */
+     public final String freeSpaceThreshold;
+ 
+-    @DataBoundConstructor
+     public AbstractDiskSpaceMonitor(String threshold) throws ParseException {
+         this.freeSpaceThreshold = threshold;
+         DiskSpace.parse(threshold); // make sure it parses
+-- 
+1.9.3
+
diff --git a/sources b/sources
index eddc21b..8bdd226 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
 3b83ef96387f14655fc854ddc3c6bd57  LICENSE-2.0.txt
-6fbb85cc80bf5629f78d1f4e37b6e1a3  jenkins-conf.zip
-548575c43b3e68fc522d4810af48128a  jenkins-1.578.tar.gz
+10b68e9d77c23f07ccce8263ed8b51d1  jenkins-1.581.tar.gz


More information about the scm-commits mailing list