提交 22649324 编写于 作者: V Vojtech Juranek

Merge remote-tracking branch 'jenkins/master' into init

......@@ -55,7 +55,17 @@ Upcoming changes</a>
<!-- Record your changes in the trunk here. -->
<div id="trunk" style="display:none"><!--=TRUNK-BEGIN=-->
<ul class=image>
<li class=>
<li class=bug>
Update logging levels in LogRotator - hudson.tasks.LogRotator perform
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-15540">issue 15540</a>)
<li class=bug>
Jobs in folders not displayed when showing tied jobs for a computer or label.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-15666">issue 15666</a>)
<li class=bug>
When installing plugins with overlapping dependencies, Jenkins downloads the duplicate plugins multiple times.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-10569">issue 10569</a>)
<li class=rfe>
Disable Nagle's algorithm for TCP/IP slave connection
</ul>
</div><!--=TRUNK-END=-->
......
......@@ -94,6 +94,8 @@ public final class TcpSlaveAgentListener extends Thread {
// and that goes without unnoticed. However, the time out is often very long (for example 2 hours
// by default in Linux) that this alone is enough to prevent that.
s.setKeepAlive(true);
// we take care of buffering on our own
s.setTcpNoDelay(true);
new ConnectionHandler(s).start();
}
......
......@@ -24,7 +24,6 @@
package hudson.model;
import antlr.ANTLRException;
import hudson.Util;
import static hudson.Util.fixNull;
import hudson.model.labels.LabelAtom;
......@@ -336,7 +335,7 @@ public abstract class Label extends Actionable implements Comparable<Label>, Mod
@Exported
public List<AbstractProject> getTiedJobs() {
List<AbstractProject> r = new ArrayList<AbstractProject>();
for( AbstractProject p : Util.filter(Jenkins.getInstance().getItems(),AbstractProject.class) ) {
for (AbstractProject<?,?> p : Jenkins.getInstance().getAllItems(AbstractProject.class)) {
if(this.equals(p.getAssignedLabel()))
r.add(p);
}
......
......@@ -678,8 +678,13 @@ public class UpdateSite {
Jenkins.getInstance().checkPermission(Jenkins.ADMINISTER);
UpdateCenter uc = Jenkins.getInstance().getUpdateCenter();
for (Plugin dep : getNeededDependencies()) {
LOGGER.log(Level.WARNING, "Adding dependent install of " + dep.name + " for plugin " + name);
dep.deploy(dynamicLoad);
UpdateCenter.InstallationJob job = uc.getJob(dep);
if (job == null || job.status instanceof UpdateCenter.DownloadJob.Failure) {
LOGGER.log(Level.WARNING, "Adding dependent install of " + dep.name + " for plugin " + name);
dep.deploy(dynamicLoad);
} else {
LOGGER.log(Level.WARNING, "Dependent install of " + dep.name + " for plugin " + name + " already added, skipping");
}
}
return uc.addJob(uc.new InstallationJob(this, UpdateSite.this, Jenkins.getAuthentication(), dynamicLoad));
}
......
......@@ -128,7 +128,7 @@ public class LogRotator implements Describable<LogRotator> {
LOGGER.log(FINER,r.getFullDisplayName()+" is not GC-ed because it's the last stable build");
continue;
}
LOGGER.log(FINER,r.getFullDisplayName()+" is to be removed");
LOGGER.log(FINE,r.getFullDisplayName()+" is to be removed");
r.delete();
}
}
......@@ -153,7 +153,7 @@ public class LogRotator implements Describable<LogRotator> {
LOGGER.log(FINER,r.getFullDisplayName()+" is not GC-ed because it's still new");
continue;
}
LOGGER.log(FINER,r.getFullDisplayName()+" is to be removed");
LOGGER.log(FINE,r.getFullDisplayName()+" is to be removed");
r.delete();
}
}
......@@ -173,6 +173,7 @@ public class LogRotator implements Describable<LogRotator> {
LOGGER.log(FINER,r.getFullDisplayName()+" is not purged of artifacts because it's the last stable build");
continue;
}
LOGGER.log(FINE,r.getFullDisplayName()+" is to be purged of artifacts");
r.deleteArtifacts();
}
}
......@@ -197,6 +198,7 @@ public class LogRotator implements Describable<LogRotator> {
LOGGER.log(FINER,r.getFullDisplayName()+" is not purged of artifacts because it's still new");
continue;
}
LOGGER.log(FINE,r.getFullDisplayName()+" is to be purged of artifacts");
r.deleteArtifacts();
}
}
......
......@@ -111,7 +111,7 @@ THE SOFTWARE.
</p>
</j:when>
<j:otherwise>
<t:projectView jobs="${it.tiedJobs}" jobBaseUrl="${rootURL}/" />
<t:projectView jobs="${it.tiedJobs}" jobBaseUrl="${rootURL}/" useFullName="true"/>
</j:otherwise>
</j:choose>
......
......@@ -53,7 +53,7 @@ THE SOFTWARE.
</p>
</j:when>
<j:otherwise>
<t:projectView jobs="${it.tiedJobs}" jobBaseUrl="${rootURL}/" />
<t:projectView jobs="${it.tiedJobs}" jobBaseUrl="${rootURL}/" useFullName="true"/>
</j:otherwise>
</j:choose>
......
......@@ -55,7 +55,12 @@ THE SOFTWARE.
</j:forEach>
<f:block>
<f:submit value="${%Save}" />
<div id="bottom-sticker">
<div class="bottom-sticker-inner">
<f:submit value="${%Save}" />
<f:apply />
</div>
</div>
</f:block>
</f:form>
</l:main-panel>
......
......@@ -25,6 +25,6 @@ THE SOFTWARE.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt">
<td style="${indenter.getCss(job)}">
<a href="${jobBaseUrl}${job.shortUrl}" class='model-link'> ${job.displayName}</a>
<a href="${jobBaseUrl}${job.shortUrl}" class='model-link'> ${useFullName ? job.fullDisplayName : job.displayName}</a>
</td>
</j:jelly>
\ No newline at end of file
......@@ -29,7 +29,11 @@ THE SOFTWARE.
Renders a list of jobs and their key information.
<st:attribute name="jobs" use="required" trim="Collection">
Items to disable.
Items to show.
</st:attribute>
<st:attribute name="useFullName" use="optional" type="boolean">
May be interpreted by columns to display the full name of a job.
Will also append a parent URL to jobBaseUrl if needed.
</st:attribute>
<st:attribute name="jobBaseUrl" type="String">
The base URL of all job links. Normally ${rootURL}/
......@@ -75,7 +79,7 @@ THE SOFTWARE.
</j:forEach>
<j:forEach var="job" items="${jobs}">
<t:projectViewRow />
<t:projectViewRow jobBaseUrl="${useFullName ? jobBaseUrl + job.parent.url : jobBaseUrl}"/>
</j:forEach>
</table>
<t:iconSize><t:rssBar/></t:iconSize>
......
......@@ -197,7 +197,7 @@ THE SOFTWARE.
<dependency>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>remoting</artifactId>
<version>2.17</version>
<version>2.18</version>
</dependency>
<dependency>
......
......@@ -86,7 +86,7 @@ public class SuiteResultTest {
w.close();
}
SuiteResult sr = parseOne(data);
assertHeapUsage(sr, 250 + /* Unicode overhead */2 * (int) (/*259946*/data.length() + /*495600*/data2.length() + /* SuiteResult.file */data.getAbsolutePath().length()));
assertHeapUsage(sr, 300 + /* Unicode overhead */2 * (int) (/*259946*/data.length() + /*495600*/data2.length() + /* SuiteResult.file */data.getAbsolutePath().length()));
// XXX serialize using TestResultAction.XSTREAM and verify that round-tripped object has same size
} finally {
data2.delete();
......
......@@ -9,7 +9,7 @@
specify the path to JUnit XML files in the
<a href="http://ant.apache.org/manual/Types/fileset.html">Ant glob syntax</a>,
such as <tt>**/build/test-reports/*.xml</tt>. Be sure not to include any non-report
files into this pattern.
files into this pattern. You can specify multiple patterns of files separated by commas.
<p>
Once there are a few builds running with test results, you should start seeing
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册