提交 273a803e 编写于 作者: K kohsuke

updated SCM and Cloud to support auto discovery

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15675 71c3de6d-444a-0410-be80-ed276b4c234a
上级 2c64b133
......@@ -1041,7 +1041,7 @@ public class Functions {
}
public static DescriptorList<Cloud> getCloudDescriptors() {
return Cloud.ALL;
return Cloud.all();
}
/**
......
......@@ -626,7 +626,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
* Gets the SCM descriptor by name. Primarily used for making them web-visible.
*/
public Descriptor<SCM> getScm(String shortClassName) {
return findDescriptor(shortClassName,SCMS.SCMS);
return findDescriptor(shortClassName,SCM.all());
}
/**
......@@ -2033,7 +2033,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
for( Descriptor<BuildWrapper> d : BuildWrapper.all() )
result &= configureDescriptor(req,json,d);
for( SCMDescriptor scmd : SCMS.SCMS )
for( SCMDescriptor scmd : SCM.all() )
result &= configureDescriptor(req,json,scmd);
for( TriggerDescriptor d : Trigger.all() )
......@@ -2048,7 +2048,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
for( JSONObject o : StructuredForm.toList(json,"plugin"))
pluginManager.getPlugin(o.getString("name")).getPlugin().configure(o);
clouds.rebuildHetero(req,json, Cloud.ALL, "cloud");
clouds.rebuildHetero(req,json, Cloud.all(), "cloud");
nodeProperties.rebuild(req, json.getJSONObject("nodeProperties"), getNodePropertyDescriptors());
......
......@@ -29,6 +29,7 @@ import hudson.FilePath.FileCallable;
import hudson.Launcher;
import hudson.Proc;
import hudson.Util;
import hudson.Extension;
import static hudson.Util.fixEmpty;
import static hudson.Util.fixNull;
import static hudson.Util.fixEmptyAndTrim;
......@@ -920,7 +921,7 @@ public class CVSSCM extends SCM implements Serializable {
}
public DescriptorImpl getDescriptor() {
return DescriptorImpl.DESCRIPTOR;
return (DescriptorImpl)super.getDescriptor();
}
public void buildEnvVars(AbstractBuild build, Map<String, String> env) {
......@@ -1023,9 +1024,8 @@ public class CVSSCM extends SCM implements Serializable {
private static final Pattern STICKY_DATE = Pattern.compile("D\\d\\d\\d\\d\\.\\d\\d\\.\\d\\d\\.\\d\\d\\.\\d\\d\\.\\d\\d");
}
@Extension
public static final class DescriptorImpl extends SCMDescriptor<CVSSCM> implements ModelObject {
static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
/**
* Path to <tt>.cvspass</tt>. Null to default.
*/
......@@ -1050,7 +1050,7 @@ public class CVSSCM extends SCM implements Serializable {
String browseURL;
}
DescriptorImpl() {
public DescriptorImpl() {
super(CVSRepositoryBrowser.class);
load();
}
......
......@@ -25,6 +25,7 @@ package hudson.scm;
import hudson.FilePath;
import hudson.Launcher;
import hudson.Extension;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
......@@ -50,16 +51,11 @@ public class NullSCM extends SCM {
return createEmptyChangeLog(changeLogFile, listener, "log");
}
public SCMDescriptor getDescriptor() {
return DESCRIPTOR;
}
public ChangeLogParser createChangeLogParser() {
return new NullChangeLogParser();
}
static final SCMDescriptor DESCRIPTOR = new DescriptorImpl();
@Extension
public static class DescriptorImpl extends SCMDescriptor<NullSCM> {
public DescriptorImpl() {
super(null);
......
......@@ -26,6 +26,8 @@ package hudson.scm;
import hudson.ExtensionPoint;
import hudson.FilePath;
import hudson.Launcher;
import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.security.PermissionGroup;
import hudson.security.Permission;
import hudson.tasks.Builder;
......@@ -36,6 +38,7 @@ import hudson.model.Describable;
import hudson.model.TaskListener;
import hudson.model.Node;
import hudson.model.WorkspaceCleanupThread;
import hudson.model.Hudson;
import java.io.File;
import java.io.FileWriter;
......@@ -47,7 +50,7 @@ import java.util.Map;
*
* <p>
* To register a custom {@link SCM} implementation from a plugin,
* add it to {@link SCMS#SCMS}.
* put {@link Extension} on your {@link SCMDescriptor}.
*
* <p>
* Use the "project-changes" view to render change list to be displayed
......@@ -323,7 +326,9 @@ public abstract class SCM implements Describable<SCM>, ExtensionPoint {
*/
public abstract ChangeLogParser createChangeLogParser();
public abstract SCMDescriptor<?> getDescriptor();
public SCMDescriptor<?> getDescriptor() {
return (SCMDescriptor)Hudson.getInstance().getDescriptor(getClass());
}
protected final boolean createEmptyChangeLog(File changelogFile, BuildListener listener, String rootTag) {
try {
......@@ -349,4 +354,11 @@ public abstract class SCM implements Describable<SCM>, ExtensionPoint {
* @since 1.171
*/
public static final Permission TAG = new Permission(PERMISSIONS,"Tag",Messages._SCM_TagPermission_Description(),Permission.CREATE);
/**
* Returns all the registered {@link SCMDescriptor}s.
*/
public static DescriptorExtensionList<SCM,SCMDescriptor<?>> all() {
return Hudson.getInstance().getDescriptorList(SCM.class);
}
}
......@@ -24,7 +24,11 @@
package hudson.scm;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.model.Descriptor.FormException;
import hudson.util.DescriptorList;
import hudson.DescriptorExtensionList;
import hudson.Extension;
import java.util.List;
......@@ -40,13 +44,10 @@ import javax.servlet.ServletException;
public class SCMS {
/**
* List of all installed SCMs.
* @deprecated as of 1.286
* Use {@link SCM#all()} for read access and {@link Extension} for registration.
*/
@SuppressWarnings("unchecked") // generic array creation
public static final List<SCMDescriptor<?>> SCMS =
Descriptor.<SCMDescriptor<?>>toList(
NullSCM.DESCRIPTOR,
CVSSCM.DescriptorImpl.DESCRIPTOR,
SubversionSCM.DescriptorImpl.DESCRIPTOR);
public static final List<SCMDescriptor<?>> SCMS = (List)new DescriptorList<SCM>(SCM.class);
/**
* Parses {@link SCM} configuration from the submitted form.
......@@ -56,7 +57,7 @@ public class SCMS {
if(scm==null) return new NullSCM();
int scmidx = Integer.parseInt(scm);
SCMDescriptor<?> d = SCMS.get(scmidx);
SCMDescriptor<?> d = SCM.all().get(scmidx);
d.generation++;
return d.newInstance(req, req.getSubmittedForm().getJSONObject("scm"));
}
......
......@@ -32,6 +32,7 @@ import hudson.Launcher;
import hudson.Util;
import hudson.XmlFile;
import hudson.Functions;
import hudson.Extension;
import static hudson.Util.fixEmptyAndTrim;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
......@@ -598,7 +599,7 @@ public class SubversionSCM extends SCM implements Serializable {
* from the master via remoting.
*/
public static SVNClientManager createSvnClientManager() {
return createSvnClientManager(DescriptorImpl.DESCRIPTOR.createAuthenticationProvider());
return createSvnClientManager(Hudson.getInstance().getDescriptorByType(DescriptorImpl.class).createAuthenticationProvider());
}
public static final class SvnInfo implements Serializable, Comparable<SvnInfo> {
......@@ -1000,7 +1001,7 @@ public class SubversionSCM extends SCM implements Serializable {
public DescriptorImpl getDescriptor() {
return DescriptorImpl.DESCRIPTOR;
return (DescriptorImpl)super.getDescriptor();
}
public FilePath getModuleRoot(FilePath workspace) {
......@@ -1026,9 +1027,8 @@ public class SubversionSCM extends SCM implements Serializable {
return tokens[tokens.length-1]; // return the last token
}
@Extension
public static class DescriptorImpl extends SCMDescriptor<SubversionSCM> {
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
/**
* SVN authentication realm to its associated credentials.
*/
......@@ -1237,7 +1237,7 @@ public class SubversionSCM extends SCM implements Serializable {
private static final long serialVersionUID = 1L;
}
private DescriptorImpl() {
public DescriptorImpl() {
super(SubversionRepositoryBrowser.class);
load();
}
......
......@@ -24,12 +24,15 @@
package hudson.slaves;
import hudson.ExtensionPoint;
import hudson.Extension;
import hudson.DescriptorExtensionList;
import hudson.slaves.NodeProvisioner.PlannedNode;
import hudson.model.Describable;
import hudson.model.Hudson;
import hudson.model.Node;
import hudson.model.AbstractModelObject;
import hudson.model.Label;
import hudson.model.Descriptor;
import hudson.security.ACL;
import hudson.security.AccessControlled;
import hudson.security.Permission;
......@@ -112,11 +115,25 @@ public abstract class Cloud extends AbstractModelObject implements ExtensionPoin
*/
public abstract boolean canProvision(Label label);
public Descriptor<Cloud> getDescriptor() {
return Hudson.getInstance().getDescriptor(getClass());
}
/**
* All registered {@link Cloud} implementations.
*
* @deprecated as of 1.286
* Use {@link #all()} for read access, and {@link Extension} for registration.
*/
public static final DescriptorList<Cloud> ALL = new DescriptorList<Cloud>(Cloud.class);
/**
* Returns all the registered {@link Cloud} descriptors.
*/
public static DescriptorExtensionList<Cloud,Descriptor<Cloud>> all() {
return Hudson.getInstance().getDescriptorList(Cloud.class);
}
/**
* Permission constant to control mutation operations on {@link Cloud}.
*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册