From 45c4732792b17122e83b6ef0a0cc175aa62cfd56 Mon Sep 17 00:00:00 2001 From: Rasmus Jelsgaard Date: Thu, 7 Feb 2019 23:11:53 +0100 Subject: [PATCH] Fixed: Configuration not saved, configuration scratched (#19) * Fixed: Configuration not saved, configuration scratched - Fixes a bug where configuration do not get saved when the user hits Save in the Global Tool Config page. - Fixes a bug where tool configuration is scratched on restart of Jenkins, i.e. would be set to the default value on restart. * .gitignore improvemements - Added .iml extension to ignores. --- .gitignore | 1 + .../vstest_runner/VsTestInstallation.java | 49 ++++++++++--------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 7838a88..76c03fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.class +*.iml # Package Files # *.jar diff --git a/src/main/java/org/jenkinsci/plugins/vstest_runner/VsTestInstallation.java b/src/main/java/org/jenkinsci/plugins/vstest_runner/VsTestInstallation.java index bcc2283..6b6cd94 100644 --- a/src/main/java/org/jenkinsci/plugins/vstest_runner/VsTestInstallation.java +++ b/src/main/java/org/jenkinsci/plugins/vstest_runner/VsTestInstallation.java @@ -1,22 +1,24 @@ package org.jenkinsci.plugins.vstest_runner; -import java.io.File; -import java.io.IOException; - import edu.umd.cs.findbugs.annotations.Nullable; import hudson.EnvVars; import hudson.Extension; import hudson.init.InitMilestone; import hudson.init.Initializer; +import hudson.model.EnvironmentSpecific; +import hudson.model.Node; +import hudson.model.TaskListener; +import hudson.slaves.NodeSpecific; import hudson.tools.ToolDescriptor; import hudson.tools.ToolInstallation; +import jenkins.model.Jenkins; +import net.sf.json.JSONObject; import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.StaplerRequest; -import hudson.model.TaskListener; -import hudson.model.Node; -import hudson.slaves.NodeSpecific; -import hudson.model.EnvironmentSpecific; -import jenkins.model.Jenkins; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Array; /** * @author Yasuyuki Saito @@ -90,31 +92,17 @@ public static VsTestInstallation getDefaultInstallation() { @Initializer(after = InitMilestone.EXTENSIONS_AUGMENTED) public static void onLoaded() { - DescriptorImpl descriptor = (DescriptorImpl) Jenkins.getInstance().getDescriptor(VsTestInstallation.class); - VsTestInstallation[] installations = getInstallations(descriptor); - + DescriptorImpl descriptor = (VsTestInstallation.DescriptorImpl) Jenkins.getInstance().getDescriptor(VsTestInstallation.class); + VsTestInstallation[] installations = descriptor.getInstallations(); if (installations != null && installations.length > 0) { - // No need to initialize if there's already something return; } - - String defaultVSTestExe = isWindows() ? "vstest.console.exe" : "vstest.console"; VsTestInstallation tool = new VsTestInstallation(DEFAULT, defaultVSTestExe); descriptor.setInstallations(tool); descriptor.save(); } - private static VsTestInstallation[] getInstallations(DescriptorImpl descriptor) { - VsTestInstallation[] installations = null; - try { - installations = descriptor.getInstallations(); - } catch (NullPointerException e) { - installations = new VsTestInstallation[0]; - } - return installations; - } - @Override public DescriptorImpl getDescriptor() { return (DescriptorImpl) Jenkins.getInstance().getDescriptorOrDie(getClass()); @@ -130,10 +118,23 @@ private static boolean isWindows() { @Extension public static class DescriptorImpl extends ToolDescriptor { + public DescriptorImpl() { + super(); + load(); + } + public String getDisplayName() { return Messages.VsTestInstallation_DisplayName(); } + @Override + public boolean configure(StaplerRequest req, JSONObject json) { + setInstallations(req.bindJSONToList(VsTestInstallation.class, json.get("tool")) + .toArray((VsTestInstallation[]) Array.newInstance(VsTestInstallation.class, 0))); + save(); + return true; + } + @Nullable public VsTestInstallation getInstallation(String name) { for (VsTestInstallation i : getInstallations()) {