提交 d5e513e6 编写于 作者: J Jesse Glick

Merge branch 'master' of github.com:jenkinsci/jenkins

......@@ -23,9 +23,12 @@
*/
package hudson.cli;
import hudson.model.ModifiableItemGroup;
import hudson.model.TopLevelItem;
import jenkins.model.Jenkins;
import hudson.Extension;
import hudson.model.Item;
import jenkins.model.ModifiableTopLevelItemGroup;
import org.kohsuke.args4j.Argument;
/**
......@@ -47,12 +50,29 @@ public class CreateJobCommand extends CLICommand {
Jenkins h = Jenkins.getInstance();
h.checkPermission(Item.CREATE);
if (h.getItem(name)!=null) {
if (h.getItemByFullName(name)!=null) {
stderr.println("Job '"+name+"' already exists");
return -1;
}
h.createProjectFromXML(name,stdin);
ModifiableTopLevelItemGroup ig = h;
int i = name.lastIndexOf('/');
if (i > 0) {
String group = name.substring(0, i);
Item item = h.getItemByFullName(group);
if (item == null) {
throw new IllegalArgumentException("Unknown ItemGroup " + group);
}
if (item instanceof ModifiableTopLevelItemGroup) {
ig = (ModifiableTopLevelItemGroup) item;
} else {
throw new IllegalArgumentException("Can't create job from CLI in " + group);
}
name = name.substring(i + 1);
}
ig.createProjectFromXML(name, stdin);
return 0;
}
}
......
......@@ -306,7 +306,7 @@ import javax.annotation.CheckForNull;
* @author Kohsuke Kawaguchi
*/
@ExportedBean
public class Jenkins extends AbstractCIBase implements ModifiableItemGroup<TopLevelItem>, StaplerProxy, StaplerFallback, ViewGroup, AccessControlled, DescriptorByNameOwner, ModelObjectWithContextMenu {
public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGroup, StaplerProxy, StaplerFallback, ViewGroup, AccessControlled, DescriptorByNameOwner, ModelObjectWithContextMenu {
private transient final Queue queue;
/**
......@@ -2259,7 +2259,7 @@ public class Jenkins extends AbstractCIBase implements ModifiableItemGroup<TopLe
* null if either such {@link Item} doesn't exist under the given full name,
* or it exists but it's no an instance of the given type.
*/
public <T extends Item> T getItemByFullName(String fullName, Class<T> type) {
public @CheckForNull <T extends Item> T getItemByFullName(String fullName, Class<T> type) {
StringTokenizer tokens = new StringTokenizer(fullName,"/");
ItemGroup parent = this;
......@@ -2284,7 +2284,7 @@ public class Jenkins extends AbstractCIBase implements ModifiableItemGroup<TopLe
}
}
public Item getItemByFullName(String fullName) {
public @CheckForNull Item getItemByFullName(String fullName) {
return getItemByFullName(fullName,Item.class);
}
......@@ -2298,24 +2298,10 @@ public class Jenkins extends AbstractCIBase implements ModifiableItemGroup<TopLe
return User.get(name,hasPermission(ADMINISTER));
}
/**
* Creates a new job.
*
* @throws IllegalArgumentException
* if the project of the given name already exists.
*/
public synchronized TopLevelItem createProject( TopLevelItemDescriptor type, String name ) throws IOException {
return createProject(type, name, true);
}
/**
* Creates a new job.
* @param type Descriptor for job type
* @param name Name for job
* @param notify Whether to fire onCreated method for all ItemListeners
* @throws IllegalArgumentException
* if a project of the give name already exists.
*/
public synchronized TopLevelItem createProject( TopLevelItemDescriptor type, String name, boolean notify ) throws IOException {
return itemGroupMixIn.createProject(type,name,notify);
}
......@@ -2805,24 +2791,13 @@ public class Jenkins extends AbstractCIBase implements ModifiableItemGroup<TopLe
}
/**
* Creates a new job from its configuration XML. The type of the job created will be determined by
* what's in this XML.
* @since 1.319
*/
public TopLevelItem createProjectFromXML(String name, InputStream xml) throws IOException {
return itemGroupMixIn.createProjectFromXML(name, xml);
}
/**
* Copys a job.
*
* @param src
* A {@link TopLevelItem} to be copied.
* @param name
* Name of the newly created project.
* @return
* Newly created {@link TopLevelItem}.
*/
@SuppressWarnings({"unchecked"})
public <T extends TopLevelItem> T copy(T src, String name) throws IOException {
return itemGroupMixIn.copy(src, name);
......
/*
* The MIT License
*
* Copyright (c) 2011, CloudBees, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package jenkins.model;
import hudson.model.ModifiableItemGroup;
import hudson.model.TopLevelItem;
import hudson.model.TopLevelItemDescriptor;
import java.io.IOException;
import java.io.InputStream;
/**
* A {@link hudson.model.ModifiableItemGroup} to manage {@link hudson.model.TopLevelItem},
* including copying, creating from descriptor and from XML.
*
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public interface ModifiableTopLevelItemGroup extends ModifiableItemGroup<TopLevelItem> {
/**
* Copys a job.
*
* @param src
* A {@link TopLevelItem} to be copied.
* @param name
* Name of the newly created project.
* @return
* Newly created {@link TopLevelItem}.
*/
<T extends TopLevelItem> T copy(T src, String name) throws IOException;
/**
* /**
* Creates a new job from its configuration XML. The type of the job created will be determined by
* what's in this XML.
* @param name
* Name of the newly created project.
* @param xml
* Item configuration as xml
* @return
* Newly created {@link TopLevelItem}.
*/
TopLevelItem createProjectFromXML(String name, InputStream xml) throws IOException;
/**
* Creates a new job.
* @param type Descriptor for job type
* @param name Name for job
* @param notify Whether to fire onCreated method for all ItemListeners
* @throws IllegalArgumentException
* if a project of the give name already exists.
*/
TopLevelItem createProject(TopLevelItemDescriptor type, String name, boolean notify) throws IOException;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册