Skip to content

Commit da29376

Browse files
authored
improved error message when trying to change the type of a view (#888)
1 parent 35a61fe commit da29376

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

docs/Home.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins
4040
see [Job DSL Commands](Job-DSL-Commands#seed-job)
4141
* Fixed issues with embedded API Viewer
4242
([#886](https://github.com/jenkinsci/job-dsl-plugin/pull/886))
43+
* Improved error message when trying to change the type of a view
44+
([#888](https://github.com/jenkinsci/job-dsl-plugin/pull/888))
4345
* Removed anything that has been deprecated in 1.42, see [Migration](Migration#migrating-to-142)
4446
* 1.48 (June 24 2016)
4547
* Added option to ignore missing DSL script files or empty wildcards

job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/JenkinsJobManagement.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ public void createOrUpdateView(String path, String config, boolean ignoreExistin
169169
LOGGER.log(Level.WARNING, format("Could not create view within %s", parent.getClass()));
170170
}
171171
} else if (!ignoreExisting) {
172+
checkItemType(view, inputStream);
173+
inputStream.reset();
172174
view.updateByXml(new StreamSource(inputStream));
173175
}
174176
} else if (parent == null) {
@@ -522,6 +524,27 @@ private void checkItemType(AbstractItem item, javaposse.jobdsl.dsl.Item dslItem)
522524
}
523525
}
524526

527+
private void checkItemType(View view, InputStream config) {
528+
Node newConfig;
529+
530+
try {
531+
newConfig = new XmlParser().parse(config);
532+
} catch (Exception e) {
533+
throw new DslException(format(
534+
Messages.UpdateExistingView_CouldNotParseConfig(),
535+
view.getViewName()
536+
), e);
537+
}
538+
539+
Class viewType = Jenkins.XSTREAM2.getMapper().realClass(newConfig.name().toString());
540+
if (!viewType.equals(view.getClass())) {
541+
throw new DslException(format(
542+
Messages.UpdateExistingView_ViewTypeDoesNotMatch(),
543+
view.getViewName()
544+
));
545+
}
546+
}
547+
525548
private boolean createNewItem(String path, javaposse.jobdsl.dsl.Item dslItem) {
526549
String config = dslItem.getXml();
527550
LOGGER.log(Level.FINE, format("Creating item as %s", config));

job-dsl-plugin/src/main/resources/javaposse/jobdsl/plugin/Messages.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,7 @@ UpdateExistingItem.CouldNotReadConfig=\
2828
Could not read configuration file %s for job %s
2929
UpdateExistingItem.ItemTypeDoesNotMatch=\
3030
Type of item "%s" does not match existing type, item type can not be changed
31+
UpdateExistingView.CouldNotParseConfig=\
32+
Could not parse generated configuration for view "%s"
33+
UpdateExistingView.ViewTypeDoesNotMatch=\
34+
Type of view "%s" does not match existing type, view type can not be changed

job-dsl-plugin/src/test/groovy/javaposse/jobdsl/plugin/JenkinsJobManagementSpec.groovy

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.google.common.io.Resources
55
import hudson.FilePath
66
import hudson.LocalPluginManager
77
import hudson.model.AbstractBuild
8+
import hudson.model.AllView
89
import hudson.model.Cause
910
import hudson.model.Failure
1011
import hudson.model.FreeStyleBuild
@@ -518,6 +519,22 @@ class JenkinsJobManagementSpec extends Specification {
518519
e.message == 'Type of item "my-job" does not match existing type, item type can not be changed'
519520
}
520521
522+
def 'createOrUpdateView should fail if view type does not match'() {
523+
setup:
524+
jenkinsRule.jenkins.addView(new AllView('foo'))
525+
526+
when:
527+
jobManagement.createOrUpdateView(
528+
'foo',
529+
JenkinsJobManagementSpec.getResourceAsStream('/javaposse/jobdsl/dsl/views/ListView-template.xml').text,
530+
false
531+
)
532+
533+
then:
534+
Exception e = thrown(DslException)
535+
e.message == 'Type of view "foo" does not match existing type, view type can not be changed'
536+
}
537+
521538
def isMinimumPluginVersionInstalled() {
522539
when:
523540
boolean result = jobManagement.isMinimumPluginVersionInstalled('cvs', '0.1')

0 commit comments

Comments
 (0)