2009-02-07 04:05:24 +08:00
|
|
|
/*
|
|
|
|
|
* The MIT License
|
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Daniel Dyer, Dean Yu
|
|
|
|
|
*
|
|
|
|
|
* 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.
|
|
|
|
|
*/
|
2008-04-01 08:39:36 +08:00
|
|
|
//
|
2009-02-16 07:19:19 +08:00
|
|
|
initOptionalBlock//
|
2007-09-04 01:58:19 +08:00
|
|
|
// JavaScript for Hudson
|
|
|
|
|
// See http://www.ibm.com/developerworks/web/library/wa-memleak/?ca=dgr-lnxw97JavascriptLeaks
|
|
|
|
|
// for memory leak patterns and how to prevent them.
|
|
|
|
|
//
|
|
|
|
|
|
2007-03-26 12:44:40 +08:00
|
|
|
// create a new object whose prototype is the given object
|
|
|
|
|
function object(o) {
|
|
|
|
|
function F() {}
|
|
|
|
|
F.prototype = o;
|
|
|
|
|
return new F();
|
|
|
|
|
}
|
|
|
|
|
|
2006-12-31 05:03:57 +08:00
|
|
|
// id generator
|
|
|
|
|
var iota = 0;
|
|
|
|
|
|
2006-11-06 05:16:01 +08:00
|
|
|
// Form check code
|
|
|
|
|
//========================================================
|
2007-03-12 02:19:38 +08:00
|
|
|
var FormChecker = {
|
2007-09-04 03:38:52 +08:00
|
|
|
// pending requests
|
|
|
|
|
queue : [],
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
inProgress : false,
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2009-01-30 07:52:11 +08:00
|
|
|
/**
|
|
|
|
|
* Schedules a form field check. Executions are serialized to reduce the bandwidth impact.
|
|
|
|
|
*
|
|
|
|
|
* @param url
|
|
|
|
|
* Remote doXYZ URL that performs the check. Query string should include the field value.
|
|
|
|
|
* @param method
|
|
|
|
|
* HTTP method. GET or POST. I haven't confirmed specifics, but some browsers seem to cache GET requests.
|
|
|
|
|
* @param target
|
|
|
|
|
* HTML element whose innerHTML will be overwritten when the check is completed.
|
|
|
|
|
*/
|
2007-09-04 03:38:52 +08:00
|
|
|
delayedCheck : function(url, method, target) {
|
2009-01-30 07:52:11 +08:00
|
|
|
if(url==null || method==null || target==null)
|
|
|
|
|
return; // don't know whether we should throw an exception or ignore this. some broken plugins have illegal parameters
|
2007-09-04 03:38:52 +08:00
|
|
|
this.queue.push({url:url, method:method, target:target});
|
|
|
|
|
this.schedule();
|
|
|
|
|
},
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
sendRequest : function(url, params) {
|
|
|
|
|
if (params.method == "post") {
|
|
|
|
|
var idx = url.indexOf('?');
|
|
|
|
|
params.parameters = url.substring(idx + 1);
|
|
|
|
|
url = url.substring(0, idx);
|
2006-11-06 05:16:01 +08:00
|
|
|
}
|
2007-09-04 03:38:52 +08:00
|
|
|
new Ajax.Request(url, params);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
schedule : function() {
|
|
|
|
|
if (this.inProgress) return;
|
|
|
|
|
if (this.queue.length == 0) return;
|
|
|
|
|
|
|
|
|
|
var next = this.queue.shift();
|
|
|
|
|
this.sendRequest(next.url, {
|
|
|
|
|
method : next.method,
|
|
|
|
|
onComplete : function(x) {
|
|
|
|
|
next.target.innerHTML = x.responseText;
|
|
|
|
|
FormChecker.inProgress = false;
|
|
|
|
|
FormChecker.schedule();
|
|
|
|
|
}
|
|
|
|
|
});
|
2009-01-30 07:52:11 +08:00
|
|
|
this.inProgress = true;
|
2007-09-04 03:38:52 +08:00
|
|
|
}
|
2006-11-06 05:16:01 +08:00
|
|
|
}
|
|
|
|
|
|
2007-12-25 09:18:30 +08:00
|
|
|
// find the nearest ancestor node that has the given tag name
|
|
|
|
|
function findAncestor(e, tagName) {
|
|
|
|
|
do {
|
|
|
|
|
e = e.parentNode;
|
|
|
|
|
} while(e.tagName!=tagName);
|
|
|
|
|
return e;
|
|
|
|
|
}
|
|
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
function findFollowingTR(input, className) {
|
|
|
|
|
// identify the parent TR
|
|
|
|
|
var tr = input;
|
|
|
|
|
while (tr.tagName != "TR")
|
|
|
|
|
tr = tr.parentNode;
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
// then next TR that matches the CSS
|
|
|
|
|
do {
|
|
|
|
|
tr = tr.nextSibling;
|
|
|
|
|
} while (tr.tagName != "TR" || tr.className != className);
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
return tr;
|
2006-11-06 05:16:01 +08:00
|
|
|
}
|
|
|
|
|
|
Merged revisions 11754-11755,11763-11766,11770,11773-11777,11791-11797,11828-11829,11831-11839,11841-11843,11850,11854,11994,12774,12778-12793,12820-12822,12831-12841,12854-12855,12860-12882,12896-12905,12914-12920,12938-12941,12950,13045-13046,13048,13063-13064,13066,13072-13076,13111,13122-13147,13150,13153-13158,13487-13488,13851-13852,13854-13856,13859,13866-13867,13869,13872-13876,13878-13879,13883-13885,13887-13890,13896-13919 via svnmerge from
https://www.dev.java.net/svn/hudson/branches/multiple-computer-per-node
................
r11754 | kohsuke | 2008-08-25 17:59:14 -0700 (Mon, 25 Aug 2008) | 3 lines
Adding EphemeralNode for non-persisted dynamically-allocated expandable/shrinkable slave pool.
Tweaked the serialization of Hudson.slaves accordingly.
................
r11755 | kohsuke | 2008-08-25 18:10:42 -0700 (Mon, 25 Aug 2008) | 1 line
making a small improvements
................
r11763 | kohsuke | 2008-08-26 13:57:25 -0700 (Tue, 26 Aug 2008) | 1 line
adding more convenience methods
................
r11764 | kohsuke | 2008-08-26 14:24:20 -0700 (Tue, 26 Aug 2008) | 1 line
ported mask capability from the TFS plugin to the core.
................
r11765 | kohsuke | 2008-08-26 14:26:25 -0700 (Tue, 26 Aug 2008) | 1 line
making it non-final to allow for subclassing
................
r11766 | kohsuke | 2008-08-26 14:35:20 -0700 (Tue, 26 Aug 2008) | 1 line
test case for NodeList
................
r11770 | kohsuke | 2008-08-26 15:15:21 -0700 (Tue, 26 Aug 2008) | 3 lines
Wrote a simple tool that monitors a file system change (in a poor way) and triggers a build.
................
r11773 | kohsuke | 2008-08-26 17:20:30 -0700 (Tue, 26 Aug 2008) | 1 line
made more structured
................
r11774 | kohsuke | 2008-08-26 17:47:41 -0700 (Tue, 26 Aug 2008) | 1 line
indentation fix
................
r11775 | kohsuke | 2008-08-26 17:48:22 -0700 (Tue, 26 Aug 2008) | 1 line
remove the use of a deprecated feature.
................
r11776 | kohsuke | 2008-08-26 17:51:54 -0700 (Tue, 26 Aug 2008) | 1 line
renamed to 'ALL' to be consistent with recent use of DescriptorList
................
r11777 | kohsuke | 2008-08-26 18:04:17 -0700 (Tue, 26 Aug 2008) | 1 line
adding NodeFactory list and its configuration mechanism
................
r11791 | kohsuke | 2008-08-27 09:43:38 -0700 (Wed, 27 Aug 2008) | 1 line
picked up the latest jelly with Iterable support in <j:forEach>
................
r11792 | kohsuke | 2008-08-27 09:44:08 -0700 (Wed, 27 Aug 2008) | 1 line
Iterable support added in commons-jelly 1.1-hudson-20080826
................
r11793 | kohsuke | 2008-08-27 10:15:14 -0700 (Wed, 27 Aug 2008) | 2 lines
- added name to NodeFactory for binding NodeFactory to URL tree.
- NodeFactory should be access controlled
................
r11794 | kohsuke | 2008-08-27 10:41:11 -0700 (Wed, 27 Aug 2008) | 1 line
added a method to add one Node at a time
................
r11795 | kohsuke | 2008-08-27 10:41:37 -0700 (Wed, 27 Aug 2008) | 1 line
added permission constatnt
................
r11796 | kohsuke | 2008-08-27 10:42:13 -0700 (Wed, 27 Aug 2008) | 1 line
allowing the launch method to throw an exception.
................
r11797 | kohsuke | 2008-08-27 10:44:13 -0700 (Wed, 27 Aug 2008) | 1 line
improving the handling
................
r11828 | kohsuke | 2008-08-29 11:07:16 -0700 (Fri, 29 Aug 2008) | 1 line
added executor config to the sidebar.
................
r11829 | kohsuke | 2008-08-29 11:16:11 -0700 (Fri, 29 Aug 2008) | 1 line
"it" should be assigned to NodeFactory
................
r11831 | kohsuke | 2008-08-29 11:44:41 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11832 | kohsuke | 2008-08-29 11:59:21 -0700 (Fri, 29 Aug 2008) | 1 line
added a script to create a flashing image from any picture
................
r11833 | kohsuke | 2008-08-29 12:07:56 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11834 | kohsuke | 2008-08-29 13:37:59 -0700 (Fri, 29 Aug 2008) | 1 line
added new images to indicate that a slave is launching
................
r11835 | kohsuke | 2008-08-29 13:43:41 -0700 (Fri, 29 Aug 2008) | 1 line
indicate a launching slave accordingly.
................
r11836 | kohsuke | 2008-08-29 14:02:28 -0700 (Fri, 29 Aug 2008) | 1 line
added a method to remove a Node.
................
r11837 | kohsuke | 2008-08-29 14:02:38 -0700 (Fri, 29 Aug 2008) | 1 line
disconnect
................
r11838 | kohsuke | 2008-08-29 14:03:22 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11839 | kohsuke | 2008-08-29 14:14:04 -0700 (Fri, 29 Aug 2008) | 1 line
allowing subclasses.
................
r11841 | kohsuke | 2008-08-29 14:28:29 -0700 (Fri, 29 Aug 2008) | 1 line
constructor should be the first in the definition.
................
r11842 | kohsuke | 2008-08-29 14:31:01 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11843 | kohsuke | 2008-08-29 14:32:48 -0700 (Fri, 29 Aug 2008) | 1 line
fixed a problem of using partially constructed object during launch(), because the setNode() method is called from the Computer constructor.
................
r11850 | kohsuke | 2008-08-29 14:50:36 -0700 (Fri, 29 Aug 2008) | 1 line
serialize NodeFactory first so that references to them from NodeList will become references in XML.
................
r11854 | kohsuke | 2008-08-29 14:56:56 -0700 (Fri, 29 Aug 2008) | 1 line
cleaning up a bit.
................
r11994 | kohsuke | 2008-09-03 14:42:11 -0700 (Wed, 03 Sep 2008) | 21 lines
Fixed ArrayIndexOutOfBoundsException during replace(), when the title contains a '$' literal.
The typical stack trace looks like:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 32
at hudson.MarkupText$SubText.start(MarkupText.java:95)
at hudson.MarkupText$SubText.group(MarkupText.java:131)
at hudson.MarkupText$SubText.replace(MarkupText.java:154)
at hudson.MarkupText$SubText.surroundWith(MarkupText.java:83)
at
hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:37)
at
hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:117)
... 148 more
Vijayan Jayaraman and I found this problem while we were looking at the server log of Hudson for OpenJFX.
Adding a unit test to verify this behavior, too.
................
r12774 | kohsuke | 2008-10-27 15:03:36 -0700 (Mon, 27 Oct 2008) | 3 lines
preparing for heterogenousness in Node, so that different Node can be configured with different UIs, much like how different Jobs can be configured.
Creating a slave works also like creating a new job.
................
r12778 | kohsuke | 2008-10-27 15:06:51 -0700 (Mon, 27 Oct 2008) | 1 line
We need to be able to create an emtpy Slave initially, so we have to do with the check in the form field validation.
................
r12779 | kohsuke | 2008-10-27 15:48:04 -0700 (Mon, 27 Oct 2008) | 1 line
making the new slave page a two-step process
................
r12780 | kohsuke | 2008-10-27 15:48:24 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a compilation problem
................
r12781 | kohsuke | 2008-10-27 15:53:30 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12782 | kohsuke | 2008-10-27 15:58:20 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12783 | kohsuke | 2008-10-27 16:08:56 -0700 (Mon, 27 Oct 2008) | 1 line
making the configuration page work for slaves
................
r12784 | kohsuke | 2008-10-27 16:35:17 -0700 (Mon, 27 Oct 2008) | 1 line
added new-computer.svg
................
r12785 | kohsuke | 2008-10-27 16:37:26 -0700 (Mon, 27 Oct 2008) | 1 line
hooking up the config/create pages to the UI
................
r12786 | kohsuke | 2008-10-27 16:44:40 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a copy method.
................
r12787 | kohsuke | 2008-10-27 16:47:33 -0700 (Mon, 27 Oct 2008) | 1 line
code was broken when a slave was renamed
................
r12788 | kohsuke | 2008-10-27 16:58:04 -0700 (Mon, 27 Oct 2008) | 1 line
moving out the commonality into a new tag
................
r12789 | kohsuke | 2008-10-27 17:01:21 -0700 (Mon, 27 Oct 2008) | 1 line
consistent term usage
................
r12790 | kohsuke | 2008-10-27 17:03:19 -0700 (Mon, 27 Oct 2008) | 1 line
retiring the configureExecutors. Slave configuration is now moved to individual slave page
................
r12791 | kohsuke | 2008-10-27 17:10:32 -0700 (Mon, 27 Oct 2008) | 1 line
retired configureExecutors.jelly and completed moved its contents to somewhere else
................
r12792 | kohsuke | 2008-10-27 17:21:53 -0700 (Mon, 27 Oct 2008) | 1 line
bug fix. request handling of "/descriptor/FQCN/..." was broken.
................
r12793 | kohsuke | 2008-10-27 17:27:08 -0700 (Mon, 27 Oct 2008) | 1 line
NodeFactory -> Cloud to encourage consistent term usage between the code and the UI.
................
r12820 | kohsuke | 2008-10-29 10:58:20 -0700 (Wed, 29 Oct 2008) | 1 line
formatting fix
................
r12821 | kohsuke | 2008-10-29 11:17:49 -0700 (Wed, 29 Oct 2008) | 1 line
added classes for handling a secret and prevent accidental exposure of a secret in the persisted form
................
r12822 | kohsuke | 2008-10-29 11:32:39 -0700 (Wed, 29 Oct 2008) | 1 line
added a base64 validator
................
r12831 | kohsuke | 2008-10-29 15:58:45 -0700 (Wed, 29 Oct 2008) | 1 line
secret key needs to be persisted outside config.xml (and it is, already!)
................
r12832 | kohsuke | 2008-10-29 16:06:28 -0700 (Wed, 29 Oct 2008) | 1 line
started working on Amazon EC2 plugin
................
r12833 | kohsuke | 2008-10-29 16:09:20 -0700 (Wed, 29 Oct 2008) | 1 line
brought the same enhancement as in <textbox />
................
r12834 | kohsuke | 2008-10-29 16:15:05 -0700 (Wed, 29 Oct 2008) | 1 line
copy over the onclick handler from the original button element
................
r12835 | kohsuke | 2008-10-29 17:01:04 -0700 (Wed, 29 Oct 2008) | 1 line
allow OK messages to be sent with some mark up.
................
r12836 | kohsuke | 2008-10-29 17:06:52 -0700 (Wed, 29 Oct 2008) | 1 line
added connection testing. This pattern needs to be generalized since it happens often
................
r12837 | kohsuke | 2008-10-29 17:13:11 -0700 (Wed, 29 Oct 2008) | 1 line
this is little better
................
r12838 | kohsuke | 2008-10-29 17:17:44 -0700 (Wed, 29 Oct 2008) | 1 line
added spinner
................
r12839 | kohsuke | 2008-10-29 17:31:54 -0700 (Wed, 29 Oct 2008) | 1 line
restructuring the validation button support in a form that can be readily moved to the core.
................
r12840 | kohsuke | 2008-10-29 18:01:41 -0700 (Wed, 29 Oct 2008) | 1 line
added <f:validateButton/> for multi-field server-side validation
................
r12841 | kohsuke | 2008-10-29 18:03:12 -0700 (Wed, 29 Oct 2008) | 1 line
logic moved to <f:validateButton/> in the core.
................
r12854 | kohsuke | 2008-10-30 13:32:58 -0700 (Thu, 30 Oct 2008) | 1 line
@QueryParameter.value won't be necessary any more
................
r12855 | kohsuke | 2008-10-30 13:42:58 -0700 (Thu, 30 Oct 2008) | 1 line
need a strongly-typed constructor.
................
r12860 | kohsuke | 2008-10-30 15:24:18 -0700 (Thu, 30 Oct 2008) | 1 line
adding more reflection support, which in turn we use in taglibs to raise the level of abstraction.
................
r12861 | kohsuke | 2008-10-30 15:33:22 -0700 (Thu, 30 Oct 2008) | 1 line
added a tag to create databinding to a<select> element from an enum property
................
r12862 | kohsuke | 2008-10-30 15:37:44 -0700 (Thu, 30 Oct 2008) | 1 line
adding a smarter bi-directional binding through <f:repeatable field="..."/>
................
r12863 | kohsuke | 2008-10-30 15:47:48 -0700 (Thu, 30 Oct 2008) | 1 line
making progress with the EC2 support
................
r12864 | kohsuke | 2008-10-30 16:12:34 -0700 (Thu, 30 Oct 2008) | 1 line
added form field validation for AMI ID
................
r12865 | kohsuke | 2008-10-30 16:15:44 -0700 (Thu, 30 Oct 2008) | 1 line
added simpler version
................
r12866 | kohsuke | 2008-10-30 16:17:15 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12867 | kohsuke | 2008-10-30 16:17:19 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12868 | kohsuke | 2008-10-30 16:40:25 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12869 | kohsuke | 2008-10-30 17:00:57 -0700 (Thu, 30 Oct 2008) | 1 line
adding the provisioning of the new slave
................
r12870 | kohsuke | 2008-10-30 17:07:27 -0700 (Thu, 30 Oct 2008) | 1 line
/** {@inheritDoc} */ is the default behavior for javadoc, so there's no point in making that explicit.
................
r12871 | kohsuke | 2008-10-30 17:11:04 -0700 (Thu, 30 Oct 2008) | 1 line
doc bug fix
................
r12872 | kohsuke | 2008-10-30 17:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12873 | kohsuke | 2008-10-30 17:19:06 -0700 (Thu, 30 Oct 2008) | 1 line
added RetentionStrategy for EC2 instances
................
r12874 | kohsuke | 2008-10-30 17:21:17 -0700 (Thu, 30 Oct 2008) | 1 line
allowing subclasses to override the disconnect behavior.
................
r12875 | kohsuke | 2008-10-30 18:02:35 -0700 (Thu, 30 Oct 2008) | 1 line
added termination
................
r12876 | kohsuke | 2008-10-30 18:05:30 -0700 (Thu, 30 Oct 2008) | 1 line
forgot to rename when NodeFactory was renamed to Cloud
................
r12877 | kohsuke | 2008-10-30 18:06:08 -0700 (Thu, 30 Oct 2008) | 1 line
using the console icon
................
r12878 | kohsuke | 2008-10-30 18:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
adding UI to remove a slave.
................
r12879 | kohsuke | 2008-10-30 18:48:57 -0700 (Thu, 30 Oct 2008) | 1 line
commons-discovery now needed in stapler
................
r12880 | kohsuke | 2008-10-30 18:50:27 -0700 (Thu, 30 Oct 2008) | 1 line
needs to use a newer version of stapler
................
r12881 | kohsuke | 2008-10-30 18:51:02 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12882 | kohsuke | 2008-10-30 18:51:43 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12896 | kohsuke | 2008-10-31 14:52:07 -0700 (Fri, 31 Oct 2008) | 1 line
fixed the ordering between field and the mighty get(String) method.
................
r12897 | kohsuke | 2008-10-31 15:08:41 -0700 (Fri, 31 Oct 2008) | 1 line
fixed test compilation problems
................
r12898 | kohsuke | 2008-10-31 15:11:25 -0700 (Fri, 31 Oct 2008) | 1 line
marking this as a model object since it's always bound to URL.
................
r12899 | kohsuke | 2008-10-31 15:13:42 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up to manually provision a new node
................
r12900 | kohsuke | 2008-10-31 15:14:00 -0700 (Fri, 31 Oct 2008) | 1 line
after merging the trunk the version number is different
................
r12901 | kohsuke | 2008-10-31 15:21:54 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up for provisioning a new slave
................
r12902 | kohsuke | 2008-10-31 15:45:10 -0700 (Fri, 31 Oct 2008) | 1 line
adding a hook to decorate ComputerLauncher.
................
r12903 | kohsuke | 2008-10-31 15:48:21 -0700 (Fri, 31 Oct 2008) | 1 line
added filtering support
................
r12904 | kohsuke | 2008-10-31 15:52:45 -0700 (Fri, 31 Oct 2008) | 1 line
added view
................
r12905 | kohsuke | 2008-10-31 15:53:49 -0700 (Fri, 31 Oct 2008) | 1 line
doc improvement
................
r12914 | kohsuke | 2008-11-01 17:45:57 -0700 (Sat, 01 Nov 2008) | 1 line
adding code for connecting with SSH
................
r12915 | kohsuke | 2008-11-01 17:49:28 -0700 (Sat, 01 Nov 2008) | 1 line
working on launchers
................
r12916 | kohsuke | 2008-11-01 18:33:12 -0700 (Sat, 01 Nov 2008) | 1 line
added a method to fully read a stream
................
r12917 | kohsuke | 2008-11-01 18:33:45 -0700 (Sat, 01 Nov 2008) | 1 line
bumped up stapler
................
r12918 | kohsuke | 2008-11-01 18:39:41 -0700 (Sat, 01 Nov 2008) | 1 line
doc improvement.
................
r12919 | kohsuke | 2008-11-01 18:45:24 -0700 (Sat, 01 Nov 2008) | 1 line
added a launcher
................
r12920 | kohsuke | 2008-11-01 18:55:02 -0700 (Sat, 01 Nov 2008) | 1 line
implementing the actual ComputerLauncher
................
r12938 | kohsuke | 2008-11-02 08:56:05 -0800 (Sun, 02 Nov 2008) | 1 line
support the field notation
................
r12939 | kohsuke | 2008-11-02 09:20:21 -0800 (Sun, 02 Nov 2008) | 1 line
added the mechanism to execute the init script
................
r12940 | kohsuke | 2008-11-02 09:21:38 -0800 (Sun, 02 Nov 2008) | 1 line
simplification
................
r12941 | kohsuke | 2008-11-02 09:36:21 -0800 (Sun, 02 Nov 2008) | 1 line
adding key handling
................
r12950 | kohsuke | 2008-11-03 11:00:58 -0800 (Mon, 03 Nov 2008) | 1 line
formatting changes
................
r13045 | kohsuke | 2008-11-06 15:24:32 -0800 (Thu, 06 Nov 2008) | 1 line
adding time series datatype for retaining load average statistics in memory
................
r13046 | kohsuke | 2008-11-06 15:59:02 -0800 (Thu, 06 Nov 2008) | 1 line
added a convenience method.
................
r13048 | kohsuke | 2008-11-06 16:21:54 -0800 (Thu, 06 Nov 2008) | 2 lines
- started monitoring # of executor statistics.
- exposed label to the remote API
................
r13063 | kohsuke | 2008-11-07 13:05:15 -0800 (Fri, 07 Nov 2008) | 1 line
added a convenience method.
................
r13064 | kohsuke | 2008-11-07 13:11:08 -0800 (Fri, 07 Nov 2008) | 1 line
monitor the length of the queue too
................
r13066 | kohsuke | 2008-11-07 14:15:56 -0800 (Fri, 07 Nov 2008) | 1 line
moved the stats to its own class.
................
r13072 | kohsuke | 2008-11-07 15:40:29 -0800 (Fri, 07 Nov 2008) | 1 line
adding provisioning logic based on load statistics
................
r13073 | kohsuke | 2008-11-07 15:46:00 -0800 (Fri, 07 Nov 2008) | 1 line
for effective testing, we need sub-sec precision
................
r13074 | kohsuke | 2008-11-07 16:24:44 -0800 (Fri, 07 Nov 2008) | 1 line
fixed a lie.
................
r13075 | kohsuke | 2008-11-07 16:25:12 -0800 (Fri, 07 Nov 2008) | 1 line
bug fix
................
r13076 | kohsuke | 2008-11-07 16:30:55 -0800 (Fri, 07 Nov 2008) | 1 line
avoid using deprecated methods
................
r13111 | kohsuke | 2008-11-09 11:54:23 -0800 (Sun, 09 Nov 2008) | 1 line
added the Future<?> return parameter to Computer.launch(). To do this w/o breaking compatibility, renamed launch to connect.
................
r13122 | kohsuke | 2008-11-10 14:38:03 -0800 (Mon, 10 Nov 2008) | 1 line
allow programmatic update of the assigned label
................
r13123 | kohsuke | 2008-11-10 14:38:40 -0800 (Mon, 10 Nov 2008) | 1 line
Iterator not needed because CopyOnWriteArrayList doesn't support removal via iterator.
................
r13124 | kohsuke | 2008-11-10 14:39:24 -0800 (Mon, 10 Nov 2008) | 1 line
added another Builder for tests
................
r13125 | kohsuke | 2008-11-10 14:39:48 -0800 (Mon, 10 Nov 2008) | 1 line
simplified a bit. This TestEnvironment stuff needs some clearer story.
................
r13126 | kohsuke | 2008-11-10 14:46:40 -0800 (Mon, 10 Nov 2008) | 1 line
IDEA complains about this.
................
r13127 | kohsuke | 2008-11-10 14:51:53 -0800 (Mon, 10 Nov 2008) | 1 line
improved the error diagnostics by displaying why a provisioned node failed to launch
................
r13128 | kohsuke | 2008-11-10 14:52:12 -0800 (Mon, 10 Nov 2008) | 1 line
Started a test case for NodeProvisioner
................
r13129 | kohsuke | 2008-11-10 14:52:27 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13130 | kohsuke | 2008-11-10 15:16:02 -0800 (Mon, 10 Nov 2008) | 1 line
report the failure as a failure.
................
r13131 | kohsuke | 2008-11-10 16:34:23 -0800 (Mon, 10 Nov 2008) | 1 line
adding a parameter to the connect method to support joining to the pending launch activity.
................
r13132 | kohsuke | 2008-11-10 16:38:31 -0800 (Mon, 10 Nov 2008) | 1 line
making members public so that it can be accessed from other classes (DummyCloudImpl was the first to do this)
................
r13133 | kohsuke | 2008-11-10 16:38:58 -0800 (Mon, 10 Nov 2008) | 1 line
split the cloud implementation to a separate class to allow reuse.
................
r13134 | kohsuke | 2008-11-10 16:56:27 -0800 (Mon, 10 Nov 2008) | 1 line
assign unique names to support multiple jobs
................
r13135 | kohsuke | 2008-11-10 17:11:31 -0800 (Mon, 10 Nov 2008) | 1 line
avoid unnecessary interruption
................
r13136 | kohsuke | 2008-11-10 17:11:41 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13137 | kohsuke | 2008-11-10 17:16:28 -0800 (Mon, 10 Nov 2008) | 1 line
cleaned up a test case
................
r13138 | kohsuke | 2008-11-10 17:36:52 -0800 (Mon, 10 Nov 2008) | 1 line
since the setNode method is called on every Computer just by adding a new node, don't force a new launch attempt.
................
r13139 | kohsuke | 2008-11-10 17:37:38 -0800 (Mon, 10 Nov 2008) | 1 line
perform orderly shutdown by giving computers enough time to disconnect.
................
r13140 | kohsuke | 2008-11-10 17:38:08 -0800 (Mon, 10 Nov 2008) | 3 lines
return Future for synchronization.
This breaks binary compatibility, but I checked none of the plugins in Hudson SVN uses this, so I hope this is OK.
................
r13141 | kohsuke | 2008-11-10 17:38:46 -0800 (Mon, 10 Nov 2008) | 1 line
improved diagnostics
................
r13142 | kohsuke | 2008-11-10 17:39:55 -0800 (Mon, 10 Nov 2008) | 1 line
removed compiler warning
................
r13143 | kohsuke | 2008-11-10 18:02:56 -0800 (Mon, 10 Nov 2008) | 1 line
hide the rounding related problem from Cloud by passing int instead of float.
................
r13144 | kohsuke | 2008-11-10 18:10:10 -0800 (Mon, 10 Nov 2008) | 1 line
bug fix
................
r13145 | kohsuke | 2008-11-10 18:11:51 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13146 | kohsuke | 2008-11-10 18:15:08 -0800 (Mon, 10 Nov 2008) | 1 line
moved the slave launch code to HudsonTestCase for reuse
................
r13147 | kohsuke | 2008-11-10 18:20:19 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13150 | kohsuke | 2008-11-11 07:28:53 -0800 (Tue, 11 Nov 2008) | 1 line
bug fix
................
r13153 | kohsuke | 2008-11-11 14:04:21 -0800 (Tue, 11 Nov 2008) | 1 line
cutting down the test size to 5 to increase the test speed
................
r13154 | kohsuke | 2008-11-11 14:04:37 -0800 (Tue, 11 Nov 2008) | 1 line
improved debuggability
................
r13155 | kohsuke | 2008-11-11 14:10:04 -0800 (Tue, 11 Nov 2008) | 1 line
added another convenience method
................
r13156 | kohsuke | 2008-11-11 14:10:21 -0800 (Tue, 11 Nov 2008) | 1 line
further reduce the test turn around time
................
r13157 | kohsuke | 2008-11-11 14:22:03 -0800 (Tue, 11 Nov 2008) | 1 line
doc improvement and clean up
................
r13158 | kohsuke | 2008-11-11 14:22:28 -0800 (Tue, 11 Nov 2008) | 1 line
added a new metho
................
r13487 | kohsuke | 2008-12-09 17:17:30 -0800 (Tue, 09 Dec 2008) | 1 line
SlaveTemplate needs to be able to computer # of executors.
................
r13488 | kohsuke | 2008-12-09 17:18:05 -0800 (Tue, 09 Dec 2008) | 1 line
fixed a compilation problem with the latest head of the branch
................
r13851 | kohsuke | 2008-12-24 13:40:43 -0800 (Wed, 24 Dec 2008) | 82 lines
fixed a dead lock reported by Jesse.
Found one Java-level deadlock:
=============================
"Executor #0 for master":
waiting to lock monitor 0x09409bac (object 0x87474ca0, a hudson.util.CopyOnWriteMap$Hash),
which is held by "main"
"main":
waiting to lock monitor 0x09409b48 (object 0x87474d48, a hudson.model.Hudson$MasterComputer),
which is held by "Executor #0 for master"
Java stack information for the threads listed above:
===================================================
"Executor #0 for master":
at hudson.util.CopyOnWriteMap.remove(CopyOnWriteMap.java:78)
- waiting to lock <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.removeComputer(Hudson.java:717)
at hudson.model.Computer.removeExecutor(Computer.java:433)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Executor.run(Executor.java:65)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
"main":
at hudson.model.Computer.setNumExecutors(Computer.java:338)
- waiting to lock <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Computer.setNode(Computer.java:327)
at hudson.model.Hudson.updateComputer(Hudson.java:704)
at hudson.model.Hudson.updateComputerList(Hudson.java:685)
- locked <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.setNodes(Hudson.java:1076)
at hudson.model.Hudson.addNode(Hudson.java:1060)
- locked <0x87474cb0> (a hudson.model.Hudson)
at org.jvnet.hudson.test.HudsonTestCase.createSlave(HudsonTestCase.java:247)
at hudson.slaves.NodeProvisionerTest.testBaselineSlaveUsage(NodeProvisionerTest.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at org.jvnet.hudson.test.HudsonTestCase.runTest(HudsonTestCase.java:151)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:241)
at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:537)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Found 1 deadlock.
................
r13852 | kohsuke | 2008-12-24 14:32:29 -0800 (Wed, 24 Dec 2008) | 1 line
bug fix in the test case.
................
r13854 | kohsuke | 2008-12-24 15:20:22 -0800 (Wed, 24 Dec 2008) | 2 lines
Using a new version of Rhino to get a proper exception chaining.
................
r13855 | kohsuke | 2008-12-24 15:22:13 -0800 (Wed, 24 Dec 2008) | 1 line
typo
................
r13856 | kohsuke | 2008-12-24 15:37:56 -0800 (Wed, 24 Dec 2008) | 1 line
CR shouldn't be in the repository
................
r13859 | kohsuke | 2008-12-24 15:50:32 -0800 (Wed, 24 Dec 2008) | 3 lines
Fixed svn:eol-style.
................
r13866 | kohsuke | 2008-12-24 21:26:43 -0800 (Wed, 24 Dec 2008) | 3 lines
Copying rev.13860 to retry a merge that now looks suspicious.
................
r13869 | kohsuke | 2008-12-24 22:03:46 -0800 (Wed, 24 Dec 2008) | 2 lines
The 2nd merge was successful, so adopting the successful merge as the multiple-computer-per-node branch.
................
r13872 | kohsuke | 2008-12-25 07:28:37 -0800 (Thu, 25 Dec 2008) | 1 line
fixed a test failure
................
r13873 | kohsuke | 2008-12-25 08:16:49 -0800 (Thu, 25 Dec 2008) | 1 line
expanded NodeProvisioner to work on per-label basis
................
r13874 | kohsuke | 2008-12-25 08:27:32 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13875 | kohsuke | 2008-12-25 08:33:17 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13876 | kohsuke | 2008-12-25 08:45:03 -0800 (Thu, 25 Dec 2008) | 3 lines
[HUDSON-2605] Strangely, I discovered that on some File, which is new File("./target/hudson-for-test"), file.exists()==false but file.getAbsoluteFile().exists()==true.
It looks like this happens when $PWD of the process at the OS level is different from System.getProperty("user.dir")
................
r13878 | kohsuke | 2008-12-25 15:52:45 -0800 (Thu, 25 Dec 2008) | 1 line
added a marker file
................
r13879 | kohsuke | 2008-12-25 15:53:13 -0800 (Thu, 25 Dec 2008) | 1 line
use marker file to find the hudson main workspace.
................
r13883 | kohsuke | 2008-12-26 07:50:44 -0800 (Fri, 26 Dec 2008) | 1 line
avoid using a deprecated method.
................
r13884 | kohsuke | 2008-12-26 07:50:59 -0800 (Fri, 26 Dec 2008) | 1 line
adding more probes
................
r13885 | kohsuke | 2008-12-26 08:15:42 -0800 (Fri, 26 Dec 2008) | 1 line
for analyzing test failures, capturing the output is crucial.
................
r13887 | kohsuke | 2008-12-26 11:25:12 -0800 (Fri, 26 Dec 2008) | 1 line
allow sub-types to intercept mutation
................
r13888 | kohsuke | 2008-12-26 11:26:01 -0800 (Fri, 26 Dec 2008) | 1 line
clouds need to be taken into account before marking a label as pointless.
................
r13889 | kohsuke | 2008-12-26 11:26:40 -0800 (Fri, 26 Dec 2008) | 3 lines
fixing bugs in NodeProvisioner.
Conservative estimate on idle executors have to be max, not min.
................
r13890 | kohsuke | 2008-12-26 11:42:53 -0800 (Fri, 26 Dec 2008) | 1 line
turns out the problem was that we were adding multiple slaves under the same name, which confused Hudson to no end.
................
r13896 | kohsuke | 2008-12-27 07:44:20 -0800 (Sat, 27 Dec 2008) | 1 line
formatting changes
................
r13897 | kohsuke | 2008-12-27 07:45:00 -0800 (Sat, 27 Dec 2008) | 1 line
reprot the test name to stdout so that one can easily distinguish different tests in target/surefire-reports/xyz-output.txt
................
r13898 | kohsuke | 2008-12-27 07:54:53 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13899 | kohsuke | 2008-12-27 09:59:07 -0800 (Sat, 27 Dec 2008) | 1 line
split the functionality into two classes
................
r13900 | kohsuke | 2008-12-27 10:00:29 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13901 | kohsuke | 2008-12-27 10:06:24 -0800 (Sat, 27 Dec 2008) | 1 line
added 'tick'
................
r13902 | kohsuke | 2008-12-27 10:08:04 -0800 (Sat, 27 Dec 2008) | 1 line
adding graph rendering of the load statistics
................
r13903 | kohsuke | 2008-12-27 10:19:41 -0800 (Sat, 27 Dec 2008) | 1 line
improved graph layout
................
r13904 | kohsuke | 2008-12-27 10:21:05 -0800 (Sat, 27 Dec 2008) | 1 line
Picker -> TimeScale to better reflect what it is.
................
r13905 | kohsuke | 2008-12-27 10:40:27 -0800 (Sat, 27 Dec 2008) | 1 line
duplicate
................
r13906 | kohsuke | 2008-12-27 14:39:36 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to a shorter name
................
r13907 | kohsuke | 2008-12-27 15:03:25 -0800 (Sat, 27 Dec 2008) | 1 line
added icons
................
r13908 | kohsuke | 2008-12-27 16:20:37 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to make 'loadStatistics' the URL binding.
................
r13909 | kohsuke | 2008-12-27 16:21:01 -0800 (Sat, 27 Dec 2008) | 1 line
exposing loadStatistics for Computer for better URL binding
................
r13910 | kohsuke | 2008-12-27 16:21:16 -0800 (Sat, 27 Dec 2008) | 1 line
adding UI support
................
r13911 | kohsuke | 2008-12-27 19:31:43 -0800 (Sat, 27 Dec 2008) | 1 line
added some basic visualization
................
r13912 | kohsuke | 2008-12-27 19:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
if there's no description, don't even show it.
................
r13913 | kohsuke | 2008-12-27 19:39:26 -0800 (Sat, 27 Dec 2008) | 1 line
added load statistics page for the label as well.
................
r13914 | kohsuke | 2008-12-27 19:48:55 -0800 (Sat, 27 Dec 2008) | 1 line
added one more convenience method.
................
r13915 | kohsuke | 2008-12-27 19:54:29 -0800 (Sat, 27 Dec 2008) | 1 line
refactored so that a different Dataset can be fed.
................
r13916 | kohsuke | 2008-12-27 19:59:20 -0800 (Sat, 27 Dec 2008) | 1 line
added global load statistics lnk to the management screen.
................
r13917 | kohsuke | 2008-12-27 20:31:01 -0800 (Sat, 27 Dec 2008) | 1 line
<dt>s should use the bold font to distinguish them from <dd>s
................
r13918 | kohsuke | 2008-12-27 20:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
r13919 | kohsuke | 2008-12-27 20:35:39 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14215 71c3de6d-444a-0410-be80-ed276b4c234a
2009-01-07 09:02:56 +08:00
|
|
|
/**
|
|
|
|
|
* Traverses a form in the reverse document order starting from the given element (but excluding it),
|
|
|
|
|
* until the given filter matches, or run out of an element.
|
|
|
|
|
*/
|
|
|
|
|
function findPrevious(src,filter) {
|
|
|
|
|
function prev(e) {
|
|
|
|
|
var p = e.previousSibling;
|
|
|
|
|
if(p==null) return e.parentNode;
|
|
|
|
|
while(p.lastChild!=null)
|
|
|
|
|
p = p.lastChild;
|
|
|
|
|
return p;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while(src!=null) {
|
|
|
|
|
src = prev(src);
|
|
|
|
|
if(filter(src))
|
|
|
|
|
return src;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Traverses a form in the reverse document order and finds an INPUT element that matches the given name.
|
|
|
|
|
*/
|
|
|
|
|
function findPreviousFormItem(src,name) {
|
|
|
|
|
var name2 = "_."+name; // handles <textbox field="..." /> notation silently
|
|
|
|
|
return findPrevious(src,function(e){ return e.tagName=="INPUT" && (e.name==name || e.name==name2); });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2007-06-13 12:31:20 +08:00
|
|
|
// shared tooltip object
|
|
|
|
|
var tooltip;
|
2006-11-06 05:16:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Behavior rules
|
|
|
|
|
//========================================================
|
2007-09-04 00:46:57 +08:00
|
|
|
// using tag names in CSS selector makes the processing faster
|
2007-09-04 00:46:13 +08:00
|
|
|
function registerValidator(e) {
|
2007-09-04 03:38:52 +08:00
|
|
|
e.targetElement = findFollowingTR(e, "validation-error-area").firstChild.nextSibling;
|
|
|
|
|
e.targetUrl = function() {
|
|
|
|
|
return eval(this.getAttribute("checkUrl"));
|
|
|
|
|
};
|
2007-09-04 00:46:13 +08:00
|
|
|
var method = e.getAttribute("checkMethod");
|
2007-09-04 03:38:52 +08:00
|
|
|
if (!method) method = "get";
|
2007-09-04 00:46:13 +08:00
|
|
|
|
|
|
|
|
FormChecker.delayedCheck(e.targetUrl(), method, e.targetElement);
|
|
|
|
|
|
2007-10-23 09:47:07 +08:00
|
|
|
var checker = function() {
|
2007-09-04 03:38:52 +08:00
|
|
|
var target = this.targetElement;
|
|
|
|
|
FormChecker.sendRequest(this.targetUrl(), {
|
|
|
|
|
method : method,
|
|
|
|
|
onComplete : function(x) {
|
|
|
|
|
target.innerHTML = x.responseText;
|
|
|
|
|
}
|
|
|
|
|
});
|
2007-09-04 00:46:13 +08:00
|
|
|
}
|
2007-10-23 09:47:07 +08:00
|
|
|
var oldOnchange = e.onchange;
|
|
|
|
|
if(typeof oldOnchange=="function") {
|
|
|
|
|
e.onchange = function() { checker.call(this); oldOnchange.call(this); }
|
|
|
|
|
} else
|
2007-10-27 22:17:47 +08:00
|
|
|
e.onchange = checker;
|
2007-10-23 09:47:07 +08:00
|
|
|
e.onblur = checker;
|
|
|
|
|
|
2007-09-04 01:58:19 +08:00
|
|
|
e = null; // avoid memory leak
|
2007-09-04 03:38:52 +08:00
|
|
|
}
|
2007-09-04 00:46:13 +08:00
|
|
|
|
2007-10-27 22:17:47 +08:00
|
|
|
/**
|
|
|
|
|
* Wraps a <button> into YUI button.
|
|
|
|
|
*
|
|
|
|
|
* @param e
|
|
|
|
|
* button element
|
|
|
|
|
* @param onclick
|
|
|
|
|
* onclick handler
|
|
|
|
|
*/
|
|
|
|
|
function makeButton(e,onclick) {
|
Merged revisions 11754-11755,11763-11766,11770,11773-11777,11791-11797,11828-11829,11831-11839,11841-11843,11850,11854,11994,12774,12778-12793,12820-12822,12831-12841,12854-12855,12860-12882,12896-12905,12914-12920,12938-12941,12950,13045-13046,13048,13063-13064,13066,13072-13076,13111,13122-13147,13150,13153-13158,13487-13488,13851-13852,13854-13856,13859,13866-13867,13869,13872-13876,13878-13879,13883-13885,13887-13890,13896-13919 via svnmerge from
https://www.dev.java.net/svn/hudson/branches/multiple-computer-per-node
................
r11754 | kohsuke | 2008-08-25 17:59:14 -0700 (Mon, 25 Aug 2008) | 3 lines
Adding EphemeralNode for non-persisted dynamically-allocated expandable/shrinkable slave pool.
Tweaked the serialization of Hudson.slaves accordingly.
................
r11755 | kohsuke | 2008-08-25 18:10:42 -0700 (Mon, 25 Aug 2008) | 1 line
making a small improvements
................
r11763 | kohsuke | 2008-08-26 13:57:25 -0700 (Tue, 26 Aug 2008) | 1 line
adding more convenience methods
................
r11764 | kohsuke | 2008-08-26 14:24:20 -0700 (Tue, 26 Aug 2008) | 1 line
ported mask capability from the TFS plugin to the core.
................
r11765 | kohsuke | 2008-08-26 14:26:25 -0700 (Tue, 26 Aug 2008) | 1 line
making it non-final to allow for subclassing
................
r11766 | kohsuke | 2008-08-26 14:35:20 -0700 (Tue, 26 Aug 2008) | 1 line
test case for NodeList
................
r11770 | kohsuke | 2008-08-26 15:15:21 -0700 (Tue, 26 Aug 2008) | 3 lines
Wrote a simple tool that monitors a file system change (in a poor way) and triggers a build.
................
r11773 | kohsuke | 2008-08-26 17:20:30 -0700 (Tue, 26 Aug 2008) | 1 line
made more structured
................
r11774 | kohsuke | 2008-08-26 17:47:41 -0700 (Tue, 26 Aug 2008) | 1 line
indentation fix
................
r11775 | kohsuke | 2008-08-26 17:48:22 -0700 (Tue, 26 Aug 2008) | 1 line
remove the use of a deprecated feature.
................
r11776 | kohsuke | 2008-08-26 17:51:54 -0700 (Tue, 26 Aug 2008) | 1 line
renamed to 'ALL' to be consistent with recent use of DescriptorList
................
r11777 | kohsuke | 2008-08-26 18:04:17 -0700 (Tue, 26 Aug 2008) | 1 line
adding NodeFactory list and its configuration mechanism
................
r11791 | kohsuke | 2008-08-27 09:43:38 -0700 (Wed, 27 Aug 2008) | 1 line
picked up the latest jelly with Iterable support in <j:forEach>
................
r11792 | kohsuke | 2008-08-27 09:44:08 -0700 (Wed, 27 Aug 2008) | 1 line
Iterable support added in commons-jelly 1.1-hudson-20080826
................
r11793 | kohsuke | 2008-08-27 10:15:14 -0700 (Wed, 27 Aug 2008) | 2 lines
- added name to NodeFactory for binding NodeFactory to URL tree.
- NodeFactory should be access controlled
................
r11794 | kohsuke | 2008-08-27 10:41:11 -0700 (Wed, 27 Aug 2008) | 1 line
added a method to add one Node at a time
................
r11795 | kohsuke | 2008-08-27 10:41:37 -0700 (Wed, 27 Aug 2008) | 1 line
added permission constatnt
................
r11796 | kohsuke | 2008-08-27 10:42:13 -0700 (Wed, 27 Aug 2008) | 1 line
allowing the launch method to throw an exception.
................
r11797 | kohsuke | 2008-08-27 10:44:13 -0700 (Wed, 27 Aug 2008) | 1 line
improving the handling
................
r11828 | kohsuke | 2008-08-29 11:07:16 -0700 (Fri, 29 Aug 2008) | 1 line
added executor config to the sidebar.
................
r11829 | kohsuke | 2008-08-29 11:16:11 -0700 (Fri, 29 Aug 2008) | 1 line
"it" should be assigned to NodeFactory
................
r11831 | kohsuke | 2008-08-29 11:44:41 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11832 | kohsuke | 2008-08-29 11:59:21 -0700 (Fri, 29 Aug 2008) | 1 line
added a script to create a flashing image from any picture
................
r11833 | kohsuke | 2008-08-29 12:07:56 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11834 | kohsuke | 2008-08-29 13:37:59 -0700 (Fri, 29 Aug 2008) | 1 line
added new images to indicate that a slave is launching
................
r11835 | kohsuke | 2008-08-29 13:43:41 -0700 (Fri, 29 Aug 2008) | 1 line
indicate a launching slave accordingly.
................
r11836 | kohsuke | 2008-08-29 14:02:28 -0700 (Fri, 29 Aug 2008) | 1 line
added a method to remove a Node.
................
r11837 | kohsuke | 2008-08-29 14:02:38 -0700 (Fri, 29 Aug 2008) | 1 line
disconnect
................
r11838 | kohsuke | 2008-08-29 14:03:22 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11839 | kohsuke | 2008-08-29 14:14:04 -0700 (Fri, 29 Aug 2008) | 1 line
allowing subclasses.
................
r11841 | kohsuke | 2008-08-29 14:28:29 -0700 (Fri, 29 Aug 2008) | 1 line
constructor should be the first in the definition.
................
r11842 | kohsuke | 2008-08-29 14:31:01 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11843 | kohsuke | 2008-08-29 14:32:48 -0700 (Fri, 29 Aug 2008) | 1 line
fixed a problem of using partially constructed object during launch(), because the setNode() method is called from the Computer constructor.
................
r11850 | kohsuke | 2008-08-29 14:50:36 -0700 (Fri, 29 Aug 2008) | 1 line
serialize NodeFactory first so that references to them from NodeList will become references in XML.
................
r11854 | kohsuke | 2008-08-29 14:56:56 -0700 (Fri, 29 Aug 2008) | 1 line
cleaning up a bit.
................
r11994 | kohsuke | 2008-09-03 14:42:11 -0700 (Wed, 03 Sep 2008) | 21 lines
Fixed ArrayIndexOutOfBoundsException during replace(), when the title contains a '$' literal.
The typical stack trace looks like:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 32
at hudson.MarkupText$SubText.start(MarkupText.java:95)
at hudson.MarkupText$SubText.group(MarkupText.java:131)
at hudson.MarkupText$SubText.replace(MarkupText.java:154)
at hudson.MarkupText$SubText.surroundWith(MarkupText.java:83)
at
hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:37)
at
hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:117)
... 148 more
Vijayan Jayaraman and I found this problem while we were looking at the server log of Hudson for OpenJFX.
Adding a unit test to verify this behavior, too.
................
r12774 | kohsuke | 2008-10-27 15:03:36 -0700 (Mon, 27 Oct 2008) | 3 lines
preparing for heterogenousness in Node, so that different Node can be configured with different UIs, much like how different Jobs can be configured.
Creating a slave works also like creating a new job.
................
r12778 | kohsuke | 2008-10-27 15:06:51 -0700 (Mon, 27 Oct 2008) | 1 line
We need to be able to create an emtpy Slave initially, so we have to do with the check in the form field validation.
................
r12779 | kohsuke | 2008-10-27 15:48:04 -0700 (Mon, 27 Oct 2008) | 1 line
making the new slave page a two-step process
................
r12780 | kohsuke | 2008-10-27 15:48:24 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a compilation problem
................
r12781 | kohsuke | 2008-10-27 15:53:30 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12782 | kohsuke | 2008-10-27 15:58:20 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12783 | kohsuke | 2008-10-27 16:08:56 -0700 (Mon, 27 Oct 2008) | 1 line
making the configuration page work for slaves
................
r12784 | kohsuke | 2008-10-27 16:35:17 -0700 (Mon, 27 Oct 2008) | 1 line
added new-computer.svg
................
r12785 | kohsuke | 2008-10-27 16:37:26 -0700 (Mon, 27 Oct 2008) | 1 line
hooking up the config/create pages to the UI
................
r12786 | kohsuke | 2008-10-27 16:44:40 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a copy method.
................
r12787 | kohsuke | 2008-10-27 16:47:33 -0700 (Mon, 27 Oct 2008) | 1 line
code was broken when a slave was renamed
................
r12788 | kohsuke | 2008-10-27 16:58:04 -0700 (Mon, 27 Oct 2008) | 1 line
moving out the commonality into a new tag
................
r12789 | kohsuke | 2008-10-27 17:01:21 -0700 (Mon, 27 Oct 2008) | 1 line
consistent term usage
................
r12790 | kohsuke | 2008-10-27 17:03:19 -0700 (Mon, 27 Oct 2008) | 1 line
retiring the configureExecutors. Slave configuration is now moved to individual slave page
................
r12791 | kohsuke | 2008-10-27 17:10:32 -0700 (Mon, 27 Oct 2008) | 1 line
retired configureExecutors.jelly and completed moved its contents to somewhere else
................
r12792 | kohsuke | 2008-10-27 17:21:53 -0700 (Mon, 27 Oct 2008) | 1 line
bug fix. request handling of "/descriptor/FQCN/..." was broken.
................
r12793 | kohsuke | 2008-10-27 17:27:08 -0700 (Mon, 27 Oct 2008) | 1 line
NodeFactory -> Cloud to encourage consistent term usage between the code and the UI.
................
r12820 | kohsuke | 2008-10-29 10:58:20 -0700 (Wed, 29 Oct 2008) | 1 line
formatting fix
................
r12821 | kohsuke | 2008-10-29 11:17:49 -0700 (Wed, 29 Oct 2008) | 1 line
added classes for handling a secret and prevent accidental exposure of a secret in the persisted form
................
r12822 | kohsuke | 2008-10-29 11:32:39 -0700 (Wed, 29 Oct 2008) | 1 line
added a base64 validator
................
r12831 | kohsuke | 2008-10-29 15:58:45 -0700 (Wed, 29 Oct 2008) | 1 line
secret key needs to be persisted outside config.xml (and it is, already!)
................
r12832 | kohsuke | 2008-10-29 16:06:28 -0700 (Wed, 29 Oct 2008) | 1 line
started working on Amazon EC2 plugin
................
r12833 | kohsuke | 2008-10-29 16:09:20 -0700 (Wed, 29 Oct 2008) | 1 line
brought the same enhancement as in <textbox />
................
r12834 | kohsuke | 2008-10-29 16:15:05 -0700 (Wed, 29 Oct 2008) | 1 line
copy over the onclick handler from the original button element
................
r12835 | kohsuke | 2008-10-29 17:01:04 -0700 (Wed, 29 Oct 2008) | 1 line
allow OK messages to be sent with some mark up.
................
r12836 | kohsuke | 2008-10-29 17:06:52 -0700 (Wed, 29 Oct 2008) | 1 line
added connection testing. This pattern needs to be generalized since it happens often
................
r12837 | kohsuke | 2008-10-29 17:13:11 -0700 (Wed, 29 Oct 2008) | 1 line
this is little better
................
r12838 | kohsuke | 2008-10-29 17:17:44 -0700 (Wed, 29 Oct 2008) | 1 line
added spinner
................
r12839 | kohsuke | 2008-10-29 17:31:54 -0700 (Wed, 29 Oct 2008) | 1 line
restructuring the validation button support in a form that can be readily moved to the core.
................
r12840 | kohsuke | 2008-10-29 18:01:41 -0700 (Wed, 29 Oct 2008) | 1 line
added <f:validateButton/> for multi-field server-side validation
................
r12841 | kohsuke | 2008-10-29 18:03:12 -0700 (Wed, 29 Oct 2008) | 1 line
logic moved to <f:validateButton/> in the core.
................
r12854 | kohsuke | 2008-10-30 13:32:58 -0700 (Thu, 30 Oct 2008) | 1 line
@QueryParameter.value won't be necessary any more
................
r12855 | kohsuke | 2008-10-30 13:42:58 -0700 (Thu, 30 Oct 2008) | 1 line
need a strongly-typed constructor.
................
r12860 | kohsuke | 2008-10-30 15:24:18 -0700 (Thu, 30 Oct 2008) | 1 line
adding more reflection support, which in turn we use in taglibs to raise the level of abstraction.
................
r12861 | kohsuke | 2008-10-30 15:33:22 -0700 (Thu, 30 Oct 2008) | 1 line
added a tag to create databinding to a<select> element from an enum property
................
r12862 | kohsuke | 2008-10-30 15:37:44 -0700 (Thu, 30 Oct 2008) | 1 line
adding a smarter bi-directional binding through <f:repeatable field="..."/>
................
r12863 | kohsuke | 2008-10-30 15:47:48 -0700 (Thu, 30 Oct 2008) | 1 line
making progress with the EC2 support
................
r12864 | kohsuke | 2008-10-30 16:12:34 -0700 (Thu, 30 Oct 2008) | 1 line
added form field validation for AMI ID
................
r12865 | kohsuke | 2008-10-30 16:15:44 -0700 (Thu, 30 Oct 2008) | 1 line
added simpler version
................
r12866 | kohsuke | 2008-10-30 16:17:15 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12867 | kohsuke | 2008-10-30 16:17:19 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12868 | kohsuke | 2008-10-30 16:40:25 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12869 | kohsuke | 2008-10-30 17:00:57 -0700 (Thu, 30 Oct 2008) | 1 line
adding the provisioning of the new slave
................
r12870 | kohsuke | 2008-10-30 17:07:27 -0700 (Thu, 30 Oct 2008) | 1 line
/** {@inheritDoc} */ is the default behavior for javadoc, so there's no point in making that explicit.
................
r12871 | kohsuke | 2008-10-30 17:11:04 -0700 (Thu, 30 Oct 2008) | 1 line
doc bug fix
................
r12872 | kohsuke | 2008-10-30 17:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12873 | kohsuke | 2008-10-30 17:19:06 -0700 (Thu, 30 Oct 2008) | 1 line
added RetentionStrategy for EC2 instances
................
r12874 | kohsuke | 2008-10-30 17:21:17 -0700 (Thu, 30 Oct 2008) | 1 line
allowing subclasses to override the disconnect behavior.
................
r12875 | kohsuke | 2008-10-30 18:02:35 -0700 (Thu, 30 Oct 2008) | 1 line
added termination
................
r12876 | kohsuke | 2008-10-30 18:05:30 -0700 (Thu, 30 Oct 2008) | 1 line
forgot to rename when NodeFactory was renamed to Cloud
................
r12877 | kohsuke | 2008-10-30 18:06:08 -0700 (Thu, 30 Oct 2008) | 1 line
using the console icon
................
r12878 | kohsuke | 2008-10-30 18:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
adding UI to remove a slave.
................
r12879 | kohsuke | 2008-10-30 18:48:57 -0700 (Thu, 30 Oct 2008) | 1 line
commons-discovery now needed in stapler
................
r12880 | kohsuke | 2008-10-30 18:50:27 -0700 (Thu, 30 Oct 2008) | 1 line
needs to use a newer version of stapler
................
r12881 | kohsuke | 2008-10-30 18:51:02 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12882 | kohsuke | 2008-10-30 18:51:43 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12896 | kohsuke | 2008-10-31 14:52:07 -0700 (Fri, 31 Oct 2008) | 1 line
fixed the ordering between field and the mighty get(String) method.
................
r12897 | kohsuke | 2008-10-31 15:08:41 -0700 (Fri, 31 Oct 2008) | 1 line
fixed test compilation problems
................
r12898 | kohsuke | 2008-10-31 15:11:25 -0700 (Fri, 31 Oct 2008) | 1 line
marking this as a model object since it's always bound to URL.
................
r12899 | kohsuke | 2008-10-31 15:13:42 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up to manually provision a new node
................
r12900 | kohsuke | 2008-10-31 15:14:00 -0700 (Fri, 31 Oct 2008) | 1 line
after merging the trunk the version number is different
................
r12901 | kohsuke | 2008-10-31 15:21:54 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up for provisioning a new slave
................
r12902 | kohsuke | 2008-10-31 15:45:10 -0700 (Fri, 31 Oct 2008) | 1 line
adding a hook to decorate ComputerLauncher.
................
r12903 | kohsuke | 2008-10-31 15:48:21 -0700 (Fri, 31 Oct 2008) | 1 line
added filtering support
................
r12904 | kohsuke | 2008-10-31 15:52:45 -0700 (Fri, 31 Oct 2008) | 1 line
added view
................
r12905 | kohsuke | 2008-10-31 15:53:49 -0700 (Fri, 31 Oct 2008) | 1 line
doc improvement
................
r12914 | kohsuke | 2008-11-01 17:45:57 -0700 (Sat, 01 Nov 2008) | 1 line
adding code for connecting with SSH
................
r12915 | kohsuke | 2008-11-01 17:49:28 -0700 (Sat, 01 Nov 2008) | 1 line
working on launchers
................
r12916 | kohsuke | 2008-11-01 18:33:12 -0700 (Sat, 01 Nov 2008) | 1 line
added a method to fully read a stream
................
r12917 | kohsuke | 2008-11-01 18:33:45 -0700 (Sat, 01 Nov 2008) | 1 line
bumped up stapler
................
r12918 | kohsuke | 2008-11-01 18:39:41 -0700 (Sat, 01 Nov 2008) | 1 line
doc improvement.
................
r12919 | kohsuke | 2008-11-01 18:45:24 -0700 (Sat, 01 Nov 2008) | 1 line
added a launcher
................
r12920 | kohsuke | 2008-11-01 18:55:02 -0700 (Sat, 01 Nov 2008) | 1 line
implementing the actual ComputerLauncher
................
r12938 | kohsuke | 2008-11-02 08:56:05 -0800 (Sun, 02 Nov 2008) | 1 line
support the field notation
................
r12939 | kohsuke | 2008-11-02 09:20:21 -0800 (Sun, 02 Nov 2008) | 1 line
added the mechanism to execute the init script
................
r12940 | kohsuke | 2008-11-02 09:21:38 -0800 (Sun, 02 Nov 2008) | 1 line
simplification
................
r12941 | kohsuke | 2008-11-02 09:36:21 -0800 (Sun, 02 Nov 2008) | 1 line
adding key handling
................
r12950 | kohsuke | 2008-11-03 11:00:58 -0800 (Mon, 03 Nov 2008) | 1 line
formatting changes
................
r13045 | kohsuke | 2008-11-06 15:24:32 -0800 (Thu, 06 Nov 2008) | 1 line
adding time series datatype for retaining load average statistics in memory
................
r13046 | kohsuke | 2008-11-06 15:59:02 -0800 (Thu, 06 Nov 2008) | 1 line
added a convenience method.
................
r13048 | kohsuke | 2008-11-06 16:21:54 -0800 (Thu, 06 Nov 2008) | 2 lines
- started monitoring # of executor statistics.
- exposed label to the remote API
................
r13063 | kohsuke | 2008-11-07 13:05:15 -0800 (Fri, 07 Nov 2008) | 1 line
added a convenience method.
................
r13064 | kohsuke | 2008-11-07 13:11:08 -0800 (Fri, 07 Nov 2008) | 1 line
monitor the length of the queue too
................
r13066 | kohsuke | 2008-11-07 14:15:56 -0800 (Fri, 07 Nov 2008) | 1 line
moved the stats to its own class.
................
r13072 | kohsuke | 2008-11-07 15:40:29 -0800 (Fri, 07 Nov 2008) | 1 line
adding provisioning logic based on load statistics
................
r13073 | kohsuke | 2008-11-07 15:46:00 -0800 (Fri, 07 Nov 2008) | 1 line
for effective testing, we need sub-sec precision
................
r13074 | kohsuke | 2008-11-07 16:24:44 -0800 (Fri, 07 Nov 2008) | 1 line
fixed a lie.
................
r13075 | kohsuke | 2008-11-07 16:25:12 -0800 (Fri, 07 Nov 2008) | 1 line
bug fix
................
r13076 | kohsuke | 2008-11-07 16:30:55 -0800 (Fri, 07 Nov 2008) | 1 line
avoid using deprecated methods
................
r13111 | kohsuke | 2008-11-09 11:54:23 -0800 (Sun, 09 Nov 2008) | 1 line
added the Future<?> return parameter to Computer.launch(). To do this w/o breaking compatibility, renamed launch to connect.
................
r13122 | kohsuke | 2008-11-10 14:38:03 -0800 (Mon, 10 Nov 2008) | 1 line
allow programmatic update of the assigned label
................
r13123 | kohsuke | 2008-11-10 14:38:40 -0800 (Mon, 10 Nov 2008) | 1 line
Iterator not needed because CopyOnWriteArrayList doesn't support removal via iterator.
................
r13124 | kohsuke | 2008-11-10 14:39:24 -0800 (Mon, 10 Nov 2008) | 1 line
added another Builder for tests
................
r13125 | kohsuke | 2008-11-10 14:39:48 -0800 (Mon, 10 Nov 2008) | 1 line
simplified a bit. This TestEnvironment stuff needs some clearer story.
................
r13126 | kohsuke | 2008-11-10 14:46:40 -0800 (Mon, 10 Nov 2008) | 1 line
IDEA complains about this.
................
r13127 | kohsuke | 2008-11-10 14:51:53 -0800 (Mon, 10 Nov 2008) | 1 line
improved the error diagnostics by displaying why a provisioned node failed to launch
................
r13128 | kohsuke | 2008-11-10 14:52:12 -0800 (Mon, 10 Nov 2008) | 1 line
Started a test case for NodeProvisioner
................
r13129 | kohsuke | 2008-11-10 14:52:27 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13130 | kohsuke | 2008-11-10 15:16:02 -0800 (Mon, 10 Nov 2008) | 1 line
report the failure as a failure.
................
r13131 | kohsuke | 2008-11-10 16:34:23 -0800 (Mon, 10 Nov 2008) | 1 line
adding a parameter to the connect method to support joining to the pending launch activity.
................
r13132 | kohsuke | 2008-11-10 16:38:31 -0800 (Mon, 10 Nov 2008) | 1 line
making members public so that it can be accessed from other classes (DummyCloudImpl was the first to do this)
................
r13133 | kohsuke | 2008-11-10 16:38:58 -0800 (Mon, 10 Nov 2008) | 1 line
split the cloud implementation to a separate class to allow reuse.
................
r13134 | kohsuke | 2008-11-10 16:56:27 -0800 (Mon, 10 Nov 2008) | 1 line
assign unique names to support multiple jobs
................
r13135 | kohsuke | 2008-11-10 17:11:31 -0800 (Mon, 10 Nov 2008) | 1 line
avoid unnecessary interruption
................
r13136 | kohsuke | 2008-11-10 17:11:41 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13137 | kohsuke | 2008-11-10 17:16:28 -0800 (Mon, 10 Nov 2008) | 1 line
cleaned up a test case
................
r13138 | kohsuke | 2008-11-10 17:36:52 -0800 (Mon, 10 Nov 2008) | 1 line
since the setNode method is called on every Computer just by adding a new node, don't force a new launch attempt.
................
r13139 | kohsuke | 2008-11-10 17:37:38 -0800 (Mon, 10 Nov 2008) | 1 line
perform orderly shutdown by giving computers enough time to disconnect.
................
r13140 | kohsuke | 2008-11-10 17:38:08 -0800 (Mon, 10 Nov 2008) | 3 lines
return Future for synchronization.
This breaks binary compatibility, but I checked none of the plugins in Hudson SVN uses this, so I hope this is OK.
................
r13141 | kohsuke | 2008-11-10 17:38:46 -0800 (Mon, 10 Nov 2008) | 1 line
improved diagnostics
................
r13142 | kohsuke | 2008-11-10 17:39:55 -0800 (Mon, 10 Nov 2008) | 1 line
removed compiler warning
................
r13143 | kohsuke | 2008-11-10 18:02:56 -0800 (Mon, 10 Nov 2008) | 1 line
hide the rounding related problem from Cloud by passing int instead of float.
................
r13144 | kohsuke | 2008-11-10 18:10:10 -0800 (Mon, 10 Nov 2008) | 1 line
bug fix
................
r13145 | kohsuke | 2008-11-10 18:11:51 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13146 | kohsuke | 2008-11-10 18:15:08 -0800 (Mon, 10 Nov 2008) | 1 line
moved the slave launch code to HudsonTestCase for reuse
................
r13147 | kohsuke | 2008-11-10 18:20:19 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13150 | kohsuke | 2008-11-11 07:28:53 -0800 (Tue, 11 Nov 2008) | 1 line
bug fix
................
r13153 | kohsuke | 2008-11-11 14:04:21 -0800 (Tue, 11 Nov 2008) | 1 line
cutting down the test size to 5 to increase the test speed
................
r13154 | kohsuke | 2008-11-11 14:04:37 -0800 (Tue, 11 Nov 2008) | 1 line
improved debuggability
................
r13155 | kohsuke | 2008-11-11 14:10:04 -0800 (Tue, 11 Nov 2008) | 1 line
added another convenience method
................
r13156 | kohsuke | 2008-11-11 14:10:21 -0800 (Tue, 11 Nov 2008) | 1 line
further reduce the test turn around time
................
r13157 | kohsuke | 2008-11-11 14:22:03 -0800 (Tue, 11 Nov 2008) | 1 line
doc improvement and clean up
................
r13158 | kohsuke | 2008-11-11 14:22:28 -0800 (Tue, 11 Nov 2008) | 1 line
added a new metho
................
r13487 | kohsuke | 2008-12-09 17:17:30 -0800 (Tue, 09 Dec 2008) | 1 line
SlaveTemplate needs to be able to computer # of executors.
................
r13488 | kohsuke | 2008-12-09 17:18:05 -0800 (Tue, 09 Dec 2008) | 1 line
fixed a compilation problem with the latest head of the branch
................
r13851 | kohsuke | 2008-12-24 13:40:43 -0800 (Wed, 24 Dec 2008) | 82 lines
fixed a dead lock reported by Jesse.
Found one Java-level deadlock:
=============================
"Executor #0 for master":
waiting to lock monitor 0x09409bac (object 0x87474ca0, a hudson.util.CopyOnWriteMap$Hash),
which is held by "main"
"main":
waiting to lock monitor 0x09409b48 (object 0x87474d48, a hudson.model.Hudson$MasterComputer),
which is held by "Executor #0 for master"
Java stack information for the threads listed above:
===================================================
"Executor #0 for master":
at hudson.util.CopyOnWriteMap.remove(CopyOnWriteMap.java:78)
- waiting to lock <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.removeComputer(Hudson.java:717)
at hudson.model.Computer.removeExecutor(Computer.java:433)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Executor.run(Executor.java:65)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
"main":
at hudson.model.Computer.setNumExecutors(Computer.java:338)
- waiting to lock <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Computer.setNode(Computer.java:327)
at hudson.model.Hudson.updateComputer(Hudson.java:704)
at hudson.model.Hudson.updateComputerList(Hudson.java:685)
- locked <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.setNodes(Hudson.java:1076)
at hudson.model.Hudson.addNode(Hudson.java:1060)
- locked <0x87474cb0> (a hudson.model.Hudson)
at org.jvnet.hudson.test.HudsonTestCase.createSlave(HudsonTestCase.java:247)
at hudson.slaves.NodeProvisionerTest.testBaselineSlaveUsage(NodeProvisionerTest.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at org.jvnet.hudson.test.HudsonTestCase.runTest(HudsonTestCase.java:151)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:241)
at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:537)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Found 1 deadlock.
................
r13852 | kohsuke | 2008-12-24 14:32:29 -0800 (Wed, 24 Dec 2008) | 1 line
bug fix in the test case.
................
r13854 | kohsuke | 2008-12-24 15:20:22 -0800 (Wed, 24 Dec 2008) | 2 lines
Using a new version of Rhino to get a proper exception chaining.
................
r13855 | kohsuke | 2008-12-24 15:22:13 -0800 (Wed, 24 Dec 2008) | 1 line
typo
................
r13856 | kohsuke | 2008-12-24 15:37:56 -0800 (Wed, 24 Dec 2008) | 1 line
CR shouldn't be in the repository
................
r13859 | kohsuke | 2008-12-24 15:50:32 -0800 (Wed, 24 Dec 2008) | 3 lines
Fixed svn:eol-style.
................
r13866 | kohsuke | 2008-12-24 21:26:43 -0800 (Wed, 24 Dec 2008) | 3 lines
Copying rev.13860 to retry a merge that now looks suspicious.
................
r13869 | kohsuke | 2008-12-24 22:03:46 -0800 (Wed, 24 Dec 2008) | 2 lines
The 2nd merge was successful, so adopting the successful merge as the multiple-computer-per-node branch.
................
r13872 | kohsuke | 2008-12-25 07:28:37 -0800 (Thu, 25 Dec 2008) | 1 line
fixed a test failure
................
r13873 | kohsuke | 2008-12-25 08:16:49 -0800 (Thu, 25 Dec 2008) | 1 line
expanded NodeProvisioner to work on per-label basis
................
r13874 | kohsuke | 2008-12-25 08:27:32 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13875 | kohsuke | 2008-12-25 08:33:17 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13876 | kohsuke | 2008-12-25 08:45:03 -0800 (Thu, 25 Dec 2008) | 3 lines
[HUDSON-2605] Strangely, I discovered that on some File, which is new File("./target/hudson-for-test"), file.exists()==false but file.getAbsoluteFile().exists()==true.
It looks like this happens when $PWD of the process at the OS level is different from System.getProperty("user.dir")
................
r13878 | kohsuke | 2008-12-25 15:52:45 -0800 (Thu, 25 Dec 2008) | 1 line
added a marker file
................
r13879 | kohsuke | 2008-12-25 15:53:13 -0800 (Thu, 25 Dec 2008) | 1 line
use marker file to find the hudson main workspace.
................
r13883 | kohsuke | 2008-12-26 07:50:44 -0800 (Fri, 26 Dec 2008) | 1 line
avoid using a deprecated method.
................
r13884 | kohsuke | 2008-12-26 07:50:59 -0800 (Fri, 26 Dec 2008) | 1 line
adding more probes
................
r13885 | kohsuke | 2008-12-26 08:15:42 -0800 (Fri, 26 Dec 2008) | 1 line
for analyzing test failures, capturing the output is crucial.
................
r13887 | kohsuke | 2008-12-26 11:25:12 -0800 (Fri, 26 Dec 2008) | 1 line
allow sub-types to intercept mutation
................
r13888 | kohsuke | 2008-12-26 11:26:01 -0800 (Fri, 26 Dec 2008) | 1 line
clouds need to be taken into account before marking a label as pointless.
................
r13889 | kohsuke | 2008-12-26 11:26:40 -0800 (Fri, 26 Dec 2008) | 3 lines
fixing bugs in NodeProvisioner.
Conservative estimate on idle executors have to be max, not min.
................
r13890 | kohsuke | 2008-12-26 11:42:53 -0800 (Fri, 26 Dec 2008) | 1 line
turns out the problem was that we were adding multiple slaves under the same name, which confused Hudson to no end.
................
r13896 | kohsuke | 2008-12-27 07:44:20 -0800 (Sat, 27 Dec 2008) | 1 line
formatting changes
................
r13897 | kohsuke | 2008-12-27 07:45:00 -0800 (Sat, 27 Dec 2008) | 1 line
reprot the test name to stdout so that one can easily distinguish different tests in target/surefire-reports/xyz-output.txt
................
r13898 | kohsuke | 2008-12-27 07:54:53 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13899 | kohsuke | 2008-12-27 09:59:07 -0800 (Sat, 27 Dec 2008) | 1 line
split the functionality into two classes
................
r13900 | kohsuke | 2008-12-27 10:00:29 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13901 | kohsuke | 2008-12-27 10:06:24 -0800 (Sat, 27 Dec 2008) | 1 line
added 'tick'
................
r13902 | kohsuke | 2008-12-27 10:08:04 -0800 (Sat, 27 Dec 2008) | 1 line
adding graph rendering of the load statistics
................
r13903 | kohsuke | 2008-12-27 10:19:41 -0800 (Sat, 27 Dec 2008) | 1 line
improved graph layout
................
r13904 | kohsuke | 2008-12-27 10:21:05 -0800 (Sat, 27 Dec 2008) | 1 line
Picker -> TimeScale to better reflect what it is.
................
r13905 | kohsuke | 2008-12-27 10:40:27 -0800 (Sat, 27 Dec 2008) | 1 line
duplicate
................
r13906 | kohsuke | 2008-12-27 14:39:36 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to a shorter name
................
r13907 | kohsuke | 2008-12-27 15:03:25 -0800 (Sat, 27 Dec 2008) | 1 line
added icons
................
r13908 | kohsuke | 2008-12-27 16:20:37 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to make 'loadStatistics' the URL binding.
................
r13909 | kohsuke | 2008-12-27 16:21:01 -0800 (Sat, 27 Dec 2008) | 1 line
exposing loadStatistics for Computer for better URL binding
................
r13910 | kohsuke | 2008-12-27 16:21:16 -0800 (Sat, 27 Dec 2008) | 1 line
adding UI support
................
r13911 | kohsuke | 2008-12-27 19:31:43 -0800 (Sat, 27 Dec 2008) | 1 line
added some basic visualization
................
r13912 | kohsuke | 2008-12-27 19:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
if there's no description, don't even show it.
................
r13913 | kohsuke | 2008-12-27 19:39:26 -0800 (Sat, 27 Dec 2008) | 1 line
added load statistics page for the label as well.
................
r13914 | kohsuke | 2008-12-27 19:48:55 -0800 (Sat, 27 Dec 2008) | 1 line
added one more convenience method.
................
r13915 | kohsuke | 2008-12-27 19:54:29 -0800 (Sat, 27 Dec 2008) | 1 line
refactored so that a different Dataset can be fed.
................
r13916 | kohsuke | 2008-12-27 19:59:20 -0800 (Sat, 27 Dec 2008) | 1 line
added global load statistics lnk to the management screen.
................
r13917 | kohsuke | 2008-12-27 20:31:01 -0800 (Sat, 27 Dec 2008) | 1 line
<dt>s should use the bold font to distinguish them from <dd>s
................
r13918 | kohsuke | 2008-12-27 20:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
r13919 | kohsuke | 2008-12-27 20:35:39 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14215 71c3de6d-444a-0410-be80-ed276b4c234a
2009-01-07 09:02:56 +08:00
|
|
|
var h = e.onclick;
|
2007-10-27 22:17:47 +08:00
|
|
|
var clsName = e.className;
|
2009-03-19 05:47:34 +08:00
|
|
|
var n = e.name;
|
2007-10-27 22:17:47 +08:00
|
|
|
var btn = new YAHOO.widget.Button(e,{});
|
2007-10-27 22:26:11 +08:00
|
|
|
if(onclick!=null)
|
|
|
|
|
btn.addListener("click",onclick);
|
Merged revisions 11754-11755,11763-11766,11770,11773-11777,11791-11797,11828-11829,11831-11839,11841-11843,11850,11854,11994,12774,12778-12793,12820-12822,12831-12841,12854-12855,12860-12882,12896-12905,12914-12920,12938-12941,12950,13045-13046,13048,13063-13064,13066,13072-13076,13111,13122-13147,13150,13153-13158,13487-13488,13851-13852,13854-13856,13859,13866-13867,13869,13872-13876,13878-13879,13883-13885,13887-13890,13896-13919 via svnmerge from
https://www.dev.java.net/svn/hudson/branches/multiple-computer-per-node
................
r11754 | kohsuke | 2008-08-25 17:59:14 -0700 (Mon, 25 Aug 2008) | 3 lines
Adding EphemeralNode for non-persisted dynamically-allocated expandable/shrinkable slave pool.
Tweaked the serialization of Hudson.slaves accordingly.
................
r11755 | kohsuke | 2008-08-25 18:10:42 -0700 (Mon, 25 Aug 2008) | 1 line
making a small improvements
................
r11763 | kohsuke | 2008-08-26 13:57:25 -0700 (Tue, 26 Aug 2008) | 1 line
adding more convenience methods
................
r11764 | kohsuke | 2008-08-26 14:24:20 -0700 (Tue, 26 Aug 2008) | 1 line
ported mask capability from the TFS plugin to the core.
................
r11765 | kohsuke | 2008-08-26 14:26:25 -0700 (Tue, 26 Aug 2008) | 1 line
making it non-final to allow for subclassing
................
r11766 | kohsuke | 2008-08-26 14:35:20 -0700 (Tue, 26 Aug 2008) | 1 line
test case for NodeList
................
r11770 | kohsuke | 2008-08-26 15:15:21 -0700 (Tue, 26 Aug 2008) | 3 lines
Wrote a simple tool that monitors a file system change (in a poor way) and triggers a build.
................
r11773 | kohsuke | 2008-08-26 17:20:30 -0700 (Tue, 26 Aug 2008) | 1 line
made more structured
................
r11774 | kohsuke | 2008-08-26 17:47:41 -0700 (Tue, 26 Aug 2008) | 1 line
indentation fix
................
r11775 | kohsuke | 2008-08-26 17:48:22 -0700 (Tue, 26 Aug 2008) | 1 line
remove the use of a deprecated feature.
................
r11776 | kohsuke | 2008-08-26 17:51:54 -0700 (Tue, 26 Aug 2008) | 1 line
renamed to 'ALL' to be consistent with recent use of DescriptorList
................
r11777 | kohsuke | 2008-08-26 18:04:17 -0700 (Tue, 26 Aug 2008) | 1 line
adding NodeFactory list and its configuration mechanism
................
r11791 | kohsuke | 2008-08-27 09:43:38 -0700 (Wed, 27 Aug 2008) | 1 line
picked up the latest jelly with Iterable support in <j:forEach>
................
r11792 | kohsuke | 2008-08-27 09:44:08 -0700 (Wed, 27 Aug 2008) | 1 line
Iterable support added in commons-jelly 1.1-hudson-20080826
................
r11793 | kohsuke | 2008-08-27 10:15:14 -0700 (Wed, 27 Aug 2008) | 2 lines
- added name to NodeFactory for binding NodeFactory to URL tree.
- NodeFactory should be access controlled
................
r11794 | kohsuke | 2008-08-27 10:41:11 -0700 (Wed, 27 Aug 2008) | 1 line
added a method to add one Node at a time
................
r11795 | kohsuke | 2008-08-27 10:41:37 -0700 (Wed, 27 Aug 2008) | 1 line
added permission constatnt
................
r11796 | kohsuke | 2008-08-27 10:42:13 -0700 (Wed, 27 Aug 2008) | 1 line
allowing the launch method to throw an exception.
................
r11797 | kohsuke | 2008-08-27 10:44:13 -0700 (Wed, 27 Aug 2008) | 1 line
improving the handling
................
r11828 | kohsuke | 2008-08-29 11:07:16 -0700 (Fri, 29 Aug 2008) | 1 line
added executor config to the sidebar.
................
r11829 | kohsuke | 2008-08-29 11:16:11 -0700 (Fri, 29 Aug 2008) | 1 line
"it" should be assigned to NodeFactory
................
r11831 | kohsuke | 2008-08-29 11:44:41 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11832 | kohsuke | 2008-08-29 11:59:21 -0700 (Fri, 29 Aug 2008) | 1 line
added a script to create a flashing image from any picture
................
r11833 | kohsuke | 2008-08-29 12:07:56 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11834 | kohsuke | 2008-08-29 13:37:59 -0700 (Fri, 29 Aug 2008) | 1 line
added new images to indicate that a slave is launching
................
r11835 | kohsuke | 2008-08-29 13:43:41 -0700 (Fri, 29 Aug 2008) | 1 line
indicate a launching slave accordingly.
................
r11836 | kohsuke | 2008-08-29 14:02:28 -0700 (Fri, 29 Aug 2008) | 1 line
added a method to remove a Node.
................
r11837 | kohsuke | 2008-08-29 14:02:38 -0700 (Fri, 29 Aug 2008) | 1 line
disconnect
................
r11838 | kohsuke | 2008-08-29 14:03:22 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11839 | kohsuke | 2008-08-29 14:14:04 -0700 (Fri, 29 Aug 2008) | 1 line
allowing subclasses.
................
r11841 | kohsuke | 2008-08-29 14:28:29 -0700 (Fri, 29 Aug 2008) | 1 line
constructor should be the first in the definition.
................
r11842 | kohsuke | 2008-08-29 14:31:01 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11843 | kohsuke | 2008-08-29 14:32:48 -0700 (Fri, 29 Aug 2008) | 1 line
fixed a problem of using partially constructed object during launch(), because the setNode() method is called from the Computer constructor.
................
r11850 | kohsuke | 2008-08-29 14:50:36 -0700 (Fri, 29 Aug 2008) | 1 line
serialize NodeFactory first so that references to them from NodeList will become references in XML.
................
r11854 | kohsuke | 2008-08-29 14:56:56 -0700 (Fri, 29 Aug 2008) | 1 line
cleaning up a bit.
................
r11994 | kohsuke | 2008-09-03 14:42:11 -0700 (Wed, 03 Sep 2008) | 21 lines
Fixed ArrayIndexOutOfBoundsException during replace(), when the title contains a '$' literal.
The typical stack trace looks like:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 32
at hudson.MarkupText$SubText.start(MarkupText.java:95)
at hudson.MarkupText$SubText.group(MarkupText.java:131)
at hudson.MarkupText$SubText.replace(MarkupText.java:154)
at hudson.MarkupText$SubText.surroundWith(MarkupText.java:83)
at
hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:37)
at
hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:117)
... 148 more
Vijayan Jayaraman and I found this problem while we were looking at the server log of Hudson for OpenJFX.
Adding a unit test to verify this behavior, too.
................
r12774 | kohsuke | 2008-10-27 15:03:36 -0700 (Mon, 27 Oct 2008) | 3 lines
preparing for heterogenousness in Node, so that different Node can be configured with different UIs, much like how different Jobs can be configured.
Creating a slave works also like creating a new job.
................
r12778 | kohsuke | 2008-10-27 15:06:51 -0700 (Mon, 27 Oct 2008) | 1 line
We need to be able to create an emtpy Slave initially, so we have to do with the check in the form field validation.
................
r12779 | kohsuke | 2008-10-27 15:48:04 -0700 (Mon, 27 Oct 2008) | 1 line
making the new slave page a two-step process
................
r12780 | kohsuke | 2008-10-27 15:48:24 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a compilation problem
................
r12781 | kohsuke | 2008-10-27 15:53:30 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12782 | kohsuke | 2008-10-27 15:58:20 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12783 | kohsuke | 2008-10-27 16:08:56 -0700 (Mon, 27 Oct 2008) | 1 line
making the configuration page work for slaves
................
r12784 | kohsuke | 2008-10-27 16:35:17 -0700 (Mon, 27 Oct 2008) | 1 line
added new-computer.svg
................
r12785 | kohsuke | 2008-10-27 16:37:26 -0700 (Mon, 27 Oct 2008) | 1 line
hooking up the config/create pages to the UI
................
r12786 | kohsuke | 2008-10-27 16:44:40 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a copy method.
................
r12787 | kohsuke | 2008-10-27 16:47:33 -0700 (Mon, 27 Oct 2008) | 1 line
code was broken when a slave was renamed
................
r12788 | kohsuke | 2008-10-27 16:58:04 -0700 (Mon, 27 Oct 2008) | 1 line
moving out the commonality into a new tag
................
r12789 | kohsuke | 2008-10-27 17:01:21 -0700 (Mon, 27 Oct 2008) | 1 line
consistent term usage
................
r12790 | kohsuke | 2008-10-27 17:03:19 -0700 (Mon, 27 Oct 2008) | 1 line
retiring the configureExecutors. Slave configuration is now moved to individual slave page
................
r12791 | kohsuke | 2008-10-27 17:10:32 -0700 (Mon, 27 Oct 2008) | 1 line
retired configureExecutors.jelly and completed moved its contents to somewhere else
................
r12792 | kohsuke | 2008-10-27 17:21:53 -0700 (Mon, 27 Oct 2008) | 1 line
bug fix. request handling of "/descriptor/FQCN/..." was broken.
................
r12793 | kohsuke | 2008-10-27 17:27:08 -0700 (Mon, 27 Oct 2008) | 1 line
NodeFactory -> Cloud to encourage consistent term usage between the code and the UI.
................
r12820 | kohsuke | 2008-10-29 10:58:20 -0700 (Wed, 29 Oct 2008) | 1 line
formatting fix
................
r12821 | kohsuke | 2008-10-29 11:17:49 -0700 (Wed, 29 Oct 2008) | 1 line
added classes for handling a secret and prevent accidental exposure of a secret in the persisted form
................
r12822 | kohsuke | 2008-10-29 11:32:39 -0700 (Wed, 29 Oct 2008) | 1 line
added a base64 validator
................
r12831 | kohsuke | 2008-10-29 15:58:45 -0700 (Wed, 29 Oct 2008) | 1 line
secret key needs to be persisted outside config.xml (and it is, already!)
................
r12832 | kohsuke | 2008-10-29 16:06:28 -0700 (Wed, 29 Oct 2008) | 1 line
started working on Amazon EC2 plugin
................
r12833 | kohsuke | 2008-10-29 16:09:20 -0700 (Wed, 29 Oct 2008) | 1 line
brought the same enhancement as in <textbox />
................
r12834 | kohsuke | 2008-10-29 16:15:05 -0700 (Wed, 29 Oct 2008) | 1 line
copy over the onclick handler from the original button element
................
r12835 | kohsuke | 2008-10-29 17:01:04 -0700 (Wed, 29 Oct 2008) | 1 line
allow OK messages to be sent with some mark up.
................
r12836 | kohsuke | 2008-10-29 17:06:52 -0700 (Wed, 29 Oct 2008) | 1 line
added connection testing. This pattern needs to be generalized since it happens often
................
r12837 | kohsuke | 2008-10-29 17:13:11 -0700 (Wed, 29 Oct 2008) | 1 line
this is little better
................
r12838 | kohsuke | 2008-10-29 17:17:44 -0700 (Wed, 29 Oct 2008) | 1 line
added spinner
................
r12839 | kohsuke | 2008-10-29 17:31:54 -0700 (Wed, 29 Oct 2008) | 1 line
restructuring the validation button support in a form that can be readily moved to the core.
................
r12840 | kohsuke | 2008-10-29 18:01:41 -0700 (Wed, 29 Oct 2008) | 1 line
added <f:validateButton/> for multi-field server-side validation
................
r12841 | kohsuke | 2008-10-29 18:03:12 -0700 (Wed, 29 Oct 2008) | 1 line
logic moved to <f:validateButton/> in the core.
................
r12854 | kohsuke | 2008-10-30 13:32:58 -0700 (Thu, 30 Oct 2008) | 1 line
@QueryParameter.value won't be necessary any more
................
r12855 | kohsuke | 2008-10-30 13:42:58 -0700 (Thu, 30 Oct 2008) | 1 line
need a strongly-typed constructor.
................
r12860 | kohsuke | 2008-10-30 15:24:18 -0700 (Thu, 30 Oct 2008) | 1 line
adding more reflection support, which in turn we use in taglibs to raise the level of abstraction.
................
r12861 | kohsuke | 2008-10-30 15:33:22 -0700 (Thu, 30 Oct 2008) | 1 line
added a tag to create databinding to a<select> element from an enum property
................
r12862 | kohsuke | 2008-10-30 15:37:44 -0700 (Thu, 30 Oct 2008) | 1 line
adding a smarter bi-directional binding through <f:repeatable field="..."/>
................
r12863 | kohsuke | 2008-10-30 15:47:48 -0700 (Thu, 30 Oct 2008) | 1 line
making progress with the EC2 support
................
r12864 | kohsuke | 2008-10-30 16:12:34 -0700 (Thu, 30 Oct 2008) | 1 line
added form field validation for AMI ID
................
r12865 | kohsuke | 2008-10-30 16:15:44 -0700 (Thu, 30 Oct 2008) | 1 line
added simpler version
................
r12866 | kohsuke | 2008-10-30 16:17:15 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12867 | kohsuke | 2008-10-30 16:17:19 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12868 | kohsuke | 2008-10-30 16:40:25 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12869 | kohsuke | 2008-10-30 17:00:57 -0700 (Thu, 30 Oct 2008) | 1 line
adding the provisioning of the new slave
................
r12870 | kohsuke | 2008-10-30 17:07:27 -0700 (Thu, 30 Oct 2008) | 1 line
/** {@inheritDoc} */ is the default behavior for javadoc, so there's no point in making that explicit.
................
r12871 | kohsuke | 2008-10-30 17:11:04 -0700 (Thu, 30 Oct 2008) | 1 line
doc bug fix
................
r12872 | kohsuke | 2008-10-30 17:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12873 | kohsuke | 2008-10-30 17:19:06 -0700 (Thu, 30 Oct 2008) | 1 line
added RetentionStrategy for EC2 instances
................
r12874 | kohsuke | 2008-10-30 17:21:17 -0700 (Thu, 30 Oct 2008) | 1 line
allowing subclasses to override the disconnect behavior.
................
r12875 | kohsuke | 2008-10-30 18:02:35 -0700 (Thu, 30 Oct 2008) | 1 line
added termination
................
r12876 | kohsuke | 2008-10-30 18:05:30 -0700 (Thu, 30 Oct 2008) | 1 line
forgot to rename when NodeFactory was renamed to Cloud
................
r12877 | kohsuke | 2008-10-30 18:06:08 -0700 (Thu, 30 Oct 2008) | 1 line
using the console icon
................
r12878 | kohsuke | 2008-10-30 18:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
adding UI to remove a slave.
................
r12879 | kohsuke | 2008-10-30 18:48:57 -0700 (Thu, 30 Oct 2008) | 1 line
commons-discovery now needed in stapler
................
r12880 | kohsuke | 2008-10-30 18:50:27 -0700 (Thu, 30 Oct 2008) | 1 line
needs to use a newer version of stapler
................
r12881 | kohsuke | 2008-10-30 18:51:02 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12882 | kohsuke | 2008-10-30 18:51:43 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12896 | kohsuke | 2008-10-31 14:52:07 -0700 (Fri, 31 Oct 2008) | 1 line
fixed the ordering between field and the mighty get(String) method.
................
r12897 | kohsuke | 2008-10-31 15:08:41 -0700 (Fri, 31 Oct 2008) | 1 line
fixed test compilation problems
................
r12898 | kohsuke | 2008-10-31 15:11:25 -0700 (Fri, 31 Oct 2008) | 1 line
marking this as a model object since it's always bound to URL.
................
r12899 | kohsuke | 2008-10-31 15:13:42 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up to manually provision a new node
................
r12900 | kohsuke | 2008-10-31 15:14:00 -0700 (Fri, 31 Oct 2008) | 1 line
after merging the trunk the version number is different
................
r12901 | kohsuke | 2008-10-31 15:21:54 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up for provisioning a new slave
................
r12902 | kohsuke | 2008-10-31 15:45:10 -0700 (Fri, 31 Oct 2008) | 1 line
adding a hook to decorate ComputerLauncher.
................
r12903 | kohsuke | 2008-10-31 15:48:21 -0700 (Fri, 31 Oct 2008) | 1 line
added filtering support
................
r12904 | kohsuke | 2008-10-31 15:52:45 -0700 (Fri, 31 Oct 2008) | 1 line
added view
................
r12905 | kohsuke | 2008-10-31 15:53:49 -0700 (Fri, 31 Oct 2008) | 1 line
doc improvement
................
r12914 | kohsuke | 2008-11-01 17:45:57 -0700 (Sat, 01 Nov 2008) | 1 line
adding code for connecting with SSH
................
r12915 | kohsuke | 2008-11-01 17:49:28 -0700 (Sat, 01 Nov 2008) | 1 line
working on launchers
................
r12916 | kohsuke | 2008-11-01 18:33:12 -0700 (Sat, 01 Nov 2008) | 1 line
added a method to fully read a stream
................
r12917 | kohsuke | 2008-11-01 18:33:45 -0700 (Sat, 01 Nov 2008) | 1 line
bumped up stapler
................
r12918 | kohsuke | 2008-11-01 18:39:41 -0700 (Sat, 01 Nov 2008) | 1 line
doc improvement.
................
r12919 | kohsuke | 2008-11-01 18:45:24 -0700 (Sat, 01 Nov 2008) | 1 line
added a launcher
................
r12920 | kohsuke | 2008-11-01 18:55:02 -0700 (Sat, 01 Nov 2008) | 1 line
implementing the actual ComputerLauncher
................
r12938 | kohsuke | 2008-11-02 08:56:05 -0800 (Sun, 02 Nov 2008) | 1 line
support the field notation
................
r12939 | kohsuke | 2008-11-02 09:20:21 -0800 (Sun, 02 Nov 2008) | 1 line
added the mechanism to execute the init script
................
r12940 | kohsuke | 2008-11-02 09:21:38 -0800 (Sun, 02 Nov 2008) | 1 line
simplification
................
r12941 | kohsuke | 2008-11-02 09:36:21 -0800 (Sun, 02 Nov 2008) | 1 line
adding key handling
................
r12950 | kohsuke | 2008-11-03 11:00:58 -0800 (Mon, 03 Nov 2008) | 1 line
formatting changes
................
r13045 | kohsuke | 2008-11-06 15:24:32 -0800 (Thu, 06 Nov 2008) | 1 line
adding time series datatype for retaining load average statistics in memory
................
r13046 | kohsuke | 2008-11-06 15:59:02 -0800 (Thu, 06 Nov 2008) | 1 line
added a convenience method.
................
r13048 | kohsuke | 2008-11-06 16:21:54 -0800 (Thu, 06 Nov 2008) | 2 lines
- started monitoring # of executor statistics.
- exposed label to the remote API
................
r13063 | kohsuke | 2008-11-07 13:05:15 -0800 (Fri, 07 Nov 2008) | 1 line
added a convenience method.
................
r13064 | kohsuke | 2008-11-07 13:11:08 -0800 (Fri, 07 Nov 2008) | 1 line
monitor the length of the queue too
................
r13066 | kohsuke | 2008-11-07 14:15:56 -0800 (Fri, 07 Nov 2008) | 1 line
moved the stats to its own class.
................
r13072 | kohsuke | 2008-11-07 15:40:29 -0800 (Fri, 07 Nov 2008) | 1 line
adding provisioning logic based on load statistics
................
r13073 | kohsuke | 2008-11-07 15:46:00 -0800 (Fri, 07 Nov 2008) | 1 line
for effective testing, we need sub-sec precision
................
r13074 | kohsuke | 2008-11-07 16:24:44 -0800 (Fri, 07 Nov 2008) | 1 line
fixed a lie.
................
r13075 | kohsuke | 2008-11-07 16:25:12 -0800 (Fri, 07 Nov 2008) | 1 line
bug fix
................
r13076 | kohsuke | 2008-11-07 16:30:55 -0800 (Fri, 07 Nov 2008) | 1 line
avoid using deprecated methods
................
r13111 | kohsuke | 2008-11-09 11:54:23 -0800 (Sun, 09 Nov 2008) | 1 line
added the Future<?> return parameter to Computer.launch(). To do this w/o breaking compatibility, renamed launch to connect.
................
r13122 | kohsuke | 2008-11-10 14:38:03 -0800 (Mon, 10 Nov 2008) | 1 line
allow programmatic update of the assigned label
................
r13123 | kohsuke | 2008-11-10 14:38:40 -0800 (Mon, 10 Nov 2008) | 1 line
Iterator not needed because CopyOnWriteArrayList doesn't support removal via iterator.
................
r13124 | kohsuke | 2008-11-10 14:39:24 -0800 (Mon, 10 Nov 2008) | 1 line
added another Builder for tests
................
r13125 | kohsuke | 2008-11-10 14:39:48 -0800 (Mon, 10 Nov 2008) | 1 line
simplified a bit. This TestEnvironment stuff needs some clearer story.
................
r13126 | kohsuke | 2008-11-10 14:46:40 -0800 (Mon, 10 Nov 2008) | 1 line
IDEA complains about this.
................
r13127 | kohsuke | 2008-11-10 14:51:53 -0800 (Mon, 10 Nov 2008) | 1 line
improved the error diagnostics by displaying why a provisioned node failed to launch
................
r13128 | kohsuke | 2008-11-10 14:52:12 -0800 (Mon, 10 Nov 2008) | 1 line
Started a test case for NodeProvisioner
................
r13129 | kohsuke | 2008-11-10 14:52:27 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13130 | kohsuke | 2008-11-10 15:16:02 -0800 (Mon, 10 Nov 2008) | 1 line
report the failure as a failure.
................
r13131 | kohsuke | 2008-11-10 16:34:23 -0800 (Mon, 10 Nov 2008) | 1 line
adding a parameter to the connect method to support joining to the pending launch activity.
................
r13132 | kohsuke | 2008-11-10 16:38:31 -0800 (Mon, 10 Nov 2008) | 1 line
making members public so that it can be accessed from other classes (DummyCloudImpl was the first to do this)
................
r13133 | kohsuke | 2008-11-10 16:38:58 -0800 (Mon, 10 Nov 2008) | 1 line
split the cloud implementation to a separate class to allow reuse.
................
r13134 | kohsuke | 2008-11-10 16:56:27 -0800 (Mon, 10 Nov 2008) | 1 line
assign unique names to support multiple jobs
................
r13135 | kohsuke | 2008-11-10 17:11:31 -0800 (Mon, 10 Nov 2008) | 1 line
avoid unnecessary interruption
................
r13136 | kohsuke | 2008-11-10 17:11:41 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13137 | kohsuke | 2008-11-10 17:16:28 -0800 (Mon, 10 Nov 2008) | 1 line
cleaned up a test case
................
r13138 | kohsuke | 2008-11-10 17:36:52 -0800 (Mon, 10 Nov 2008) | 1 line
since the setNode method is called on every Computer just by adding a new node, don't force a new launch attempt.
................
r13139 | kohsuke | 2008-11-10 17:37:38 -0800 (Mon, 10 Nov 2008) | 1 line
perform orderly shutdown by giving computers enough time to disconnect.
................
r13140 | kohsuke | 2008-11-10 17:38:08 -0800 (Mon, 10 Nov 2008) | 3 lines
return Future for synchronization.
This breaks binary compatibility, but I checked none of the plugins in Hudson SVN uses this, so I hope this is OK.
................
r13141 | kohsuke | 2008-11-10 17:38:46 -0800 (Mon, 10 Nov 2008) | 1 line
improved diagnostics
................
r13142 | kohsuke | 2008-11-10 17:39:55 -0800 (Mon, 10 Nov 2008) | 1 line
removed compiler warning
................
r13143 | kohsuke | 2008-11-10 18:02:56 -0800 (Mon, 10 Nov 2008) | 1 line
hide the rounding related problem from Cloud by passing int instead of float.
................
r13144 | kohsuke | 2008-11-10 18:10:10 -0800 (Mon, 10 Nov 2008) | 1 line
bug fix
................
r13145 | kohsuke | 2008-11-10 18:11:51 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13146 | kohsuke | 2008-11-10 18:15:08 -0800 (Mon, 10 Nov 2008) | 1 line
moved the slave launch code to HudsonTestCase for reuse
................
r13147 | kohsuke | 2008-11-10 18:20:19 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13150 | kohsuke | 2008-11-11 07:28:53 -0800 (Tue, 11 Nov 2008) | 1 line
bug fix
................
r13153 | kohsuke | 2008-11-11 14:04:21 -0800 (Tue, 11 Nov 2008) | 1 line
cutting down the test size to 5 to increase the test speed
................
r13154 | kohsuke | 2008-11-11 14:04:37 -0800 (Tue, 11 Nov 2008) | 1 line
improved debuggability
................
r13155 | kohsuke | 2008-11-11 14:10:04 -0800 (Tue, 11 Nov 2008) | 1 line
added another convenience method
................
r13156 | kohsuke | 2008-11-11 14:10:21 -0800 (Tue, 11 Nov 2008) | 1 line
further reduce the test turn around time
................
r13157 | kohsuke | 2008-11-11 14:22:03 -0800 (Tue, 11 Nov 2008) | 1 line
doc improvement and clean up
................
r13158 | kohsuke | 2008-11-11 14:22:28 -0800 (Tue, 11 Nov 2008) | 1 line
added a new metho
................
r13487 | kohsuke | 2008-12-09 17:17:30 -0800 (Tue, 09 Dec 2008) | 1 line
SlaveTemplate needs to be able to computer # of executors.
................
r13488 | kohsuke | 2008-12-09 17:18:05 -0800 (Tue, 09 Dec 2008) | 1 line
fixed a compilation problem with the latest head of the branch
................
r13851 | kohsuke | 2008-12-24 13:40:43 -0800 (Wed, 24 Dec 2008) | 82 lines
fixed a dead lock reported by Jesse.
Found one Java-level deadlock:
=============================
"Executor #0 for master":
waiting to lock monitor 0x09409bac (object 0x87474ca0, a hudson.util.CopyOnWriteMap$Hash),
which is held by "main"
"main":
waiting to lock monitor 0x09409b48 (object 0x87474d48, a hudson.model.Hudson$MasterComputer),
which is held by "Executor #0 for master"
Java stack information for the threads listed above:
===================================================
"Executor #0 for master":
at hudson.util.CopyOnWriteMap.remove(CopyOnWriteMap.java:78)
- waiting to lock <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.removeComputer(Hudson.java:717)
at hudson.model.Computer.removeExecutor(Computer.java:433)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Executor.run(Executor.java:65)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
"main":
at hudson.model.Computer.setNumExecutors(Computer.java:338)
- waiting to lock <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Computer.setNode(Computer.java:327)
at hudson.model.Hudson.updateComputer(Hudson.java:704)
at hudson.model.Hudson.updateComputerList(Hudson.java:685)
- locked <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.setNodes(Hudson.java:1076)
at hudson.model.Hudson.addNode(Hudson.java:1060)
- locked <0x87474cb0> (a hudson.model.Hudson)
at org.jvnet.hudson.test.HudsonTestCase.createSlave(HudsonTestCase.java:247)
at hudson.slaves.NodeProvisionerTest.testBaselineSlaveUsage(NodeProvisionerTest.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at org.jvnet.hudson.test.HudsonTestCase.runTest(HudsonTestCase.java:151)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:241)
at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:537)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Found 1 deadlock.
................
r13852 | kohsuke | 2008-12-24 14:32:29 -0800 (Wed, 24 Dec 2008) | 1 line
bug fix in the test case.
................
r13854 | kohsuke | 2008-12-24 15:20:22 -0800 (Wed, 24 Dec 2008) | 2 lines
Using a new version of Rhino to get a proper exception chaining.
................
r13855 | kohsuke | 2008-12-24 15:22:13 -0800 (Wed, 24 Dec 2008) | 1 line
typo
................
r13856 | kohsuke | 2008-12-24 15:37:56 -0800 (Wed, 24 Dec 2008) | 1 line
CR shouldn't be in the repository
................
r13859 | kohsuke | 2008-12-24 15:50:32 -0800 (Wed, 24 Dec 2008) | 3 lines
Fixed svn:eol-style.
................
r13866 | kohsuke | 2008-12-24 21:26:43 -0800 (Wed, 24 Dec 2008) | 3 lines
Copying rev.13860 to retry a merge that now looks suspicious.
................
r13869 | kohsuke | 2008-12-24 22:03:46 -0800 (Wed, 24 Dec 2008) | 2 lines
The 2nd merge was successful, so adopting the successful merge as the multiple-computer-per-node branch.
................
r13872 | kohsuke | 2008-12-25 07:28:37 -0800 (Thu, 25 Dec 2008) | 1 line
fixed a test failure
................
r13873 | kohsuke | 2008-12-25 08:16:49 -0800 (Thu, 25 Dec 2008) | 1 line
expanded NodeProvisioner to work on per-label basis
................
r13874 | kohsuke | 2008-12-25 08:27:32 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13875 | kohsuke | 2008-12-25 08:33:17 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13876 | kohsuke | 2008-12-25 08:45:03 -0800 (Thu, 25 Dec 2008) | 3 lines
[HUDSON-2605] Strangely, I discovered that on some File, which is new File("./target/hudson-for-test"), file.exists()==false but file.getAbsoluteFile().exists()==true.
It looks like this happens when $PWD of the process at the OS level is different from System.getProperty("user.dir")
................
r13878 | kohsuke | 2008-12-25 15:52:45 -0800 (Thu, 25 Dec 2008) | 1 line
added a marker file
................
r13879 | kohsuke | 2008-12-25 15:53:13 -0800 (Thu, 25 Dec 2008) | 1 line
use marker file to find the hudson main workspace.
................
r13883 | kohsuke | 2008-12-26 07:50:44 -0800 (Fri, 26 Dec 2008) | 1 line
avoid using a deprecated method.
................
r13884 | kohsuke | 2008-12-26 07:50:59 -0800 (Fri, 26 Dec 2008) | 1 line
adding more probes
................
r13885 | kohsuke | 2008-12-26 08:15:42 -0800 (Fri, 26 Dec 2008) | 1 line
for analyzing test failures, capturing the output is crucial.
................
r13887 | kohsuke | 2008-12-26 11:25:12 -0800 (Fri, 26 Dec 2008) | 1 line
allow sub-types to intercept mutation
................
r13888 | kohsuke | 2008-12-26 11:26:01 -0800 (Fri, 26 Dec 2008) | 1 line
clouds need to be taken into account before marking a label as pointless.
................
r13889 | kohsuke | 2008-12-26 11:26:40 -0800 (Fri, 26 Dec 2008) | 3 lines
fixing bugs in NodeProvisioner.
Conservative estimate on idle executors have to be max, not min.
................
r13890 | kohsuke | 2008-12-26 11:42:53 -0800 (Fri, 26 Dec 2008) | 1 line
turns out the problem was that we were adding multiple slaves under the same name, which confused Hudson to no end.
................
r13896 | kohsuke | 2008-12-27 07:44:20 -0800 (Sat, 27 Dec 2008) | 1 line
formatting changes
................
r13897 | kohsuke | 2008-12-27 07:45:00 -0800 (Sat, 27 Dec 2008) | 1 line
reprot the test name to stdout so that one can easily distinguish different tests in target/surefire-reports/xyz-output.txt
................
r13898 | kohsuke | 2008-12-27 07:54:53 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13899 | kohsuke | 2008-12-27 09:59:07 -0800 (Sat, 27 Dec 2008) | 1 line
split the functionality into two classes
................
r13900 | kohsuke | 2008-12-27 10:00:29 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13901 | kohsuke | 2008-12-27 10:06:24 -0800 (Sat, 27 Dec 2008) | 1 line
added 'tick'
................
r13902 | kohsuke | 2008-12-27 10:08:04 -0800 (Sat, 27 Dec 2008) | 1 line
adding graph rendering of the load statistics
................
r13903 | kohsuke | 2008-12-27 10:19:41 -0800 (Sat, 27 Dec 2008) | 1 line
improved graph layout
................
r13904 | kohsuke | 2008-12-27 10:21:05 -0800 (Sat, 27 Dec 2008) | 1 line
Picker -> TimeScale to better reflect what it is.
................
r13905 | kohsuke | 2008-12-27 10:40:27 -0800 (Sat, 27 Dec 2008) | 1 line
duplicate
................
r13906 | kohsuke | 2008-12-27 14:39:36 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to a shorter name
................
r13907 | kohsuke | 2008-12-27 15:03:25 -0800 (Sat, 27 Dec 2008) | 1 line
added icons
................
r13908 | kohsuke | 2008-12-27 16:20:37 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to make 'loadStatistics' the URL binding.
................
r13909 | kohsuke | 2008-12-27 16:21:01 -0800 (Sat, 27 Dec 2008) | 1 line
exposing loadStatistics for Computer for better URL binding
................
r13910 | kohsuke | 2008-12-27 16:21:16 -0800 (Sat, 27 Dec 2008) | 1 line
adding UI support
................
r13911 | kohsuke | 2008-12-27 19:31:43 -0800 (Sat, 27 Dec 2008) | 1 line
added some basic visualization
................
r13912 | kohsuke | 2008-12-27 19:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
if there's no description, don't even show it.
................
r13913 | kohsuke | 2008-12-27 19:39:26 -0800 (Sat, 27 Dec 2008) | 1 line
added load statistics page for the label as well.
................
r13914 | kohsuke | 2008-12-27 19:48:55 -0800 (Sat, 27 Dec 2008) | 1 line
added one more convenience method.
................
r13915 | kohsuke | 2008-12-27 19:54:29 -0800 (Sat, 27 Dec 2008) | 1 line
refactored so that a different Dataset can be fed.
................
r13916 | kohsuke | 2008-12-27 19:59:20 -0800 (Sat, 27 Dec 2008) | 1 line
added global load statistics lnk to the management screen.
................
r13917 | kohsuke | 2008-12-27 20:31:01 -0800 (Sat, 27 Dec 2008) | 1 line
<dt>s should use the bold font to distinguish them from <dd>s
................
r13918 | kohsuke | 2008-12-27 20:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
r13919 | kohsuke | 2008-12-27 20:35:39 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14215 71c3de6d-444a-0410-be80-ed276b4c234a
2009-01-07 09:02:56 +08:00
|
|
|
if(h!=null)
|
|
|
|
|
btn.addListener("click",h);
|
2009-03-19 05:47:34 +08:00
|
|
|
var be = btn.get("element");
|
|
|
|
|
Element.addClassName(be,clsName);
|
|
|
|
|
if(n!=null) // copy the name
|
|
|
|
|
be.setAttribute("name",n);
|
2007-11-20 01:46:08 +08:00
|
|
|
return btn;
|
2007-10-27 22:17:47 +08:00
|
|
|
}
|
|
|
|
|
|
2006-11-06 05:16:01 +08:00
|
|
|
var hudsonRules = {
|
2007-09-04 03:38:52 +08:00
|
|
|
"BODY" : function() {
|
2007-10-29 00:28:00 +08:00
|
|
|
tooltip = new YAHOO.widget.Tooltip("tt", {context:[], zindex:999});
|
2007-09-04 03:38:52 +08:00
|
|
|
},
|
2007-06-13 12:31:20 +08:00
|
|
|
|
2007-10-31 08:43:46 +08:00
|
|
|
// do the ones that extract innerHTML so that they can get their original HTML before
|
|
|
|
|
// other behavior rules change them (like YUI buttons.)
|
|
|
|
|
|
|
|
|
|
"DIV.hetero-list-container" : function(e) {
|
|
|
|
|
// components for the add button
|
|
|
|
|
var menu = document.createElement("SELECT");
|
|
|
|
|
var btn = findElementsBySelector(e,"INPUT.hetero-list-add")[0];
|
|
|
|
|
YAHOO.util.Dom.insertAfter(menu,btn);
|
|
|
|
|
|
|
|
|
|
var prototypes = e.lastChild;
|
|
|
|
|
while(!Element.hasClassName(prototypes,"prototypes"))
|
|
|
|
|
prototypes = prototypes.previousSibling;
|
|
|
|
|
var insertionPoint = prototypes.previousSibling; // this is where the new item is inserted.
|
|
|
|
|
|
|
|
|
|
// extract templates
|
|
|
|
|
var templates = []; var i=0;
|
|
|
|
|
for(var n=prototypes.firstChild;n!=null;n=n.nextSibling,i++) {
|
|
|
|
|
var name = n.getAttribute("name");
|
2007-11-09 09:27:04 +08:00
|
|
|
var tooltip = n.getAttribute("tooltip");
|
2007-10-31 08:43:46 +08:00
|
|
|
menu.options[i] = new Option(n.getAttribute("title"),""+i);
|
2007-11-09 09:27:04 +08:00
|
|
|
templates.push({html:n.innerHTML, name:name, tooltip:tooltip});
|
2007-10-31 08:43:46 +08:00
|
|
|
}
|
|
|
|
|
Element.remove(prototypes);
|
|
|
|
|
|
2008-03-24 13:02:31 +08:00
|
|
|
// D&D support
|
|
|
|
|
function prepareDD(e) {
|
|
|
|
|
var dd = new DragDrop(e);
|
|
|
|
|
var h = e;
|
|
|
|
|
// locate a handle
|
|
|
|
|
while(!Element.hasClassName(h,"dd-handle"))
|
|
|
|
|
h = h.firstChild;
|
|
|
|
|
dd.setHandleElId(h);
|
|
|
|
|
}
|
|
|
|
|
var withDragDrop = Element.hasClassName(e,"with-drag-drop");
|
|
|
|
|
if(withDragDrop) {
|
|
|
|
|
for(e=e.firstChild; e!=null; e=e.nextSibling) {
|
|
|
|
|
if(Element.hasClassName(e,"repeated-chunk"))
|
|
|
|
|
prepareDD(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2007-10-31 08:43:46 +08:00
|
|
|
var menuButton = new YAHOO.widget.Button(btn, { type: "menu", menu: menu });
|
|
|
|
|
menuButton.getMenu().clickEvent.subscribe(function(type,args,value) {
|
|
|
|
|
var t = templates[parseInt(args[1].value)]; // where this args[1] comes is a real mystery
|
|
|
|
|
|
|
|
|
|
var nc = document.createElement("div");
|
|
|
|
|
nc.className = "repeated-chunk";
|
|
|
|
|
nc.setAttribute("name",t.name);
|
|
|
|
|
nc.innerHTML = t.html;
|
|
|
|
|
insertionPoint.parentNode.insertBefore(nc, insertionPoint);
|
2008-03-24 13:02:31 +08:00
|
|
|
if(withDragDrop) prepareDD(nc);
|
|
|
|
|
|
2007-10-31 08:43:46 +08:00
|
|
|
Behaviour.applySubtree(nc);
|
|
|
|
|
});
|
2007-11-09 09:27:04 +08:00
|
|
|
|
|
|
|
|
menuButton.getMenu().renderEvent.subscribe(function(type,args,value) {
|
|
|
|
|
// hook up tooltip for menu items
|
|
|
|
|
var items = menuButton.getMenu().getItems();
|
|
|
|
|
for(i=0; i<items.length; i++) {
|
|
|
|
|
var t = templates[i].tooltip;
|
|
|
|
|
if(t!=null)
|
|
|
|
|
applyTooltip(items[i].element,t);
|
|
|
|
|
}
|
|
|
|
|
});
|
2007-10-31 08:43:46 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
"DIV.repeated-container" : function(e) {
|
|
|
|
|
// compute the insertion point
|
|
|
|
|
var ip = e.lastChild;
|
|
|
|
|
while (!Element.hasClassName(ip, "repeatable-insertion-point"))
|
|
|
|
|
ip = ip.previousSibling;
|
|
|
|
|
// set up the logic
|
|
|
|
|
object(repeatableSupport).init(e, e.firstChild, ip);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
2007-09-04 07:19:56 +08:00
|
|
|
"TABLE.sortable" : function(e) {// sortable table
|
|
|
|
|
ts_makeSortable(e);
|
|
|
|
|
},
|
|
|
|
|
|
2007-09-06 14:10:35 +08:00
|
|
|
"TABLE.progress-bar" : function(e) {// sortable table
|
|
|
|
|
e.onclick = function() {
|
|
|
|
|
var href = this.getAttribute("href");
|
2007-09-06 14:38:21 +08:00
|
|
|
if(href!=null) window.location = href;
|
2007-09-06 14:10:35 +08:00
|
|
|
}
|
|
|
|
|
e = null; // avoid memory leak
|
|
|
|
|
},
|
|
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
"INPUT.advancedButton" : function(e) {
|
2007-10-27 22:17:47 +08:00
|
|
|
makeButton(e,function(e) {
|
2007-10-27 22:26:11 +08:00
|
|
|
var link = e.target;
|
|
|
|
|
while(!Element.hasClassName(link,"advancedLink"))
|
|
|
|
|
link = link.parentNode;
|
2007-09-04 03:38:52 +08:00
|
|
|
link.style.display = "none"; // hide the button
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
var container = link.nextSibling.firstChild; // TABLE -> TBODY
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
var tr = link;
|
|
|
|
|
while (tr.tagName != "TR")
|
|
|
|
|
tr = tr.parentNode;
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
// move the contents of the advanced portion into the main table
|
2007-11-08 10:27:47 +08:00
|
|
|
var nameRef = tr.getAttribute("nameref");
|
|
|
|
|
while (container.lastChild != null) {
|
|
|
|
|
var row = container.lastChild;
|
|
|
|
|
if(nameRef!=null)
|
|
|
|
|
row.setAttribute("nameref",nameRef);
|
|
|
|
|
tr.parentNode.insertBefore(row, tr.nextSibling);
|
|
|
|
|
}
|
2007-10-27 22:17:47 +08:00
|
|
|
});
|
2007-09-04 03:38:52 +08:00
|
|
|
e = null; // avoid memory leak
|
|
|
|
|
},
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2008-03-10 12:33:16 +08:00
|
|
|
"INPUT.expandButton" : function(e) {
|
|
|
|
|
makeButton(e,function(e) {
|
|
|
|
|
var link = e.target;
|
|
|
|
|
while(!Element.hasClassName(link,"advancedLink"))
|
|
|
|
|
link = link.parentNode;
|
|
|
|
|
link.style.display = "none";
|
|
|
|
|
link.nextSibling.style.display="block";
|
|
|
|
|
});
|
|
|
|
|
e = null; // avoid memory leak
|
|
|
|
|
},
|
|
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
// scripting for having default value in the input field
|
|
|
|
|
"INPUT.has-default-text" : function(e) {
|
|
|
|
|
var defaultValue = e.value;
|
|
|
|
|
Element.addClassName(e, "defaulted");
|
|
|
|
|
e.onfocus = function() {
|
|
|
|
|
if (this.value == defaultValue) {
|
|
|
|
|
this.value = "";
|
2007-09-04 07:35:22 +08:00
|
|
|
Element.removeClassName(this, "defaulted");
|
2007-09-04 03:38:52 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
e.onblur = function() {
|
|
|
|
|
if (this.value == "") {
|
|
|
|
|
this.value = defaultValue;
|
2007-09-04 07:35:22 +08:00
|
|
|
Element.addClassName(this, "defaulted");
|
2007-09-04 03:38:52 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
e = null; // avoid memory leak
|
|
|
|
|
},
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-29 09:26:57 +08:00
|
|
|
// <label> that doesn't use ID, so that it can be copied in <repeatable>
|
|
|
|
|
"LABEL.attach-previous" : function(e) {
|
|
|
|
|
e.onclick = function() {
|
|
|
|
|
var e = this;
|
|
|
|
|
while(e.tagName!="INPUT")
|
|
|
|
|
e=e.previousSibling;
|
|
|
|
|
e.click();
|
|
|
|
|
}
|
|
|
|
|
e = null;
|
|
|
|
|
},
|
|
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
// form fields that are validated via AJAX call to the server
|
|
|
|
|
// elements with this class should have two attributes 'checkUrl' that evaluates to the server URL.
|
|
|
|
|
"INPUT.validated" : registerValidator,
|
|
|
|
|
"SELECT.validated" : registerValidator,
|
|
|
|
|
"TEXTAREA.validated" : registerValidator,
|
|
|
|
|
|
|
|
|
|
// validate form values to be a number
|
|
|
|
|
"INPUT.number" : function(e) {
|
|
|
|
|
e.targetElement = findFollowingTR(e, "validation-error-area").firstChild.nextSibling;
|
|
|
|
|
e.onchange = function() {
|
|
|
|
|
if (this.value.match(/^(\d+|)$/)) {
|
|
|
|
|
this.targetElement.innerHTML = "";
|
|
|
|
|
} else {
|
|
|
|
|
this.targetElement.innerHTML = "<div class=error>Not a number</div>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
e = null; // avoid memory leak
|
|
|
|
|
},
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
"A.help-button" : function(e) {
|
|
|
|
|
e.onclick = function() {
|
|
|
|
|
var tr = findFollowingTR(this, "help-area");
|
|
|
|
|
var div = tr.firstChild.nextSibling.firstChild;
|
2006-11-06 05:16:01 +08:00
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
if (div.style.display != "block") {
|
|
|
|
|
div.style.display = "block";
|
2007-10-30 05:27:50 +08:00
|
|
|
// make it visible
|
2007-10-30 05:28:16 +08:00
|
|
|
new Ajax.Request(this.getAttribute("helpURL"), {
|
|
|
|
|
method : 'get',
|
|
|
|
|
onComplete : function(x) {
|
|
|
|
|
div.innerHTML = x.responseText;
|
|
|
|
|
}
|
|
|
|
|
});
|
2007-09-04 03:38:52 +08:00
|
|
|
} else {
|
|
|
|
|
div.style.display = "none";
|
2006-11-06 05:16:01 +08:00
|
|
|
}
|
|
|
|
|
|
2007-09-04 03:38:52 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
e = null; // avoid memory leak
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// deferred client-side clickable map.
|
|
|
|
|
// this is useful where the generation of <map> element is time consuming
|
|
|
|
|
"IMG[lazymap]" : function(e) {
|
|
|
|
|
new Ajax.Request(
|
|
|
|
|
e.getAttribute("lazymap"),
|
|
|
|
|
{
|
|
|
|
|
method : 'get',
|
2008-12-23 03:19:43 +08:00
|
|
|
onSuccess : function(x) {
|
2007-09-04 03:38:52 +08:00
|
|
|
var div = document.createElement("div");
|
|
|
|
|
document.body.appendChild(div);
|
|
|
|
|
div.innerHTML = x.responseText;
|
|
|
|
|
var id = "map" + (iota++);
|
|
|
|
|
div.firstChild.setAttribute("name", id);
|
|
|
|
|
e.setAttribute("usemap", "#" + id);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
2007-03-26 12:44:40 +08:00
|
|
|
|
|
|
|
|
// button to add a new repeatable block
|
|
|
|
|
"INPUT.repeatable-add" : function(e) {
|
2007-10-27 22:17:47 +08:00
|
|
|
makeButton(e,function(e) {
|
2007-10-29 00:40:49 +08:00
|
|
|
repeatableSupport.onAdd(e.target);
|
2007-10-27 22:17:47 +08:00
|
|
|
});
|
2007-09-04 01:58:19 +08:00
|
|
|
e = null; // avoid memory leak
|
2007-03-26 12:44:40 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
"INPUT.repeatable-delete" : function(e) {
|
2007-10-27 22:17:47 +08:00
|
|
|
makeButton(e,function(e) {
|
2007-10-29 00:40:49 +08:00
|
|
|
repeatableSupport.onDelete(e.target);
|
2007-10-27 22:17:47 +08:00
|
|
|
});
|
2007-09-04 01:58:19 +08:00
|
|
|
e = null; // avoid memory leak
|
2007-06-13 09:39:48 +08:00
|
|
|
},
|
|
|
|
|
|
2007-09-27 11:42:55 +08:00
|
|
|
// resizable text area
|
|
|
|
|
"TEXTAREA" : function(textarea) {
|
2008-04-05 13:57:43 +08:00
|
|
|
if(Element.hasClassName(textarea,"rich-editor")) {
|
|
|
|
|
// rich HTML editor
|
|
|
|
|
try {
|
|
|
|
|
var editor = new YAHOO.widget.Editor(textarea, {
|
|
|
|
|
dompath: true,
|
|
|
|
|
animate: true,
|
|
|
|
|
handleSubmit: true
|
|
|
|
|
});
|
|
|
|
|
// probably due to the timing issue, we need to let the editor know
|
|
|
|
|
// that DOM is ready
|
|
|
|
|
editor.DOMReady=true;
|
|
|
|
|
editor.fireQueue();
|
|
|
|
|
editor.render();
|
|
|
|
|
} catch(e) {
|
|
|
|
|
alert(e);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2007-09-27 12:30:31 +08:00
|
|
|
var handle = textarea.nextSibling;
|
|
|
|
|
if(handle==null || handle.className!="textarea-handle") return;
|
|
|
|
|
|
|
|
|
|
var Event = YAHOO.util.Event;
|
|
|
|
|
|
2007-09-27 11:42:55 +08:00
|
|
|
handle.onmousedown = function(ev) {
|
2007-09-27 12:30:31 +08:00
|
|
|
ev = Event.getEvent(ev);
|
|
|
|
|
var offset = textarea.offsetHeight-Event.getPageY(ev);
|
2007-09-27 11:42:55 +08:00
|
|
|
textarea.style.opacity = 0.5;
|
|
|
|
|
document.onmousemove = function(ev) {
|
2007-09-27 12:30:31 +08:00
|
|
|
ev = Event.getEvent(ev);
|
2007-09-27 11:42:55 +08:00
|
|
|
function max(a,b) { if(a<b) return b; else return a; }
|
2007-09-27 12:30:31 +08:00
|
|
|
textarea.style.height = max(32, offset + Event.getPageY(ev)) + 'px';
|
|
|
|
|
return false;
|
2007-09-27 11:42:55 +08:00
|
|
|
};
|
|
|
|
|
document.onmouseup = function() {
|
|
|
|
|
document.onmousemove = null;
|
|
|
|
|
document.onmouseup = null;
|
|
|
|
|
textarea.style.opacity = 1;
|
|
|
|
|
}
|
2007-09-27 12:30:31 +08:00
|
|
|
};
|
|
|
|
|
handle.ondblclick = function() {
|
|
|
|
|
textarea.style.height = "";
|
|
|
|
|
textarea.rows = textarea.value.split("\n").length;
|
2007-09-27 11:42:55 +08:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
2007-09-28 12:33:44 +08:00
|
|
|
// structured form submission
|
|
|
|
|
"FORM" : function(form) {
|
2008-12-30 23:49:38 +08:00
|
|
|
if(Element.hasClassName("no-json"))
|
|
|
|
|
return;
|
2007-09-28 12:39:06 +08:00
|
|
|
// add the hidden 'json' input field, which receives the form structure in JSON
|
2007-09-28 12:33:44 +08:00
|
|
|
var div = document.createElement("div");
|
2008-04-11 12:04:15 +08:00
|
|
|
div.innerHTML = "<input type=hidden name=json value=init>";
|
2007-09-28 12:33:44 +08:00
|
|
|
form.appendChild(div);
|
|
|
|
|
|
|
|
|
|
form.onsubmit = function() { buildFormTree(this) };
|
|
|
|
|
form = null; // memory leak prevention
|
|
|
|
|
},
|
|
|
|
|
|
2007-10-21 12:27:56 +08:00
|
|
|
// hook up tooltip.
|
|
|
|
|
// add nodismiss="" if you'd like to display the tooltip forever as long as the mouse is on the element.
|
2007-06-13 12:31:20 +08:00
|
|
|
"[tooltip]" : function(e) {
|
2007-11-09 09:27:04 +08:00
|
|
|
applyTooltip(e,e.getAttribute("tooltip"));
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
"INPUT.submit-button" : function(e) {
|
|
|
|
|
makeButton(e);
|
2008-03-12 02:24:19 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
"INPUT.yui-button" : function(e) {
|
|
|
|
|
makeButton(e);
|
2009-01-01 03:50:46 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// image that shows [+] or [-], with hover effect.
|
|
|
|
|
// oncollapsed and onexpanded will be called when the button is triggered.
|
|
|
|
|
"IMG.fold-control" : function(e) {
|
|
|
|
|
function changeTo(e,img) {
|
|
|
|
|
var src = e.src;
|
|
|
|
|
e.src = src.substring(0,src.lastIndexOf('/'))+"/"+e.getAttribute("state")+img;
|
|
|
|
|
}
|
|
|
|
|
e.onmouseover = function() {
|
|
|
|
|
changeTo(this,"-hover.png");
|
|
|
|
|
};
|
|
|
|
|
e.onmouseout = function() {
|
|
|
|
|
changeTo(this,".png");
|
|
|
|
|
};
|
|
|
|
|
e.parentNode.onclick = function(event) {
|
|
|
|
|
var e = this.firstChild;
|
|
|
|
|
var s = e.getAttribute("state");
|
|
|
|
|
if(s=="plus") {
|
|
|
|
|
e.setAttribute("state","minus");
|
|
|
|
|
if(e.onexpanded) e.onexpanded();
|
|
|
|
|
} else {
|
|
|
|
|
e.setAttribute("state","plus");
|
|
|
|
|
if(e.oncollapsed) e.oncollapsed();
|
|
|
|
|
}
|
|
|
|
|
changeTo(e,"-hover.png");
|
|
|
|
|
YAHOO.util.Event.stopEvent(event);
|
|
|
|
|
return false;
|
|
|
|
|
};
|
|
|
|
|
e = null; // memory leak prevention
|
2007-11-09 09:27:04 +08:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function applyTooltip(e,text) {
|
2007-06-13 12:31:20 +08:00
|
|
|
// copied from YAHOO.widget.Tooltip.prototype.configContext to efficiently add a new element
|
2007-09-05 14:50:13 +08:00
|
|
|
// event registration via YAHOO.util.Event.addListener leaks memory, so do it by ourselves here
|
2007-10-21 12:27:56 +08:00
|
|
|
e.onmouseover = function(ev) {
|
|
|
|
|
var delay = this.getAttribute("nodismiss")!=null ? 99999999 : 5000;
|
|
|
|
|
tooltip.cfg.setProperty("autodismissdelay",delay);
|
|
|
|
|
return tooltip.onContextMouseOver.call(this,YAHOO.util.Event.getEvent(ev),tooltip);
|
|
|
|
|
}
|
2007-09-27 23:28:37 +08:00
|
|
|
e.onmousemove = function(ev) { return tooltip.onContextMouseMove.call(this,YAHOO.util.Event.getEvent(ev),tooltip); }
|
|
|
|
|
e.onmouseout = function(ev) { return tooltip.onContextMouseOut .call(this,YAHOO.util.Event.getEvent(ev),tooltip); }
|
2007-11-09 09:27:04 +08:00
|
|
|
e.title = text;
|
2007-09-05 14:50:13 +08:00
|
|
|
e = null; // avoid memory leak
|
2007-03-26 12:44:40 +08:00
|
|
|
}
|
2006-11-06 05:16:01 +08:00
|
|
|
|
|
|
|
|
Behaviour.register(hudsonRules);
|
|
|
|
|
|
|
|
|
|
|
2008-04-08 03:40:48 +08:00
|
|
|
|
|
|
|
|
function xor(a,b) {
|
|
|
|
|
// convert both values to boolean by '!' and then do a!=b
|
|
|
|
|
return !a != !b;
|
|
|
|
|
}
|
|
|
|
|
|
2006-11-06 05:16:01 +08:00
|
|
|
// used by editableDescription.jelly to replace the description field with a form
|
|
|
|
|
function replaceDescription() {
|
|
|
|
|
var d = document.getElementById("description");
|
|
|
|
|
d.firstChild.nextSibling.innerHTML = "<div class='spinner-right'>loading...</div>";
|
|
|
|
|
new Ajax.Request(
|
|
|
|
|
"./descriptionForm",
|
|
|
|
|
{
|
2008-01-17 14:39:18 +08:00
|
|
|
method : 'post',
|
2006-11-06 05:16:01 +08:00
|
|
|
onComplete : function(x) {
|
|
|
|
|
d.innerHTML = x.responseText;
|
2007-09-27 11:42:55 +08:00
|
|
|
Behaviour.applySubtree(d);
|
2007-01-21 23:08:00 +08:00
|
|
|
d.getElementsByTagName("TEXTAREA")[0].focus();
|
2006-11-06 05:16:01 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
return false;
|
2006-11-17 00:46:18 +08:00
|
|
|
}
|
|
|
|
|
|
2007-09-04 11:42:53 +08:00
|
|
|
function applyNameRef(s,e,id) {
|
|
|
|
|
$(id).groupingNode = true;
|
|
|
|
|
// s contains the node itself
|
2009-02-16 07:19:19 +08:00
|
|
|
for(var x=s.nextSibling; x!=e; x=x.nextSibling) {
|
|
|
|
|
// to handle nested <f:rowSet> correctly, don't overwrite the existing value
|
|
|
|
|
if(x.getAttribute("nameRef")==null)
|
|
|
|
|
x.setAttribute("nameRef",id);
|
|
|
|
|
}
|
2007-09-04 11:42:53 +08:00
|
|
|
}
|
|
|
|
|
|
2007-09-29 08:58:19 +08:00
|
|
|
function initOptionalBlock(sid, eid, cid) {
|
|
|
|
|
applyNameRef($(sid),$(eid),cid);
|
2007-09-30 22:25:33 +08:00
|
|
|
updateOptionalBlock($(cid),false);
|
2007-09-04 11:42:53 +08:00
|
|
|
}
|
2006-11-17 00:46:18 +08:00
|
|
|
|
|
|
|
|
// used by optionalBlock.jelly to update the form status
|
2007-09-29 09:26:57 +08:00
|
|
|
// @param c checkbox element
|
2007-09-30 22:25:33 +08:00
|
|
|
function updateOptionalBlock(c,scroll) {
|
2007-09-29 09:26:57 +08:00
|
|
|
// find the start TR
|
|
|
|
|
var s = c;
|
2007-11-29 06:08:48 +08:00
|
|
|
while(!Element.hasClassName(s, "optional-block-start"))
|
2007-09-29 09:26:57 +08:00
|
|
|
s = s.parentNode;
|
|
|
|
|
var tbl = s.parentNode;
|
2006-11-17 00:46:18 +08:00
|
|
|
var i = false;
|
|
|
|
|
var o = false;
|
|
|
|
|
|
2008-04-08 03:40:48 +08:00
|
|
|
var checked = xor(c.checked,Element.hasClassName(c,"negative"));
|
2007-10-01 06:29:52 +08:00
|
|
|
var lastRow = null;
|
2006-11-17 00:46:18 +08:00
|
|
|
|
|
|
|
|
for (var j = 0; tbl.rows[j]; j++) {
|
|
|
|
|
var n = tbl.rows[j];
|
|
|
|
|
|
2007-11-29 06:08:48 +08:00
|
|
|
if (i && Element.hasClassName(n, "optional-block-end"))
|
2006-11-17 00:46:18 +08:00
|
|
|
o = true;
|
|
|
|
|
|
|
|
|
|
if (i && !o) {
|
2008-04-07 04:29:25 +08:00
|
|
|
if (checked) {
|
2006-11-17 00:46:18 +08:00
|
|
|
n.style.display = "";
|
2007-10-01 06:29:52 +08:00
|
|
|
lastRow = n;
|
2007-09-30 22:25:33 +08:00
|
|
|
} else
|
2006-11-17 00:46:18 +08:00
|
|
|
n.style.display = "none";
|
|
|
|
|
}
|
|
|
|
|
|
2007-09-29 09:26:57 +08:00
|
|
|
if (n==s) {
|
2006-11-17 00:46:18 +08:00
|
|
|
if (n.getAttribute('hasHelp') == 'true')
|
|
|
|
|
j++;
|
|
|
|
|
i = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
2007-09-30 22:25:33 +08:00
|
|
|
|
2007-10-01 06:29:52 +08:00
|
|
|
if(checked && scroll) {
|
|
|
|
|
var D = YAHOO.util.Dom;
|
|
|
|
|
|
|
|
|
|
var r = D.getRegion(s);
|
|
|
|
|
if(lastRow!=null) r = r.union(D.getRegion(lastRow));
|
|
|
|
|
scrollIntoView(r);
|
|
|
|
|
}
|
2006-11-17 00:46:18 +08:00
|
|
|
}
|
2007-01-16 03:20:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Auto-scroll support for progressive log output.
|
|
|
|
|
// See http://radio.javaranch.com/pascarello/2006/08/17/1155837038219.html
|
|
|
|
|
//
|
|
|
|
|
function AutoScroller(scrollContainer) {
|
|
|
|
|
// get the height of the viewport.
|
|
|
|
|
// See http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
|
|
|
|
|
function getViewportHeight() {
|
|
|
|
|
if (typeof( window.innerWidth ) == 'number') {
|
|
|
|
|
//Non-IE
|
|
|
|
|
return window.innerHeight;
|
|
|
|
|
} else if (document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight )) {
|
|
|
|
|
//IE 6+ in 'standards compliant mode'
|
|
|
|
|
return document.documentElement.clientHeight;
|
|
|
|
|
} else if (document.body && ( document.body.clientWidth || document.body.clientHeight )) {
|
|
|
|
|
//IE 4 compatible
|
|
|
|
|
return document.body.clientHeight;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
bottomThreshold : 25,
|
|
|
|
|
scrollContainer: scrollContainer,
|
|
|
|
|
|
|
|
|
|
getCurrentHeight : function() {
|
|
|
|
|
var scrollDiv = $(this.scrollContainer);
|
|
|
|
|
|
|
|
|
|
if (scrollDiv.scrollHeight > 0)
|
|
|
|
|
return scrollDiv.scrollHeight;
|
|
|
|
|
else
|
|
|
|
|
if (objDiv.offsetHeight > 0)
|
|
|
|
|
return scrollDiv.offsetHeight;
|
|
|
|
|
|
|
|
|
|
return null; // huh?
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// return true if we are in the "stick to bottom" mode
|
|
|
|
|
isSticking : function() {
|
|
|
|
|
var scrollDiv = $(this.scrollContainer);
|
|
|
|
|
var currentHeight = this.getCurrentHeight();
|
|
|
|
|
|
|
|
|
|
// when used with the BODY tag, the height needs to be the viewport height, instead of
|
|
|
|
|
// the element height.
|
|
|
|
|
//var height = ((scrollDiv.style.pixelHeight) ? scrollDiv.style.pixelHeight : scrollDiv.offsetHeight);
|
|
|
|
|
var height = getViewportHeight();
|
|
|
|
|
var diff = currentHeight - scrollDiv.scrollTop - height;
|
|
|
|
|
// window.alert("currentHeight=" + currentHeight + ",scrollTop=" + scrollDiv.scrollTop + ",height=" + height);
|
|
|
|
|
|
|
|
|
|
return diff < this.bottomThreshold;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
scrollToBottom : function() {
|
|
|
|
|
var scrollDiv = $(this.scrollContainer);
|
|
|
|
|
scrollDiv.scrollTop = this.getCurrentHeight();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
2007-01-25 23:47:33 +08:00
|
|
|
|
2007-09-30 22:25:33 +08:00
|
|
|
// scroll the current window to display the given element or the region.
|
|
|
|
|
function scrollIntoView(e) {
|
|
|
|
|
function calcDelta(ex1,ex2,vx1,vw) {
|
|
|
|
|
var vx2=vx1+vw;
|
|
|
|
|
var a;
|
|
|
|
|
a = Math.min(vx1-ex1,vx2-ex2);
|
|
|
|
|
if(a>0) return -a;
|
|
|
|
|
a = Math.min(ex1-vx1,ex2-vx2);
|
|
|
|
|
if(a>0) return a;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var D = YAHOO.util.Dom;
|
|
|
|
|
|
|
|
|
|
var r;
|
|
|
|
|
if(e.tagName!=null) r = D.getRegion(e);
|
|
|
|
|
else r = e;
|
|
|
|
|
|
|
|
|
|
var dx = calcDelta(r.left,r.right, document.body.scrollLeft, D.getViewportWidth());
|
|
|
|
|
var dy = calcDelta(r.top, r.bottom,document.body.scrollTop, D.getViewportHeight());
|
|
|
|
|
window.scrollBy(dx,dy);
|
|
|
|
|
}
|
2007-01-25 23:47:33 +08:00
|
|
|
|
|
|
|
|
// used in expandableTextbox.jelly to change a input field into a text area
|
|
|
|
|
function expandTextArea(button,id) {
|
|
|
|
|
button.style.display="none";
|
|
|
|
|
var field = document.getElementById(id);
|
|
|
|
|
var value = field.value.replace(/ +/g,'\n');
|
2007-02-15 23:44:20 +08:00
|
|
|
var n = field;
|
|
|
|
|
while(n.tagName!="TABLE")
|
|
|
|
|
n = n.parentNode;
|
|
|
|
|
n.parentNode.innerHTML =
|
2007-01-25 23:47:33 +08:00
|
|
|
"<textarea rows=8 class='setting-input' name='"+field.name+"'>"+value+"</textarea>";
|
|
|
|
|
}
|
2007-02-04 23:22:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
// refresh a part of the HTML specified by the given ID,
|
|
|
|
|
// by using the contents fetched from the given URL.
|
|
|
|
|
function refreshPart(id,url) {
|
2009-01-11 04:08:47 +08:00
|
|
|
var f = function() {
|
2007-02-04 23:22:26 +08:00
|
|
|
new Ajax.Request(url, {
|
2007-02-07 10:13:37 +08:00
|
|
|
method: "post",
|
2007-02-07 10:34:48 +08:00
|
|
|
onSuccess: function(rsp) {
|
2007-02-04 23:22:26 +08:00
|
|
|
var hist = $(id);
|
|
|
|
|
var p = hist.parentNode;
|
|
|
|
|
var next = hist.nextSibling;
|
|
|
|
|
p.removeChild(hist);
|
|
|
|
|
|
|
|
|
|
var div = document.createElement('div');
|
|
|
|
|
div.innerHTML = rsp.responseText;
|
|
|
|
|
|
2007-06-13 12:31:20 +08:00
|
|
|
var node = div.firstChild;
|
|
|
|
|
p.insertBefore(node, next);
|
2007-09-04 03:35:50 +08:00
|
|
|
|
2007-06-13 12:31:20 +08:00
|
|
|
Behaviour.applySubtree(node);
|
2007-09-04 03:35:50 +08:00
|
|
|
|
2009-01-11 04:08:47 +08:00
|
|
|
if(isRunAsTest) return;
|
2007-09-04 03:35:50 +08:00
|
|
|
refreshPart(id,url);
|
2007-02-04 23:22:26 +08:00
|
|
|
}
|
|
|
|
|
});
|
2009-01-11 04:08:47 +08:00
|
|
|
};
|
|
|
|
|
// if run as test, just do it once and do it now to make sure it's working,
|
|
|
|
|
// but don't repeat.
|
|
|
|
|
if(isRunAsTest) f();
|
|
|
|
|
else window.setTimeout(f, 5000);
|
2007-02-14 01:06:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Perform URL encode.
|
|
|
|
|
Taken from http://www.cresc.co.jp/tech/java/URLencoding/JavaScript_URLEncoding.htm
|
|
|
|
|
*/
|
|
|
|
|
function encode(str){
|
|
|
|
|
var s, u;
|
|
|
|
|
var s0 = ""; // encoded str
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < str.length; i++){ // scan the source
|
|
|
|
|
s = str.charAt(i);
|
|
|
|
|
u = str.charCodeAt(i); // get unicode of the char
|
|
|
|
|
|
|
|
|
|
if (s == " "){s0 += "+";} // SP should be converted to "+"
|
|
|
|
|
else {
|
|
|
|
|
if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){ // check for escape
|
|
|
|
|
s0 = s0 + s; // don't escape
|
|
|
|
|
} else { // escape
|
|
|
|
|
if ((u >= 0x0) && (u <= 0x7f)){ // single byte format
|
|
|
|
|
s = "0"+u.toString(16);
|
|
|
|
|
s0 += "%"+ s.substr(s.length-2);
|
|
|
|
|
} else
|
|
|
|
|
if (u > 0x1fffff){ // quaternary byte format (extended)
|
|
|
|
|
s0 += "%" + (0xF0 + ((u & 0x1c0000) >> 18)).toString(16);
|
|
|
|
|
s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
|
|
|
|
|
s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
|
|
|
|
|
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
|
|
|
|
|
} else
|
|
|
|
|
if (u > 0x7ff){ // triple byte format
|
|
|
|
|
s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
|
|
|
|
|
s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
|
|
|
|
|
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
|
|
|
|
|
} else { // double byte format
|
|
|
|
|
s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
|
|
|
|
|
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return s0;
|
2007-03-11 07:51:23 +08:00
|
|
|
}
|
|
|
|
|
|
2007-03-12 02:19:38 +08:00
|
|
|
// when there are multiple form elements of the same name,
|
|
|
|
|
// this method returns the input field of the given name that pairs up
|
|
|
|
|
// with the specified 'base' input element.
|
|
|
|
|
Form.findMatchingInput = function(base, name) {
|
|
|
|
|
// find the FORM element that owns us
|
|
|
|
|
var f = base;
|
|
|
|
|
while (f.tagName != "FORM")
|
|
|
|
|
f = f.parentNode;
|
|
|
|
|
|
|
|
|
|
var bases = Form.getInputs(f, null, base.name);
|
|
|
|
|
var targets = Form.getInputs(f, null, name);
|
|
|
|
|
|
|
|
|
|
for (var i=0; i<bases.length; i++) {
|
|
|
|
|
if (bases[i] == base)
|
|
|
|
|
return targets[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null; // not found
|
|
|
|
|
}
|
|
|
|
|
|
2007-03-20 14:01:11 +08:00
|
|
|
// used witih <dropdownList> and <dropdownListBlock> to control visibility
|
|
|
|
|
function updateDropDownList(sel) {
|
2007-11-30 14:16:35 +08:00
|
|
|
for (var i = 0; i < sel.subForms.length; i++) {
|
2007-03-20 14:01:11 +08:00
|
|
|
var show = sel.selectedIndex == i;
|
2007-11-30 14:16:35 +08:00
|
|
|
var f = sel.subForms[i];
|
2007-03-20 14:01:11 +08:00
|
|
|
var td = f.start;
|
|
|
|
|
while (true) {
|
|
|
|
|
td.style.display = (show ? "" : "none");
|
2008-04-08 14:33:05 +08:00
|
|
|
if(show)
|
2008-04-16 14:13:29 +08:00
|
|
|
td.removeAttribute("field-disabled");
|
2008-04-08 14:33:05 +08:00
|
|
|
else // buildFormData uses this attribute and ignores the contents
|
2008-04-16 14:13:29 +08:00
|
|
|
td.setAttribute("field-disabled","true");
|
2007-03-20 14:01:11 +08:00
|
|
|
if (td == f.end) break;
|
|
|
|
|
td = td.nextSibling;
|
|
|
|
|
}
|
|
|
|
|
}
|
2007-03-26 12:44:40 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// code for supporting repeatable.jelly
|
2007-10-29 00:40:49 +08:00
|
|
|
var repeatableSupport = {
|
2007-03-26 12:44:40 +08:00
|
|
|
// set by the inherited instance to the insertion point DIV
|
|
|
|
|
insertionPoint: null,
|
|
|
|
|
|
|
|
|
|
// HTML text of the repeated chunk
|
|
|
|
|
blockHTML: null,
|
|
|
|
|
|
|
|
|
|
// containing <div>.
|
|
|
|
|
container: null,
|
|
|
|
|
|
2007-09-29 11:58:25 +08:00
|
|
|
// block name for structured HTML
|
|
|
|
|
name : null,
|
|
|
|
|
|
2007-03-26 12:44:40 +08:00
|
|
|
// do the initialization
|
|
|
|
|
init : function(container,master,insertionPoint) {
|
|
|
|
|
this.container = $(container);
|
|
|
|
|
this.container.tag = this;
|
|
|
|
|
master = $(master);
|
|
|
|
|
this.blockHTML = master.innerHTML;
|
|
|
|
|
master.parentNode.removeChild(master);
|
|
|
|
|
this.insertionPoint = $(insertionPoint);
|
2007-09-29 11:58:25 +08:00
|
|
|
this.name = master.getAttribute("name");
|
2007-03-26 12:44:40 +08:00
|
|
|
this.update();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// insert one more block at the insertion position
|
|
|
|
|
expand : function() {
|
|
|
|
|
// importNode isn't supported in IE.
|
|
|
|
|
// nc = document.importNode(node,true);
|
|
|
|
|
var nc = document.createElement("div");
|
|
|
|
|
nc.className = "repeated-chunk";
|
2007-10-26 08:16:40 +08:00
|
|
|
nc.setAttribute("name",this.name);
|
2007-03-26 12:44:40 +08:00
|
|
|
nc.innerHTML = this.blockHTML;
|
|
|
|
|
this.insertionPoint.parentNode.insertBefore(nc, this.insertionPoint);
|
|
|
|
|
|
|
|
|
|
Behaviour.applySubtree(nc);
|
|
|
|
|
this.update();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// update CSS classes associated with repeated items.
|
|
|
|
|
update : function() {
|
|
|
|
|
var children = [];
|
|
|
|
|
for( var n=this.container.firstChild; n!=null; n=n.nextSibling )
|
|
|
|
|
if(Element.hasClassName(n,"repeated-chunk"))
|
|
|
|
|
children.push(n);
|
|
|
|
|
|
2007-03-30 14:25:18 +08:00
|
|
|
if(children.length==0) {
|
|
|
|
|
// noop
|
|
|
|
|
} else
|
2007-03-26 12:44:40 +08:00
|
|
|
if(children.length==1) {
|
|
|
|
|
children[0].className = "repeated-chunk first last only";
|
|
|
|
|
} else {
|
|
|
|
|
children[0].className = "repeated-chunk first";
|
|
|
|
|
for(var i=1; i<children.length-1; i++)
|
|
|
|
|
children[i].className = "repeated-chunk middle";
|
|
|
|
|
children[children.length-1].className = "repeated-chunk last";
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// these are static methods that don't rely on 'this'
|
|
|
|
|
|
|
|
|
|
// called when 'delete' button is clicked
|
|
|
|
|
onDelete : function(n) {
|
|
|
|
|
while (!Element.hasClassName(n,"repeated-chunk"))
|
|
|
|
|
n = n.parentNode;
|
|
|
|
|
|
|
|
|
|
var p = n.parentNode;
|
|
|
|
|
p.removeChild(n);
|
|
|
|
|
p.tag.update();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// called when 'add' button is clicked
|
|
|
|
|
onAdd : function(n) {
|
|
|
|
|
while(n.tag==null)
|
|
|
|
|
n = n.parentNode;
|
|
|
|
|
n.tag.expand();
|
|
|
|
|
}
|
2007-04-06 22:23:09 +08:00
|
|
|
};
|
|
|
|
|
|
2007-06-06 12:15:17 +08:00
|
|
|
// Used by radioBlock.jelly to wire up expandable radio block
|
|
|
|
|
function addRadioBlock(id) {
|
|
|
|
|
// prototype object to be duplicated for each radio button group
|
|
|
|
|
var radioBlockSupport = {
|
|
|
|
|
buttons : null,
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-06-06 12:15:17 +08:00
|
|
|
updateButtons : function() {
|
|
|
|
|
for( var i=0; i<this.buttons.length; i++ )
|
|
|
|
|
this.buttons[i]();
|
|
|
|
|
},
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-06-06 12:15:17 +08:00
|
|
|
// update one block based on the status of the given radio button
|
2007-09-04 11:42:53 +08:00
|
|
|
updateSingleButton : function(radio, blockStart, blockEnd) {
|
2007-06-06 12:15:17 +08:00
|
|
|
var tbl = blockStart.parentNode;
|
|
|
|
|
var i = false;
|
|
|
|
|
var o = false;
|
|
|
|
|
var show = radio.checked;
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-09-04 11:42:53 +08:00
|
|
|
for (var j = 0; tbl.rows[j]; j++) {
|
|
|
|
|
var n = tbl.rows[j];
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-09-04 11:42:53 +08:00
|
|
|
if (n == blockEnd)
|
|
|
|
|
o = true;
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-09-04 11:42:53 +08:00
|
|
|
if (i && !o) {
|
|
|
|
|
if (show)
|
|
|
|
|
n.style.display = "";
|
|
|
|
|
else
|
|
|
|
|
n.style.display = "none";
|
|
|
|
|
}
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-12-05 15:25:22 +08:00
|
|
|
if (n == blockStart) {
|
2007-09-04 11:42:53 +08:00
|
|
|
i = true;
|
2007-12-05 15:25:22 +08:00
|
|
|
if (n.getAttribute('hasHelp') == 'true')
|
|
|
|
|
j++;
|
|
|
|
|
}
|
2007-06-06 12:15:17 +08:00
|
|
|
}
|
2007-06-06 12:13:04 +08:00
|
|
|
}
|
2007-06-06 12:15:17 +08:00
|
|
|
};
|
2007-06-06 12:13:04 +08:00
|
|
|
|
2007-06-06 12:15:17 +08:00
|
|
|
// when one radio button is clicked, we need to update foldable block for
|
|
|
|
|
// other radio buttons with the same name. To do this, group all the
|
|
|
|
|
// radio buttons with the same name together and hang it under the form object
|
2007-06-06 12:13:04 +08:00
|
|
|
var r = document.getElementById('Rb' + id);
|
|
|
|
|
var f = r.form;
|
|
|
|
|
var radios = f.radios;
|
|
|
|
|
if (radios == null)
|
|
|
|
|
f.radios = radios = {};
|
|
|
|
|
|
|
|
|
|
var g = radios[r.name];
|
|
|
|
|
if (g == null) {
|
|
|
|
|
radios[r.name] = g = object(radioBlockSupport);
|
|
|
|
|
g.buttons = [];
|
|
|
|
|
}
|
|
|
|
|
|
2007-09-04 11:42:53 +08:00
|
|
|
var s = document.getElementById("rb_s"+id);
|
|
|
|
|
var e = document.getElementById("rb_e"+id);
|
|
|
|
|
|
2007-06-06 12:13:04 +08:00
|
|
|
var u = function() {
|
2007-09-04 11:42:53 +08:00
|
|
|
g.updateSingleButton(r,s,e);
|
2007-06-06 12:13:04 +08:00
|
|
|
};
|
2007-09-04 11:42:53 +08:00
|
|
|
applyNameRef(s,e,'Rb'+id);
|
2007-06-06 12:13:04 +08:00
|
|
|
g.buttons.push(u);
|
|
|
|
|
|
|
|
|
|
// apply the initial visibility
|
|
|
|
|
u();
|
|
|
|
|
|
|
|
|
|
// install event handlers to update visibility.
|
|
|
|
|
// needs to use onclick and onchange for Safari compatibility
|
|
|
|
|
r.onclick = r.onchange = function() { g.updateButtons(); };
|
|
|
|
|
}
|
|
|
|
|
|
2007-04-06 22:23:09 +08:00
|
|
|
|
2007-10-09 21:45:30 +08:00
|
|
|
function updateBuildHistory(ajaxUrl,nBuild) {
|
2008-09-03 05:34:47 +08:00
|
|
|
if(isRunAsTest) return;
|
2007-04-06 22:23:09 +08:00
|
|
|
$('buildHistory').headers = ["n",nBuild];
|
|
|
|
|
|
|
|
|
|
function updateBuilds() {
|
|
|
|
|
var bh = $('buildHistory');
|
2007-10-09 21:45:30 +08:00
|
|
|
new Ajax.Request(ajaxUrl, {
|
2007-04-06 22:23:09 +08:00
|
|
|
requestHeaders: bh.headers,
|
2007-09-04 00:46:13 +08:00
|
|
|
onSuccess: function(rsp) {
|
2007-04-06 22:23:09 +08:00
|
|
|
var rows = bh.rows;
|
|
|
|
|
|
|
|
|
|
//delete rows with transitive data
|
|
|
|
|
while (rows.length > 2 && Element.hasClassName(rows[1], "transitive"))
|
|
|
|
|
Element.remove(rows[1]);
|
|
|
|
|
|
|
|
|
|
// insert new rows
|
|
|
|
|
var div = document.createElement('div');
|
|
|
|
|
div.innerHTML = rsp.responseText;
|
2007-07-30 01:29:45 +08:00
|
|
|
Behaviour.applySubtree(div);
|
2007-04-06 22:23:09 +08:00
|
|
|
|
|
|
|
|
var pivot = rows[0];
|
|
|
|
|
var newRows = div.firstChild.rows;
|
|
|
|
|
for (var i = newRows.length - 1; i >= 0; i--) {
|
|
|
|
|
pivot.parentNode.insertBefore(newRows[i], pivot.nextSibling);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// next update
|
|
|
|
|
bh.headers = ["n",rsp.getResponseHeader("n")];
|
|
|
|
|
window.setTimeout(updateBuilds, 5000);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
window.setTimeout(updateBuilds, 5000);
|
|
|
|
|
}
|
2007-07-28 13:31:33 +08:00
|
|
|
|
|
|
|
|
// send async request to the given URL (which will send back serialized ListBoxModel object),
|
|
|
|
|
// then use the result to fill the list box.
|
|
|
|
|
function updateListBox(listBox,url) {
|
|
|
|
|
new Ajax.Request(url, {
|
|
|
|
|
method: "post",
|
2007-09-04 00:46:13 +08:00
|
|
|
onSuccess: function(rsp) {
|
2007-07-28 13:31:33 +08:00
|
|
|
var l = $(listBox);
|
|
|
|
|
while(l.length>0) l.options[0] = null;
|
|
|
|
|
|
|
|
|
|
var opts = eval('('+rsp.responseText+')').values;
|
|
|
|
|
for( var i=0; i<opts.length; i++ ) {
|
|
|
|
|
l.options[i] = new Option(opts[i].name,opts[i].value);
|
|
|
|
|
if(opts[i].selected)
|
|
|
|
|
l.selectedIndex = i;
|
|
|
|
|
}
|
2007-10-30 06:21:03 +08:00
|
|
|
},
|
|
|
|
|
onFailure: function(rsp) {
|
|
|
|
|
var l = $(listBox);
|
|
|
|
|
l.options[0] = null;
|
2007-07-28 13:31:33 +08:00
|
|
|
}
|
|
|
|
|
});
|
2007-08-05 09:48:03 +08:00
|
|
|
}
|
|
|
|
|
|
2007-08-05 13:43:17 +08:00
|
|
|
// get the cascaded computed style value. 'a' is the style name like 'backgroundColor'
|
|
|
|
|
function getStyle(e,a){
|
|
|
|
|
if(document.defaultView && document.defaultView.getComputedStyle)
|
|
|
|
|
return document.defaultView.getComputedStyle(e,null).getPropertyValue(a.replace(/([A-Z])/g, "-$1"));
|
|
|
|
|
if(e.currentStyle)
|
2007-08-05 13:44:17 +08:00
|
|
|
return e.currentStyle[a];
|
|
|
|
|
return null;
|
2007-08-05 13:43:17 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// set up logic behind the search box
|
2007-08-05 09:48:03 +08:00
|
|
|
function createSearchBox(searchURL) {
|
|
|
|
|
var ds = new YAHOO.widget.DS_XHR(searchURL+"suggest",["suggestions","name"]);
|
|
|
|
|
ds.queryMatchCase = false;
|
|
|
|
|
var ac = new YAHOO.widget.AutoComplete("search-box","search-box-completion",ds);
|
|
|
|
|
ac.typeAhead = false;
|
2007-08-05 13:43:17 +08:00
|
|
|
|
|
|
|
|
var box = $("search-box");
|
|
|
|
|
var sizer = $("search-box-sizer");
|
|
|
|
|
var comp = $("search-box-completion");
|
|
|
|
|
var minW = $("search-box-minWidth");
|
|
|
|
|
|
|
|
|
|
Behaviour.addLoadEvent(function(){
|
|
|
|
|
// make sure all three components have the same font settings
|
|
|
|
|
function copyFontStyle(s,d) {
|
|
|
|
|
var ds = d.style;
|
|
|
|
|
ds.fontFamily = getStyle(s,"fontFamily");
|
|
|
|
|
ds.fontSize = getStyle(s,"fontSize");
|
|
|
|
|
ds.fontStyle = getStyle(s,"fontStyle");
|
|
|
|
|
ds.fontWeight = getStyle(s,"fontWeight");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
copyFontStyle(box,sizer);
|
|
|
|
|
copyFontStyle(box,minW);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// update positions and sizes of the components relevant to search
|
|
|
|
|
function updatePos() {
|
|
|
|
|
function max(a,b) { if(a>b) return a; else return b; }
|
|
|
|
|
|
|
|
|
|
sizer.innerHTML = box.value;
|
|
|
|
|
var w = max(sizer.offsetWidth,minW.offsetWidth);
|
|
|
|
|
box.style.width =
|
|
|
|
|
comp.style.width =
|
|
|
|
|
comp.firstChild.style.width = (w+60)+"px";
|
|
|
|
|
|
|
|
|
|
var pos = YAHOO.util.Dom.getXY(box);
|
|
|
|
|
pos[1] += YAHOO.util.Dom.get(box).offsetHeight + 2;
|
|
|
|
|
YAHOO.util.Dom.setXY(comp, pos);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updatePos();
|
|
|
|
|
box.onkeyup = updatePos;
|
2007-09-01 22:21:54 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// structured form submission handling
|
|
|
|
|
// see http://hudson.gotdns.com/wiki/display/HUDSON/Structured+Form+Submission
|
|
|
|
|
function buildFormTree(form) {
|
2007-10-29 09:05:58 +08:00
|
|
|
try {
|
|
|
|
|
// I initially tried to use an associative array with DOM elemnets as keys
|
|
|
|
|
// but that doesn't seem to work neither on IE nor Firefox.
|
|
|
|
|
// so I switch back to adding a dynamic property on DOM.
|
|
|
|
|
form.formDom = {}; // root object
|
|
|
|
|
|
|
|
|
|
var doms = []; // DOMs that we added 'formDom' for.
|
|
|
|
|
doms.push(form);
|
|
|
|
|
|
2008-01-18 14:47:26 +08:00
|
|
|
function shortenName(name) {
|
2008-02-28 00:00:13 +08:00
|
|
|
// [abc.def.ghi] -> abc.def.ghi
|
|
|
|
|
if(name.startsWith('['))
|
|
|
|
|
return name.substring(1,name.length-1);
|
|
|
|
|
|
|
|
|
|
// abc.def.ghi -> ghi
|
2007-10-29 09:05:58 +08:00
|
|
|
var idx = name.lastIndexOf('.');
|
|
|
|
|
if(idx>=0) name = name.substring(idx+1);
|
2008-01-18 14:47:26 +08:00
|
|
|
return name;
|
|
|
|
|
}
|
2007-10-29 09:05:58 +08:00
|
|
|
|
2008-01-18 14:47:26 +08:00
|
|
|
function addProperty(parent,name,value) {
|
|
|
|
|
name = shortenName(name);
|
2007-10-29 09:05:58 +08:00
|
|
|
if(parent[name]!=null) {
|
|
|
|
|
if(parent[name].push==null) // is this array?
|
|
|
|
|
parent[name] = [ parent[name] ];
|
|
|
|
|
parent[name].push(value);
|
|
|
|
|
} else {
|
|
|
|
|
parent[name] = value;
|
|
|
|
|
}
|
2007-09-01 22:21:54 +08:00
|
|
|
}
|
|
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
// find the grouping parent node, which will have @name.
|
|
|
|
|
// then return the corresponding object in the map
|
|
|
|
|
function findParent(e) {
|
|
|
|
|
while(e!=form) {
|
|
|
|
|
e = e.parentNode;
|
|
|
|
|
|
|
|
|
|
// this is used to create a group where no single containing parent node exists,
|
|
|
|
|
// like <optionalBlock>
|
|
|
|
|
var nameRef = e.getAttribute("nameRef");
|
|
|
|
|
if(nameRef!=null)
|
|
|
|
|
e = $(nameRef);
|
|
|
|
|
|
2008-04-16 14:13:29 +08:00
|
|
|
if(e.getAttribute("field-disabled")!=null)
|
2008-04-08 14:33:05 +08:00
|
|
|
return {}; // this field shouldn't contribute to the final result
|
|
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
var name = e.getAttribute("name");
|
|
|
|
|
if(name!=null) {
|
2008-04-08 03:40:48 +08:00
|
|
|
if(e.tagName=="INPUT" && !xor(e.checked,Element.hasClassName(e,"negative")))
|
2007-10-29 09:05:58 +08:00
|
|
|
return {}; // field is not active
|
|
|
|
|
|
|
|
|
|
var m = e.formDom;
|
|
|
|
|
if(m==null) {
|
|
|
|
|
// this is a new grouping node
|
|
|
|
|
doms.push(e);
|
|
|
|
|
e.formDom = m = {};
|
|
|
|
|
addProperty(findParent(e), name, m);
|
|
|
|
|
}
|
|
|
|
|
return m;
|
2007-09-01 22:21:54 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
return form.formDom; // guaranteed non-null
|
|
|
|
|
}
|
2007-09-01 22:21:54 +08:00
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
var jsonElement = null;
|
2007-09-28 12:33:44 +08:00
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
for( var i=0; i<form.elements.length; i++ ) {
|
|
|
|
|
var e = form.elements[i];
|
|
|
|
|
if(e.name=="json") {
|
|
|
|
|
jsonElement = e;
|
|
|
|
|
continue;
|
2007-09-04 11:42:53 +08:00
|
|
|
}
|
2007-10-29 09:07:31 +08:00
|
|
|
if(e.tagName=="FIELDSET")
|
2007-10-29 09:05:58 +08:00
|
|
|
continue;
|
2008-01-18 14:47:26 +08:00
|
|
|
if(e.tagName=="SELECT" && e.multiple) {
|
|
|
|
|
var values = [];
|
|
|
|
|
for( var o=0; o<e.options.length; o++ ) {
|
|
|
|
|
var opt = e.options.item(o);
|
|
|
|
|
if(opt.selected)
|
|
|
|
|
values.push(opt.value);
|
|
|
|
|
}
|
|
|
|
|
addProperty(findParent(e),e.name,values);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
var p;
|
|
|
|
|
var type = e.getAttribute("type");
|
|
|
|
|
if(type==null) type="";
|
|
|
|
|
switch(type.toLowerCase()) {
|
|
|
|
|
case "button":
|
|
|
|
|
case "submit":
|
|
|
|
|
break;
|
|
|
|
|
case "checkbox":
|
2007-09-04 11:42:53 +08:00
|
|
|
p = findParent(e);
|
2008-04-08 03:40:48 +08:00
|
|
|
var checked = xor(e.checked,Element.hasClassName(e,"negative"));
|
2007-10-29 09:05:58 +08:00
|
|
|
if(!e.groupingNode)
|
2008-04-07 04:29:25 +08:00
|
|
|
addProperty(p, e.name, checked);
|
2007-10-29 09:05:58 +08:00
|
|
|
else {
|
2008-04-07 04:29:25 +08:00
|
|
|
if(checked)
|
2007-10-29 09:05:58 +08:00
|
|
|
addProperty(p, e.name, e.formDom = {});
|
|
|
|
|
}
|
2007-09-04 11:42:53 +08:00
|
|
|
break;
|
2008-08-11 13:08:33 +08:00
|
|
|
case "file":
|
|
|
|
|
// to support structured form submission with file uploads,
|
|
|
|
|
// rename form field names to unique ones, and leave this name mapping information
|
|
|
|
|
// in JSON. this behavior is backward incompatible, so only do
|
|
|
|
|
// this when
|
|
|
|
|
p = findParent(e);
|
|
|
|
|
if(e.getAttribute("jsonAware")!=null) {
|
|
|
|
|
var on = e.getAttribute("originalName");
|
|
|
|
|
if(on!=null) {
|
|
|
|
|
addProperty(p,on,e.name);
|
|
|
|
|
} else {
|
|
|
|
|
var uniqName = "file"+(iota++);
|
|
|
|
|
addProperty(p,e.name,uniqName);
|
|
|
|
|
e.setAttribute("originalName",e.name);
|
|
|
|
|
e.name = uniqName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// switch to multipart/form-data to support file submission
|
2009-02-07 05:54:48 +08:00
|
|
|
// @enctype is the standard, but IE needs @encoding.
|
|
|
|
|
form.enctype = form.encoding = "multipart/form-data";
|
2008-08-11 13:08:33 +08:00
|
|
|
break;
|
2007-10-29 09:05:58 +08:00
|
|
|
case "radio":
|
|
|
|
|
if(!e.checked) break;
|
|
|
|
|
if(e.groupingNode) {
|
|
|
|
|
p = findParent(e);
|
|
|
|
|
addProperty(p, e.name, e.formDom = { value: e.value });
|
|
|
|
|
break;
|
|
|
|
|
}
|
2007-09-04 11:42:53 +08:00
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
// otherwise fall through
|
|
|
|
|
default:
|
|
|
|
|
p = findParent(e);
|
|
|
|
|
addProperty(p, e.name, e.value);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2007-09-01 22:21:54 +08:00
|
|
|
}
|
|
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
jsonElement.value = Object.toJSON(form.formDom);
|
2007-09-01 22:21:54 +08:00
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
// clean up
|
|
|
|
|
for( i=0; i<doms.length; i++ )
|
|
|
|
|
doms[i].formDom = null;
|
2007-09-01 22:21:54 +08:00
|
|
|
|
2007-10-29 09:05:58 +08:00
|
|
|
|
|
|
|
|
return jsonElement.value;
|
|
|
|
|
} catch(e) {
|
|
|
|
|
alert(e);
|
|
|
|
|
}
|
2007-09-03 23:28:53 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// this used to be in prototype.js but it must have been removed somewhere between 1.4.0 to 1.5.1
|
|
|
|
|
String.prototype.trim = function() {
|
2007-09-04 03:38:52 +08:00
|
|
|
var temp = this;
|
|
|
|
|
var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
|
|
|
|
|
if (obj.test(temp))
|
|
|
|
|
temp = temp.replace(obj, '$2');
|
|
|
|
|
obj = / /g;
|
|
|
|
|
while (temp.match(obj))
|
|
|
|
|
temp = temp.replace(obj, " ");
|
|
|
|
|
return temp;
|
2007-09-03 23:28:53 +08:00
|
|
|
}
|
2007-10-26 14:33:14 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var hoverNotification = (function() {
|
|
|
|
|
var msgBox;
|
|
|
|
|
var body;
|
|
|
|
|
|
|
|
|
|
// animation effect that automatically hide the message box
|
|
|
|
|
var effect = function(overlay, dur) {
|
|
|
|
|
var o = YAHOO.widget.ContainerEffect.FADE(overlay, dur);
|
|
|
|
|
o.animateInCompleteEvent.subscribe(function() {
|
|
|
|
|
window.setTimeout(function() {
|
|
|
|
|
msgBox.hide()
|
|
|
|
|
}, 1500);
|
|
|
|
|
});
|
|
|
|
|
return o;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function init() {
|
|
|
|
|
if(msgBox!=null) return; // already initialized
|
|
|
|
|
|
|
|
|
|
var div = document.createElement("DIV");
|
|
|
|
|
document.body.appendChild(div);
|
|
|
|
|
div.innerHTML = "<div id=hoverNotification><div class=bd></div></div>";
|
|
|
|
|
body = $('hoverNotification');
|
|
|
|
|
|
|
|
|
|
msgBox = new YAHOO.widget.Overlay(body, {
|
|
|
|
|
visible:false,
|
|
|
|
|
width:"10em",
|
|
|
|
|
zIndex:1000,
|
|
|
|
|
effect:{
|
|
|
|
|
effect:effect,
|
|
|
|
|
duration:0.25
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
msgBox.render();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return function(title,anchor) {
|
|
|
|
|
init();
|
|
|
|
|
body.innerHTML = title;
|
|
|
|
|
var xy = YAHOO.util.Dom.getXY(anchor);
|
|
|
|
|
xy[0] += 48;
|
|
|
|
|
xy[1] += anchor.offsetHeight;
|
|
|
|
|
msgBox.cfg.setProperty("xy",xy);
|
|
|
|
|
msgBox.show();
|
|
|
|
|
};
|
|
|
|
|
})();
|
2008-03-24 13:02:31 +08:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
D&D implementation for heterogeneous list.
|
|
|
|
|
*/
|
|
|
|
|
var DragDrop = function(id, sGroup, config) {
|
|
|
|
|
DragDrop.superclass.constructor.apply(this, arguments);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
(function() {
|
|
|
|
|
var Dom = YAHOO.util.Dom;
|
|
|
|
|
var Event = YAHOO.util.Event;
|
|
|
|
|
var DDM = YAHOO.util.DragDropMgr;
|
|
|
|
|
|
|
|
|
|
YAHOO.extend(DragDrop, YAHOO.util.DDProxy, {
|
|
|
|
|
startDrag: function(x, y) {
|
|
|
|
|
var el = this.getEl();
|
|
|
|
|
|
|
|
|
|
this.resetConstraints();
|
|
|
|
|
this.setXConstraint(0,0); // D&D is for Y-axis only
|
|
|
|
|
|
|
|
|
|
// set Y constraint to be within the container
|
|
|
|
|
var totalHeight = el.parentNode.offsetHeight;
|
|
|
|
|
var blockHeight = el.offsetHeight;
|
|
|
|
|
this.setYConstraint(el.offsetTop, totalHeight-blockHeight-el.offsetTop);
|
|
|
|
|
|
|
|
|
|
el.style.visibility = "hidden";
|
|
|
|
|
|
|
|
|
|
this.goingUp = false;
|
|
|
|
|
this.lastY = 0;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
endDrag: function(e) {
|
|
|
|
|
var srcEl = this.getEl();
|
|
|
|
|
var proxy = this.getDragEl();
|
|
|
|
|
|
|
|
|
|
// Show the proxy element and animate it to the src element's location
|
|
|
|
|
Dom.setStyle(proxy, "visibility", "");
|
|
|
|
|
var a = new YAHOO.util.Motion(
|
|
|
|
|
proxy, {
|
|
|
|
|
points: {
|
|
|
|
|
to: Dom.getXY(srcEl)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
0.2,
|
|
|
|
|
YAHOO.util.Easing.easeOut
|
|
|
|
|
)
|
|
|
|
|
var proxyid = proxy.id;
|
|
|
|
|
var thisid = this.id;
|
|
|
|
|
|
|
|
|
|
// Hide the proxy and show the source element when finished with the animation
|
|
|
|
|
a.onComplete.subscribe(function() {
|
|
|
|
|
Dom.setStyle(proxyid, "visibility", "hidden");
|
|
|
|
|
Dom.setStyle(thisid, "visibility", "");
|
|
|
|
|
});
|
|
|
|
|
a.animate();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onDrag: function(e) {
|
|
|
|
|
|
|
|
|
|
// Keep track of the direction of the drag for use during onDragOver
|
|
|
|
|
var y = Event.getPageY(e);
|
|
|
|
|
|
|
|
|
|
if (y < this.lastY) {
|
|
|
|
|
this.goingUp = true;
|
|
|
|
|
} else if (y > this.lastY) {
|
|
|
|
|
this.goingUp = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.lastY = y;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onDragOver: function(e, id) {
|
|
|
|
|
var srcEl = this.getEl();
|
|
|
|
|
var destEl = Dom.get(id);
|
|
|
|
|
|
|
|
|
|
// We are only concerned with list items, we ignore the dragover
|
|
|
|
|
// notifications for the list.
|
|
|
|
|
if (destEl.nodeName == "DIV" && Dom.hasClass(destEl,"repeated-chunk")) {
|
|
|
|
|
var p = destEl.parentNode;
|
|
|
|
|
|
|
|
|
|
// if going up, insert above the target element
|
|
|
|
|
p.insertBefore(srcEl, this.goingUp?destEl:destEl.nextSibling);
|
|
|
|
|
|
|
|
|
|
DDM.refreshCache();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2008-05-30 07:50:36 +08:00
|
|
|
})();
|
|
|
|
|
|
2008-12-13 02:52:43 +08:00
|
|
|
function loadScript(href) {
|
|
|
|
|
var s = document.createElement("script");
|
|
|
|
|
s.setAttribute("src",href);
|
|
|
|
|
document.getElementsByTagName("HEAD")[0].appendChild(s);
|
|
|
|
|
}
|
|
|
|
|
|
2008-05-30 07:50:36 +08:00
|
|
|
var updateCenter = {
|
|
|
|
|
postBackURL : null,
|
2008-12-11 08:26:45 +08:00
|
|
|
info: {},
|
2008-06-16 00:30:25 +08:00
|
|
|
completionHandler: null,
|
2008-12-18 07:57:49 +08:00
|
|
|
url: "https://hudson.dev.java.net/",
|
2008-05-30 07:50:36 +08:00
|
|
|
|
|
|
|
|
checkUpdates : function() {
|
2008-12-18 07:57:49 +08:00
|
|
|
loadScript(updateCenter.url+"update-center.json?"+Hash.toQueryString(updateCenter.info));
|
2008-05-30 07:50:36 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
post : function(data) {
|
|
|
|
|
new Ajax.Request(updateCenter.postBackURL, {
|
|
|
|
|
method:"post",
|
2008-06-16 00:30:25 +08:00
|
|
|
parameters:{json:Object.toJSON(data)},
|
|
|
|
|
onSuccess: function() {
|
|
|
|
|
if(updateCenter.completionHandler!=null)
|
|
|
|
|
updateCenter.completionHandler();
|
|
|
|
|
}
|
2008-05-30 07:50:36 +08:00
|
|
|
});
|
|
|
|
|
}
|
2008-09-03 05:34:47 +08:00
|
|
|
};
|
2008-09-27 06:54:29 +08:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
redirects to a page once the page is ready.
|
|
|
|
|
|
|
|
|
|
@param url
|
|
|
|
|
Specifies the URL to redirect the user.
|
|
|
|
|
*/
|
|
|
|
|
function applySafeRedirector(url) {
|
|
|
|
|
var i=0;
|
|
|
|
|
new PeriodicalExecuter(function() {
|
|
|
|
|
i = (i+1)%4;
|
|
|
|
|
var s = "";
|
|
|
|
|
for( var j=0; j<i; j++ )
|
|
|
|
|
s+='.';
|
|
|
|
|
$('progress').innerHTML = s;
|
|
|
|
|
},1);
|
|
|
|
|
|
|
|
|
|
window.setTimeout(function() {
|
|
|
|
|
var statusChecker = arguments.callee;
|
|
|
|
|
new Ajax.Request(url, {
|
|
|
|
|
method: "get",
|
|
|
|
|
onFailure: function(rsp) {
|
|
|
|
|
if(rsp.status==503) {
|
|
|
|
|
// redirect as long as we are still loading
|
|
|
|
|
window.setTimeout(statusChecker,5000);
|
|
|
|
|
} else {
|
|
|
|
|
window.location.replace(url);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onSuccess: function(rsp) {
|
|
|
|
|
window.location.replace(url);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}, 5000);
|
2008-12-18 07:57:49 +08:00
|
|
|
}
|
Merged revisions 11754-11755,11763-11766,11770,11773-11777,11791-11797,11828-11829,11831-11839,11841-11843,11850,11854,11994,12774,12778-12793,12820-12822,12831-12841,12854-12855,12860-12882,12896-12905,12914-12920,12938-12941,12950,13045-13046,13048,13063-13064,13066,13072-13076,13111,13122-13147,13150,13153-13158,13487-13488,13851-13852,13854-13856,13859,13866-13867,13869,13872-13876,13878-13879,13883-13885,13887-13890,13896-13919 via svnmerge from
https://www.dev.java.net/svn/hudson/branches/multiple-computer-per-node
................
r11754 | kohsuke | 2008-08-25 17:59:14 -0700 (Mon, 25 Aug 2008) | 3 lines
Adding EphemeralNode for non-persisted dynamically-allocated expandable/shrinkable slave pool.
Tweaked the serialization of Hudson.slaves accordingly.
................
r11755 | kohsuke | 2008-08-25 18:10:42 -0700 (Mon, 25 Aug 2008) | 1 line
making a small improvements
................
r11763 | kohsuke | 2008-08-26 13:57:25 -0700 (Tue, 26 Aug 2008) | 1 line
adding more convenience methods
................
r11764 | kohsuke | 2008-08-26 14:24:20 -0700 (Tue, 26 Aug 2008) | 1 line
ported mask capability from the TFS plugin to the core.
................
r11765 | kohsuke | 2008-08-26 14:26:25 -0700 (Tue, 26 Aug 2008) | 1 line
making it non-final to allow for subclassing
................
r11766 | kohsuke | 2008-08-26 14:35:20 -0700 (Tue, 26 Aug 2008) | 1 line
test case for NodeList
................
r11770 | kohsuke | 2008-08-26 15:15:21 -0700 (Tue, 26 Aug 2008) | 3 lines
Wrote a simple tool that monitors a file system change (in a poor way) and triggers a build.
................
r11773 | kohsuke | 2008-08-26 17:20:30 -0700 (Tue, 26 Aug 2008) | 1 line
made more structured
................
r11774 | kohsuke | 2008-08-26 17:47:41 -0700 (Tue, 26 Aug 2008) | 1 line
indentation fix
................
r11775 | kohsuke | 2008-08-26 17:48:22 -0700 (Tue, 26 Aug 2008) | 1 line
remove the use of a deprecated feature.
................
r11776 | kohsuke | 2008-08-26 17:51:54 -0700 (Tue, 26 Aug 2008) | 1 line
renamed to 'ALL' to be consistent with recent use of DescriptorList
................
r11777 | kohsuke | 2008-08-26 18:04:17 -0700 (Tue, 26 Aug 2008) | 1 line
adding NodeFactory list and its configuration mechanism
................
r11791 | kohsuke | 2008-08-27 09:43:38 -0700 (Wed, 27 Aug 2008) | 1 line
picked up the latest jelly with Iterable support in <j:forEach>
................
r11792 | kohsuke | 2008-08-27 09:44:08 -0700 (Wed, 27 Aug 2008) | 1 line
Iterable support added in commons-jelly 1.1-hudson-20080826
................
r11793 | kohsuke | 2008-08-27 10:15:14 -0700 (Wed, 27 Aug 2008) | 2 lines
- added name to NodeFactory for binding NodeFactory to URL tree.
- NodeFactory should be access controlled
................
r11794 | kohsuke | 2008-08-27 10:41:11 -0700 (Wed, 27 Aug 2008) | 1 line
added a method to add one Node at a time
................
r11795 | kohsuke | 2008-08-27 10:41:37 -0700 (Wed, 27 Aug 2008) | 1 line
added permission constatnt
................
r11796 | kohsuke | 2008-08-27 10:42:13 -0700 (Wed, 27 Aug 2008) | 1 line
allowing the launch method to throw an exception.
................
r11797 | kohsuke | 2008-08-27 10:44:13 -0700 (Wed, 27 Aug 2008) | 1 line
improving the handling
................
r11828 | kohsuke | 2008-08-29 11:07:16 -0700 (Fri, 29 Aug 2008) | 1 line
added executor config to the sidebar.
................
r11829 | kohsuke | 2008-08-29 11:16:11 -0700 (Fri, 29 Aug 2008) | 1 line
"it" should be assigned to NodeFactory
................
r11831 | kohsuke | 2008-08-29 11:44:41 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11832 | kohsuke | 2008-08-29 11:59:21 -0700 (Fri, 29 Aug 2008) | 1 line
added a script to create a flashing image from any picture
................
r11833 | kohsuke | 2008-08-29 12:07:56 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11834 | kohsuke | 2008-08-29 13:37:59 -0700 (Fri, 29 Aug 2008) | 1 line
added new images to indicate that a slave is launching
................
r11835 | kohsuke | 2008-08-29 13:43:41 -0700 (Fri, 29 Aug 2008) | 1 line
indicate a launching slave accordingly.
................
r11836 | kohsuke | 2008-08-29 14:02:28 -0700 (Fri, 29 Aug 2008) | 1 line
added a method to remove a Node.
................
r11837 | kohsuke | 2008-08-29 14:02:38 -0700 (Fri, 29 Aug 2008) | 1 line
disconnect
................
r11838 | kohsuke | 2008-08-29 14:03:22 -0700 (Fri, 29 Aug 2008) | 1 line
formatting changes
................
r11839 | kohsuke | 2008-08-29 14:14:04 -0700 (Fri, 29 Aug 2008) | 1 line
allowing subclasses.
................
r11841 | kohsuke | 2008-08-29 14:28:29 -0700 (Fri, 29 Aug 2008) | 1 line
constructor should be the first in the definition.
................
r11842 | kohsuke | 2008-08-29 14:31:01 -0700 (Fri, 29 Aug 2008) | 1 line
doc improvement.
................
r11843 | kohsuke | 2008-08-29 14:32:48 -0700 (Fri, 29 Aug 2008) | 1 line
fixed a problem of using partially constructed object during launch(), because the setNode() method is called from the Computer constructor.
................
r11850 | kohsuke | 2008-08-29 14:50:36 -0700 (Fri, 29 Aug 2008) | 1 line
serialize NodeFactory first so that references to them from NodeList will become references in XML.
................
r11854 | kohsuke | 2008-08-29 14:56:56 -0700 (Fri, 29 Aug 2008) | 1 line
cleaning up a bit.
................
r11994 | kohsuke | 2008-09-03 14:42:11 -0700 (Wed, 03 Sep 2008) | 21 lines
Fixed ArrayIndexOutOfBoundsException during replace(), when the title contains a '$' literal.
The typical stack trace looks like:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 32
at hudson.MarkupText$SubText.start(MarkupText.java:95)
at hudson.MarkupText$SubText.group(MarkupText.java:131)
at hudson.MarkupText$SubText.replace(MarkupText.java:154)
at hudson.MarkupText$SubText.surroundWith(MarkupText.java:83)
at
hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:37)
at
hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:117)
... 148 more
Vijayan Jayaraman and I found this problem while we were looking at the server log of Hudson for OpenJFX.
Adding a unit test to verify this behavior, too.
................
r12774 | kohsuke | 2008-10-27 15:03:36 -0700 (Mon, 27 Oct 2008) | 3 lines
preparing for heterogenousness in Node, so that different Node can be configured with different UIs, much like how different Jobs can be configured.
Creating a slave works also like creating a new job.
................
r12778 | kohsuke | 2008-10-27 15:06:51 -0700 (Mon, 27 Oct 2008) | 1 line
We need to be able to create an emtpy Slave initially, so we have to do with the check in the form field validation.
................
r12779 | kohsuke | 2008-10-27 15:48:04 -0700 (Mon, 27 Oct 2008) | 1 line
making the new slave page a two-step process
................
r12780 | kohsuke | 2008-10-27 15:48:24 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a compilation problem
................
r12781 | kohsuke | 2008-10-27 15:53:30 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12782 | kohsuke | 2008-10-27 15:58:20 -0700 (Mon, 27 Oct 2008) | 1 line
bug fixes
................
r12783 | kohsuke | 2008-10-27 16:08:56 -0700 (Mon, 27 Oct 2008) | 1 line
making the configuration page work for slaves
................
r12784 | kohsuke | 2008-10-27 16:35:17 -0700 (Mon, 27 Oct 2008) | 1 line
added new-computer.svg
................
r12785 | kohsuke | 2008-10-27 16:37:26 -0700 (Mon, 27 Oct 2008) | 1 line
hooking up the config/create pages to the UI
................
r12786 | kohsuke | 2008-10-27 16:44:40 -0700 (Mon, 27 Oct 2008) | 1 line
fixed a copy method.
................
r12787 | kohsuke | 2008-10-27 16:47:33 -0700 (Mon, 27 Oct 2008) | 1 line
code was broken when a slave was renamed
................
r12788 | kohsuke | 2008-10-27 16:58:04 -0700 (Mon, 27 Oct 2008) | 1 line
moving out the commonality into a new tag
................
r12789 | kohsuke | 2008-10-27 17:01:21 -0700 (Mon, 27 Oct 2008) | 1 line
consistent term usage
................
r12790 | kohsuke | 2008-10-27 17:03:19 -0700 (Mon, 27 Oct 2008) | 1 line
retiring the configureExecutors. Slave configuration is now moved to individual slave page
................
r12791 | kohsuke | 2008-10-27 17:10:32 -0700 (Mon, 27 Oct 2008) | 1 line
retired configureExecutors.jelly and completed moved its contents to somewhere else
................
r12792 | kohsuke | 2008-10-27 17:21:53 -0700 (Mon, 27 Oct 2008) | 1 line
bug fix. request handling of "/descriptor/FQCN/..." was broken.
................
r12793 | kohsuke | 2008-10-27 17:27:08 -0700 (Mon, 27 Oct 2008) | 1 line
NodeFactory -> Cloud to encourage consistent term usage between the code and the UI.
................
r12820 | kohsuke | 2008-10-29 10:58:20 -0700 (Wed, 29 Oct 2008) | 1 line
formatting fix
................
r12821 | kohsuke | 2008-10-29 11:17:49 -0700 (Wed, 29 Oct 2008) | 1 line
added classes for handling a secret and prevent accidental exposure of a secret in the persisted form
................
r12822 | kohsuke | 2008-10-29 11:32:39 -0700 (Wed, 29 Oct 2008) | 1 line
added a base64 validator
................
r12831 | kohsuke | 2008-10-29 15:58:45 -0700 (Wed, 29 Oct 2008) | 1 line
secret key needs to be persisted outside config.xml (and it is, already!)
................
r12832 | kohsuke | 2008-10-29 16:06:28 -0700 (Wed, 29 Oct 2008) | 1 line
started working on Amazon EC2 plugin
................
r12833 | kohsuke | 2008-10-29 16:09:20 -0700 (Wed, 29 Oct 2008) | 1 line
brought the same enhancement as in <textbox />
................
r12834 | kohsuke | 2008-10-29 16:15:05 -0700 (Wed, 29 Oct 2008) | 1 line
copy over the onclick handler from the original button element
................
r12835 | kohsuke | 2008-10-29 17:01:04 -0700 (Wed, 29 Oct 2008) | 1 line
allow OK messages to be sent with some mark up.
................
r12836 | kohsuke | 2008-10-29 17:06:52 -0700 (Wed, 29 Oct 2008) | 1 line
added connection testing. This pattern needs to be generalized since it happens often
................
r12837 | kohsuke | 2008-10-29 17:13:11 -0700 (Wed, 29 Oct 2008) | 1 line
this is little better
................
r12838 | kohsuke | 2008-10-29 17:17:44 -0700 (Wed, 29 Oct 2008) | 1 line
added spinner
................
r12839 | kohsuke | 2008-10-29 17:31:54 -0700 (Wed, 29 Oct 2008) | 1 line
restructuring the validation button support in a form that can be readily moved to the core.
................
r12840 | kohsuke | 2008-10-29 18:01:41 -0700 (Wed, 29 Oct 2008) | 1 line
added <f:validateButton/> for multi-field server-side validation
................
r12841 | kohsuke | 2008-10-29 18:03:12 -0700 (Wed, 29 Oct 2008) | 1 line
logic moved to <f:validateButton/> in the core.
................
r12854 | kohsuke | 2008-10-30 13:32:58 -0700 (Thu, 30 Oct 2008) | 1 line
@QueryParameter.value won't be necessary any more
................
r12855 | kohsuke | 2008-10-30 13:42:58 -0700 (Thu, 30 Oct 2008) | 1 line
need a strongly-typed constructor.
................
r12860 | kohsuke | 2008-10-30 15:24:18 -0700 (Thu, 30 Oct 2008) | 1 line
adding more reflection support, which in turn we use in taglibs to raise the level of abstraction.
................
r12861 | kohsuke | 2008-10-30 15:33:22 -0700 (Thu, 30 Oct 2008) | 1 line
added a tag to create databinding to a<select> element from an enum property
................
r12862 | kohsuke | 2008-10-30 15:37:44 -0700 (Thu, 30 Oct 2008) | 1 line
adding a smarter bi-directional binding through <f:repeatable field="..."/>
................
r12863 | kohsuke | 2008-10-30 15:47:48 -0700 (Thu, 30 Oct 2008) | 1 line
making progress with the EC2 support
................
r12864 | kohsuke | 2008-10-30 16:12:34 -0700 (Thu, 30 Oct 2008) | 1 line
added form field validation for AMI ID
................
r12865 | kohsuke | 2008-10-30 16:15:44 -0700 (Thu, 30 Oct 2008) | 1 line
added simpler version
................
r12866 | kohsuke | 2008-10-30 16:17:15 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12867 | kohsuke | 2008-10-30 16:17:19 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12868 | kohsuke | 2008-10-30 16:40:25 -0700 (Thu, 30 Oct 2008) | 1 line
doc improvement
................
r12869 | kohsuke | 2008-10-30 17:00:57 -0700 (Thu, 30 Oct 2008) | 1 line
adding the provisioning of the new slave
................
r12870 | kohsuke | 2008-10-30 17:07:27 -0700 (Thu, 30 Oct 2008) | 1 line
/** {@inheritDoc} */ is the default behavior for javadoc, so there's no point in making that explicit.
................
r12871 | kohsuke | 2008-10-30 17:11:04 -0700 (Thu, 30 Oct 2008) | 1 line
doc bug fix
................
r12872 | kohsuke | 2008-10-30 17:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
simplified a bit
................
r12873 | kohsuke | 2008-10-30 17:19:06 -0700 (Thu, 30 Oct 2008) | 1 line
added RetentionStrategy for EC2 instances
................
r12874 | kohsuke | 2008-10-30 17:21:17 -0700 (Thu, 30 Oct 2008) | 1 line
allowing subclasses to override the disconnect behavior.
................
r12875 | kohsuke | 2008-10-30 18:02:35 -0700 (Thu, 30 Oct 2008) | 1 line
added termination
................
r12876 | kohsuke | 2008-10-30 18:05:30 -0700 (Thu, 30 Oct 2008) | 1 line
forgot to rename when NodeFactory was renamed to Cloud
................
r12877 | kohsuke | 2008-10-30 18:06:08 -0700 (Thu, 30 Oct 2008) | 1 line
using the console icon
................
r12878 | kohsuke | 2008-10-30 18:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
adding UI to remove a slave.
................
r12879 | kohsuke | 2008-10-30 18:48:57 -0700 (Thu, 30 Oct 2008) | 1 line
commons-discovery now needed in stapler
................
r12880 | kohsuke | 2008-10-30 18:50:27 -0700 (Thu, 30 Oct 2008) | 1 line
needs to use a newer version of stapler
................
r12881 | kohsuke | 2008-10-30 18:51:02 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12882 | kohsuke | 2008-10-30 18:51:43 -0700 (Thu, 30 Oct 2008) | 1 line
Bye bye CVS
................
r12896 | kohsuke | 2008-10-31 14:52:07 -0700 (Fri, 31 Oct 2008) | 1 line
fixed the ordering between field and the mighty get(String) method.
................
r12897 | kohsuke | 2008-10-31 15:08:41 -0700 (Fri, 31 Oct 2008) | 1 line
fixed test compilation problems
................
r12898 | kohsuke | 2008-10-31 15:11:25 -0700 (Fri, 31 Oct 2008) | 1 line
marking this as a model object since it's always bound to URL.
................
r12899 | kohsuke | 2008-10-31 15:13:42 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up to manually provision a new node
................
r12900 | kohsuke | 2008-10-31 15:14:00 -0700 (Fri, 31 Oct 2008) | 1 line
after merging the trunk the version number is different
................
r12901 | kohsuke | 2008-10-31 15:21:54 -0700 (Fri, 31 Oct 2008) | 1 line
adding UI hook up for provisioning a new slave
................
r12902 | kohsuke | 2008-10-31 15:45:10 -0700 (Fri, 31 Oct 2008) | 1 line
adding a hook to decorate ComputerLauncher.
................
r12903 | kohsuke | 2008-10-31 15:48:21 -0700 (Fri, 31 Oct 2008) | 1 line
added filtering support
................
r12904 | kohsuke | 2008-10-31 15:52:45 -0700 (Fri, 31 Oct 2008) | 1 line
added view
................
r12905 | kohsuke | 2008-10-31 15:53:49 -0700 (Fri, 31 Oct 2008) | 1 line
doc improvement
................
r12914 | kohsuke | 2008-11-01 17:45:57 -0700 (Sat, 01 Nov 2008) | 1 line
adding code for connecting with SSH
................
r12915 | kohsuke | 2008-11-01 17:49:28 -0700 (Sat, 01 Nov 2008) | 1 line
working on launchers
................
r12916 | kohsuke | 2008-11-01 18:33:12 -0700 (Sat, 01 Nov 2008) | 1 line
added a method to fully read a stream
................
r12917 | kohsuke | 2008-11-01 18:33:45 -0700 (Sat, 01 Nov 2008) | 1 line
bumped up stapler
................
r12918 | kohsuke | 2008-11-01 18:39:41 -0700 (Sat, 01 Nov 2008) | 1 line
doc improvement.
................
r12919 | kohsuke | 2008-11-01 18:45:24 -0700 (Sat, 01 Nov 2008) | 1 line
added a launcher
................
r12920 | kohsuke | 2008-11-01 18:55:02 -0700 (Sat, 01 Nov 2008) | 1 line
implementing the actual ComputerLauncher
................
r12938 | kohsuke | 2008-11-02 08:56:05 -0800 (Sun, 02 Nov 2008) | 1 line
support the field notation
................
r12939 | kohsuke | 2008-11-02 09:20:21 -0800 (Sun, 02 Nov 2008) | 1 line
added the mechanism to execute the init script
................
r12940 | kohsuke | 2008-11-02 09:21:38 -0800 (Sun, 02 Nov 2008) | 1 line
simplification
................
r12941 | kohsuke | 2008-11-02 09:36:21 -0800 (Sun, 02 Nov 2008) | 1 line
adding key handling
................
r12950 | kohsuke | 2008-11-03 11:00:58 -0800 (Mon, 03 Nov 2008) | 1 line
formatting changes
................
r13045 | kohsuke | 2008-11-06 15:24:32 -0800 (Thu, 06 Nov 2008) | 1 line
adding time series datatype for retaining load average statistics in memory
................
r13046 | kohsuke | 2008-11-06 15:59:02 -0800 (Thu, 06 Nov 2008) | 1 line
added a convenience method.
................
r13048 | kohsuke | 2008-11-06 16:21:54 -0800 (Thu, 06 Nov 2008) | 2 lines
- started monitoring # of executor statistics.
- exposed label to the remote API
................
r13063 | kohsuke | 2008-11-07 13:05:15 -0800 (Fri, 07 Nov 2008) | 1 line
added a convenience method.
................
r13064 | kohsuke | 2008-11-07 13:11:08 -0800 (Fri, 07 Nov 2008) | 1 line
monitor the length of the queue too
................
r13066 | kohsuke | 2008-11-07 14:15:56 -0800 (Fri, 07 Nov 2008) | 1 line
moved the stats to its own class.
................
r13072 | kohsuke | 2008-11-07 15:40:29 -0800 (Fri, 07 Nov 2008) | 1 line
adding provisioning logic based on load statistics
................
r13073 | kohsuke | 2008-11-07 15:46:00 -0800 (Fri, 07 Nov 2008) | 1 line
for effective testing, we need sub-sec precision
................
r13074 | kohsuke | 2008-11-07 16:24:44 -0800 (Fri, 07 Nov 2008) | 1 line
fixed a lie.
................
r13075 | kohsuke | 2008-11-07 16:25:12 -0800 (Fri, 07 Nov 2008) | 1 line
bug fix
................
r13076 | kohsuke | 2008-11-07 16:30:55 -0800 (Fri, 07 Nov 2008) | 1 line
avoid using deprecated methods
................
r13111 | kohsuke | 2008-11-09 11:54:23 -0800 (Sun, 09 Nov 2008) | 1 line
added the Future<?> return parameter to Computer.launch(). To do this w/o breaking compatibility, renamed launch to connect.
................
r13122 | kohsuke | 2008-11-10 14:38:03 -0800 (Mon, 10 Nov 2008) | 1 line
allow programmatic update of the assigned label
................
r13123 | kohsuke | 2008-11-10 14:38:40 -0800 (Mon, 10 Nov 2008) | 1 line
Iterator not needed because CopyOnWriteArrayList doesn't support removal via iterator.
................
r13124 | kohsuke | 2008-11-10 14:39:24 -0800 (Mon, 10 Nov 2008) | 1 line
added another Builder for tests
................
r13125 | kohsuke | 2008-11-10 14:39:48 -0800 (Mon, 10 Nov 2008) | 1 line
simplified a bit. This TestEnvironment stuff needs some clearer story.
................
r13126 | kohsuke | 2008-11-10 14:46:40 -0800 (Mon, 10 Nov 2008) | 1 line
IDEA complains about this.
................
r13127 | kohsuke | 2008-11-10 14:51:53 -0800 (Mon, 10 Nov 2008) | 1 line
improved the error diagnostics by displaying why a provisioned node failed to launch
................
r13128 | kohsuke | 2008-11-10 14:52:12 -0800 (Mon, 10 Nov 2008) | 1 line
Started a test case for NodeProvisioner
................
r13129 | kohsuke | 2008-11-10 14:52:27 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13130 | kohsuke | 2008-11-10 15:16:02 -0800 (Mon, 10 Nov 2008) | 1 line
report the failure as a failure.
................
r13131 | kohsuke | 2008-11-10 16:34:23 -0800 (Mon, 10 Nov 2008) | 1 line
adding a parameter to the connect method to support joining to the pending launch activity.
................
r13132 | kohsuke | 2008-11-10 16:38:31 -0800 (Mon, 10 Nov 2008) | 1 line
making members public so that it can be accessed from other classes (DummyCloudImpl was the first to do this)
................
r13133 | kohsuke | 2008-11-10 16:38:58 -0800 (Mon, 10 Nov 2008) | 1 line
split the cloud implementation to a separate class to allow reuse.
................
r13134 | kohsuke | 2008-11-10 16:56:27 -0800 (Mon, 10 Nov 2008) | 1 line
assign unique names to support multiple jobs
................
r13135 | kohsuke | 2008-11-10 17:11:31 -0800 (Mon, 10 Nov 2008) | 1 line
avoid unnecessary interruption
................
r13136 | kohsuke | 2008-11-10 17:11:41 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13137 | kohsuke | 2008-11-10 17:16:28 -0800 (Mon, 10 Nov 2008) | 1 line
cleaned up a test case
................
r13138 | kohsuke | 2008-11-10 17:36:52 -0800 (Mon, 10 Nov 2008) | 1 line
since the setNode method is called on every Computer just by adding a new node, don't force a new launch attempt.
................
r13139 | kohsuke | 2008-11-10 17:37:38 -0800 (Mon, 10 Nov 2008) | 1 line
perform orderly shutdown by giving computers enough time to disconnect.
................
r13140 | kohsuke | 2008-11-10 17:38:08 -0800 (Mon, 10 Nov 2008) | 3 lines
return Future for synchronization.
This breaks binary compatibility, but I checked none of the plugins in Hudson SVN uses this, so I hope this is OK.
................
r13141 | kohsuke | 2008-11-10 17:38:46 -0800 (Mon, 10 Nov 2008) | 1 line
improved diagnostics
................
r13142 | kohsuke | 2008-11-10 17:39:55 -0800 (Mon, 10 Nov 2008) | 1 line
removed compiler warning
................
r13143 | kohsuke | 2008-11-10 18:02:56 -0800 (Mon, 10 Nov 2008) | 1 line
hide the rounding related problem from Cloud by passing int instead of float.
................
r13144 | kohsuke | 2008-11-10 18:10:10 -0800 (Mon, 10 Nov 2008) | 1 line
bug fix
................
r13145 | kohsuke | 2008-11-10 18:11:51 -0800 (Mon, 10 Nov 2008) | 1 line
formatting changes
................
r13146 | kohsuke | 2008-11-10 18:15:08 -0800 (Mon, 10 Nov 2008) | 1 line
moved the slave launch code to HudsonTestCase for reuse
................
r13147 | kohsuke | 2008-11-10 18:20:19 -0800 (Mon, 10 Nov 2008) | 1 line
adding another test case
................
r13150 | kohsuke | 2008-11-11 07:28:53 -0800 (Tue, 11 Nov 2008) | 1 line
bug fix
................
r13153 | kohsuke | 2008-11-11 14:04:21 -0800 (Tue, 11 Nov 2008) | 1 line
cutting down the test size to 5 to increase the test speed
................
r13154 | kohsuke | 2008-11-11 14:04:37 -0800 (Tue, 11 Nov 2008) | 1 line
improved debuggability
................
r13155 | kohsuke | 2008-11-11 14:10:04 -0800 (Tue, 11 Nov 2008) | 1 line
added another convenience method
................
r13156 | kohsuke | 2008-11-11 14:10:21 -0800 (Tue, 11 Nov 2008) | 1 line
further reduce the test turn around time
................
r13157 | kohsuke | 2008-11-11 14:22:03 -0800 (Tue, 11 Nov 2008) | 1 line
doc improvement and clean up
................
r13158 | kohsuke | 2008-11-11 14:22:28 -0800 (Tue, 11 Nov 2008) | 1 line
added a new metho
................
r13487 | kohsuke | 2008-12-09 17:17:30 -0800 (Tue, 09 Dec 2008) | 1 line
SlaveTemplate needs to be able to computer # of executors.
................
r13488 | kohsuke | 2008-12-09 17:18:05 -0800 (Tue, 09 Dec 2008) | 1 line
fixed a compilation problem with the latest head of the branch
................
r13851 | kohsuke | 2008-12-24 13:40:43 -0800 (Wed, 24 Dec 2008) | 82 lines
fixed a dead lock reported by Jesse.
Found one Java-level deadlock:
=============================
"Executor #0 for master":
waiting to lock monitor 0x09409bac (object 0x87474ca0, a hudson.util.CopyOnWriteMap$Hash),
which is held by "main"
"main":
waiting to lock monitor 0x09409b48 (object 0x87474d48, a hudson.model.Hudson$MasterComputer),
which is held by "Executor #0 for master"
Java stack information for the threads listed above:
===================================================
"Executor #0 for master":
at hudson.util.CopyOnWriteMap.remove(CopyOnWriteMap.java:78)
- waiting to lock <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.removeComputer(Hudson.java:717)
at hudson.model.Computer.removeExecutor(Computer.java:433)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Executor.run(Executor.java:65)
- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
"main":
at hudson.model.Computer.setNumExecutors(Computer.java:338)
- waiting to lock <0x87474d48> (a hudson.model.Hudson$MasterComputer)
at hudson.model.Computer.setNode(Computer.java:327)
at hudson.model.Hudson.updateComputer(Hudson.java:704)
at hudson.model.Hudson.updateComputerList(Hudson.java:685)
- locked <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
at hudson.model.Hudson.setNodes(Hudson.java:1076)
at hudson.model.Hudson.addNode(Hudson.java:1060)
- locked <0x87474cb0> (a hudson.model.Hudson)
at org.jvnet.hudson.test.HudsonTestCase.createSlave(HudsonTestCase.java:247)
at hudson.slaves.NodeProvisionerTest.testBaselineSlaveUsage(NodeProvisionerTest.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at org.jvnet.hudson.test.HudsonTestCase.runTest(HudsonTestCase.java:151)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:241)
at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:537)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Found 1 deadlock.
................
r13852 | kohsuke | 2008-12-24 14:32:29 -0800 (Wed, 24 Dec 2008) | 1 line
bug fix in the test case.
................
r13854 | kohsuke | 2008-12-24 15:20:22 -0800 (Wed, 24 Dec 2008) | 2 lines
Using a new version of Rhino to get a proper exception chaining.
................
r13855 | kohsuke | 2008-12-24 15:22:13 -0800 (Wed, 24 Dec 2008) | 1 line
typo
................
r13856 | kohsuke | 2008-12-24 15:37:56 -0800 (Wed, 24 Dec 2008) | 1 line
CR shouldn't be in the repository
................
r13859 | kohsuke | 2008-12-24 15:50:32 -0800 (Wed, 24 Dec 2008) | 3 lines
Fixed svn:eol-style.
................
r13866 | kohsuke | 2008-12-24 21:26:43 -0800 (Wed, 24 Dec 2008) | 3 lines
Copying rev.13860 to retry a merge that now looks suspicious.
................
r13869 | kohsuke | 2008-12-24 22:03:46 -0800 (Wed, 24 Dec 2008) | 2 lines
The 2nd merge was successful, so adopting the successful merge as the multiple-computer-per-node branch.
................
r13872 | kohsuke | 2008-12-25 07:28:37 -0800 (Thu, 25 Dec 2008) | 1 line
fixed a test failure
................
r13873 | kohsuke | 2008-12-25 08:16:49 -0800 (Thu, 25 Dec 2008) | 1 line
expanded NodeProvisioner to work on per-label basis
................
r13874 | kohsuke | 2008-12-25 08:27:32 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13875 | kohsuke | 2008-12-25 08:33:17 -0800 (Thu, 25 Dec 2008) | 1 line
bug fix
................
r13876 | kohsuke | 2008-12-25 08:45:03 -0800 (Thu, 25 Dec 2008) | 3 lines
[HUDSON-2605] Strangely, I discovered that on some File, which is new File("./target/hudson-for-test"), file.exists()==false but file.getAbsoluteFile().exists()==true.
It looks like this happens when $PWD of the process at the OS level is different from System.getProperty("user.dir")
................
r13878 | kohsuke | 2008-12-25 15:52:45 -0800 (Thu, 25 Dec 2008) | 1 line
added a marker file
................
r13879 | kohsuke | 2008-12-25 15:53:13 -0800 (Thu, 25 Dec 2008) | 1 line
use marker file to find the hudson main workspace.
................
r13883 | kohsuke | 2008-12-26 07:50:44 -0800 (Fri, 26 Dec 2008) | 1 line
avoid using a deprecated method.
................
r13884 | kohsuke | 2008-12-26 07:50:59 -0800 (Fri, 26 Dec 2008) | 1 line
adding more probes
................
r13885 | kohsuke | 2008-12-26 08:15:42 -0800 (Fri, 26 Dec 2008) | 1 line
for analyzing test failures, capturing the output is crucial.
................
r13887 | kohsuke | 2008-12-26 11:25:12 -0800 (Fri, 26 Dec 2008) | 1 line
allow sub-types to intercept mutation
................
r13888 | kohsuke | 2008-12-26 11:26:01 -0800 (Fri, 26 Dec 2008) | 1 line
clouds need to be taken into account before marking a label as pointless.
................
r13889 | kohsuke | 2008-12-26 11:26:40 -0800 (Fri, 26 Dec 2008) | 3 lines
fixing bugs in NodeProvisioner.
Conservative estimate on idle executors have to be max, not min.
................
r13890 | kohsuke | 2008-12-26 11:42:53 -0800 (Fri, 26 Dec 2008) | 1 line
turns out the problem was that we were adding multiple slaves under the same name, which confused Hudson to no end.
................
r13896 | kohsuke | 2008-12-27 07:44:20 -0800 (Sat, 27 Dec 2008) | 1 line
formatting changes
................
r13897 | kohsuke | 2008-12-27 07:45:00 -0800 (Sat, 27 Dec 2008) | 1 line
reprot the test name to stdout so that one can easily distinguish different tests in target/surefire-reports/xyz-output.txt
................
r13898 | kohsuke | 2008-12-27 07:54:53 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13899 | kohsuke | 2008-12-27 09:59:07 -0800 (Sat, 27 Dec 2008) | 1 line
split the functionality into two classes
................
r13900 | kohsuke | 2008-12-27 10:00:29 -0800 (Sat, 27 Dec 2008) | 1 line
doc improvement
................
r13901 | kohsuke | 2008-12-27 10:06:24 -0800 (Sat, 27 Dec 2008) | 1 line
added 'tick'
................
r13902 | kohsuke | 2008-12-27 10:08:04 -0800 (Sat, 27 Dec 2008) | 1 line
adding graph rendering of the load statistics
................
r13903 | kohsuke | 2008-12-27 10:19:41 -0800 (Sat, 27 Dec 2008) | 1 line
improved graph layout
................
r13904 | kohsuke | 2008-12-27 10:21:05 -0800 (Sat, 27 Dec 2008) | 1 line
Picker -> TimeScale to better reflect what it is.
................
r13905 | kohsuke | 2008-12-27 10:40:27 -0800 (Sat, 27 Dec 2008) | 1 line
duplicate
................
r13906 | kohsuke | 2008-12-27 14:39:36 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to a shorter name
................
r13907 | kohsuke | 2008-12-27 15:03:25 -0800 (Sat, 27 Dec 2008) | 1 line
added icons
................
r13908 | kohsuke | 2008-12-27 16:20:37 -0800 (Sat, 27 Dec 2008) | 1 line
renamed to make 'loadStatistics' the URL binding.
................
r13909 | kohsuke | 2008-12-27 16:21:01 -0800 (Sat, 27 Dec 2008) | 1 line
exposing loadStatistics for Computer for better URL binding
................
r13910 | kohsuke | 2008-12-27 16:21:16 -0800 (Sat, 27 Dec 2008) | 1 line
adding UI support
................
r13911 | kohsuke | 2008-12-27 19:31:43 -0800 (Sat, 27 Dec 2008) | 1 line
added some basic visualization
................
r13912 | kohsuke | 2008-12-27 19:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
if there's no description, don't even show it.
................
r13913 | kohsuke | 2008-12-27 19:39:26 -0800 (Sat, 27 Dec 2008) | 1 line
added load statistics page for the label as well.
................
r13914 | kohsuke | 2008-12-27 19:48:55 -0800 (Sat, 27 Dec 2008) | 1 line
added one more convenience method.
................
r13915 | kohsuke | 2008-12-27 19:54:29 -0800 (Sat, 27 Dec 2008) | 1 line
refactored so that a different Dataset can be fed.
................
r13916 | kohsuke | 2008-12-27 19:59:20 -0800 (Sat, 27 Dec 2008) | 1 line
added global load statistics lnk to the management screen.
................
r13917 | kohsuke | 2008-12-27 20:31:01 -0800 (Sat, 27 Dec 2008) | 1 line
<dt>s should use the bold font to distinguish them from <dd>s
................
r13918 | kohsuke | 2008-12-27 20:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
r13919 | kohsuke | 2008-12-27 20:35:39 -0800 (Sat, 27 Dec 2008) | 1 line
added description of what the graph means.
................
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14215 71c3de6d-444a-0410-be80-ed276b4c234a
2009-01-07 09:02:56 +08:00
|
|
|
|
|
|
|
|
// logic behind <f:validateButton />
|
|
|
|
|
function validateButton(checkUrl,paramList,button) {
|
|
|
|
|
button = button._button;
|
|
|
|
|
|
|
|
|
|
var parameters = {};
|
|
|
|
|
|
|
|
|
|
paramList.split(',').each(function(name) {
|
|
|
|
|
var p = findPreviousFormItem(button,name);
|
|
|
|
|
if(p!=null)
|
|
|
|
|
parameters[name] = p.value;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var spinner = Element.up(button,"DIV").nextSibling;
|
|
|
|
|
var target = spinner.nextSibling;
|
|
|
|
|
spinner.style.display="block";
|
|
|
|
|
|
|
|
|
|
new Ajax.Request(checkUrl, {
|
|
|
|
|
method: "post",
|
|
|
|
|
parameters: parameters,
|
|
|
|
|
onComplete: function(rsp) {
|
|
|
|
|
spinner.style.display="none";
|
|
|
|
|
target.innerHTML = rsp.responseText;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2009-01-12 02:36:19 +08:00
|
|
|
|
|
|
|
|
// create a combobox.
|
|
|
|
|
// @param id
|
|
|
|
|
// ID of the <input type=text> element that becomes a combobox.
|
|
|
|
|
// @param valueFunction
|
|
|
|
|
// Function that returns all the candidates as an array
|
|
|
|
|
function createComboBox(id,valueFunction) {
|
|
|
|
|
var candidates = valueFunction();
|
|
|
|
|
|
|
|
|
|
Behaviour.addLoadEvent(function() {
|
|
|
|
|
var callback = function(value /*, comboBox*/) {
|
|
|
|
|
var items = new Array();
|
|
|
|
|
if (value.length > 0) { // if no value, we'll not provide anything
|
|
|
|
|
value = value.toLowerCase();
|
|
|
|
|
for (var i = 0; i<candidates.length; i++) {
|
|
|
|
|
if (candidates[i].toLowerCase().indexOf(value) >= 0) {
|
|
|
|
|
items.push(candidates[i]);
|
|
|
|
|
if(items.length>20)
|
|
|
|
|
break; // 20 items in the list should be enough
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return items; // equiv to: comboBox.setItems(items);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
new ComboBox(id,callback);
|
|
|
|
|
});
|
|
|
|
|
}
|