Skip to content

Commit b8cba85

Browse files
committedJan 5, 2017
[FIXED JENKINS-40773] always use root build to discover correct item or item group
1 parent 79c988a commit b8cba85

File tree

3 files changed

+67
-4
lines changed

3 files changed

+67
-4
lines changed
 

‎src/main/java/org/jenkinsci/plugins/configfiles/maven/job/MvnGlobalSettingsProvider.java

+19-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class MvnGlobalSettingsProvider extends GlobalSettingsProvider {
4242

4343
private String settingsConfigId;
4444

45+
private transient boolean failIfSettingsNotFound = false;
46+
4547
/**
4648
* Default constructor used to load class via reflection by the maven-plugin for backward compatibility
4749
*/
@@ -54,6 +56,13 @@ public MvnGlobalSettingsProvider(String settingsConfigId) {
5456
this.settingsConfigId = settingsConfigId;
5557
}
5658

59+
/*
60+
* currently for testing only
61+
*/
62+
public void setFailIfSettingsNotFound(boolean failIfSettingsNotFound) {
63+
this.failIfSettingsNotFound = failIfSettingsNotFound;
64+
}
65+
5766
public String getSettingsConfigId() {
5867
return settingsConfigId;
5968
}
@@ -63,12 +72,16 @@ public void setSettingsConfigId(String settingsConfigId) {
6372
}
6473

6574
@Override
66-
public FilePath supplySettings(AbstractBuild<?, ?> build, TaskListener listener) {
75+
public FilePath supplySettings(AbstractBuild<?, ?> originBuild, TaskListener listener) {
6776
if (StringUtils.isNotBlank(settingsConfigId)) {
6877

78+
AbstractBuild<?, ?> build = originBuild.getRootBuild();
79+
6980
Config c = null;
7081
if (build instanceof Item) {
7182
c = ConfigFiles.getByIdOrNull((Item) build, settingsConfigId);
83+
} else if (build.getParent() instanceof Item) {
84+
c = ConfigFiles.getByIdOrNull((Item) build.getParent(), settingsConfigId);
7285
} else if (build instanceof ItemGroup) {
7386
c = ConfigFiles.getByIdOrNull((ItemGroup) build, settingsConfigId);
7487
} else if (build.getParent() instanceof ItemGroup) {
@@ -77,7 +90,11 @@ public FilePath supplySettings(AbstractBuild<?, ?> build, TaskListener listener)
7790

7891

7992
if (c == null) {
80-
listener.getLogger().println("ERROR: your Apache Maven build is setup to use a config with id " + settingsConfigId + " but can not find the config");
93+
String msg = "your Apache Maven build is setup to use a global config with id " + settingsConfigId + " but can not find the config";
94+
listener.getLogger().println("ERROR: " + msg);
95+
if (failIfSettingsNotFound) {
96+
throw new IllegalStateException(msg);
97+
}
8198
} else {
8299

83100
GlobalMavenSettingsConfig config;

‎src/main/java/org/jenkinsci/plugins/configfiles/maven/job/MvnSettingsProvider.java

+20-2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class MvnSettingsProvider extends SettingsProvider {
4343

4444
private String settingsConfigId;
4545

46+
private transient boolean failIfSettingsNotFound = false;
47+
4648
/**
4749
* Default constructor used to load class via reflection by the maven-plugin for backward compatibility
4850
*/
@@ -55,6 +57,13 @@ public MvnSettingsProvider(String settingsConfigId) {
5557
this.settingsConfigId = settingsConfigId;
5658
}
5759

60+
/*
61+
* currently for testing only
62+
*/
63+
public void setFailIfSettingsNotFound(boolean failIfSettingsNotFound) {
64+
this.failIfSettingsNotFound = failIfSettingsNotFound;
65+
}
66+
5867
public String getSettingsConfigId() {
5968
return settingsConfigId;
6069
}
@@ -64,20 +73,29 @@ public void setSettingsConfigId(String settingsConfigId) {
6473
}
6574

6675
@Override
67-
public FilePath supplySettings(AbstractBuild<?, ?> build, TaskListener listener) {
76+
public FilePath supplySettings(AbstractBuild<?, ?> originBuild, TaskListener listener) {
77+
78+
AbstractBuild<?, ?> build = originBuild.getRootBuild();
79+
6880
if (StringUtils.isNotBlank(settingsConfigId)) {
6981

7082
Config c = null;
7183
if (build instanceof Item) {
7284
c = ConfigFiles.getByIdOrNull((Item) build, settingsConfigId);
85+
} else if (build.getParent() instanceof Item) {
86+
c = ConfigFiles.getByIdOrNull((Item) build.getParent(), settingsConfigId);
7387
} else if (build instanceof ItemGroup) {
7488
c = ConfigFiles.getByIdOrNull((ItemGroup) build, settingsConfigId);
7589
} else if (build.getParent() instanceof ItemGroup) {
7690
c = ConfigFiles.getByIdOrNull((ItemGroup) build.getParent(), settingsConfigId);
7791
}
7892

7993
if (c == null) {
80-
listener.getLogger().println("ERROR: your Apache Maven build is setup to use a config with id " + settingsConfigId + " but can not find the config");
94+
String msg = "your Apache Maven build is setup to use a config with id " + settingsConfigId + " but can not find the config";
95+
listener.getLogger().println("ERROR: " + msg);
96+
if (failIfSettingsNotFound) {
97+
throw new IllegalStateException(msg);
98+
}
8199
} else {
82100

83101
MavenSettingsConfig config;

‎src/test/java/org/jenkinsci/plugins/configfiles/maven/job/MvnSettingsProviderTest.java

+28
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import com.gargoylesoftware.htmlunit.html.HtmlPage;
44
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
55
import hudson.maven.MavenModuleSet;
6+
import hudson.model.Cause;
67
import hudson.model.FreeStyleProject;
78
import hudson.model.Item;
9+
import hudson.model.Result;
810
import hudson.tasks.Maven;
911
import org.jenkinsci.lib.configprovider.ConfigProvider;
1012
import org.jenkinsci.lib.configprovider.model.Config;
@@ -16,15 +18,18 @@
1618
import org.junit.Rule;
1719
import org.junit.Test;
1820
import org.jvnet.hudson.test.Bug;
21+
import org.jvnet.hudson.test.ExtractResourceSCM;
1922
import org.jvnet.hudson.test.JenkinsRule;
2023
import org.jvnet.hudson.test.JenkinsRule.WebClient;
24+
import org.jvnet.hudson.test.ToolInstallations;
2125

2226
import javax.inject.Inject;
2327

2428
import static org.junit.Assert.assertNotSame;
2529

2630
/**
2731
* @author Kohsuke Kawaguchi
32+
* @author Dominik Bartholdi (imod)
2833
*/
2934
public class MvnSettingsProviderTest {
3035
@Rule
@@ -117,4 +122,27 @@ public void configMustBeVisbleFromConfigPage() throws Exception {
117122
Assert.assertEquals("comment NOK", c2.comment, comment.getValueAttribute());
118123
}
119124
}
125+
126+
@Test
127+
@Bug(40737)
128+
public void mavenSettingsMustBeFoundInFreestyleProject() throws Exception {
129+
jenkins.jenkins.getInjector().injectMembers(this);
130+
131+
final FreeStyleProject p = jenkins.createFreeStyleProject();
132+
133+
String mvnName = ToolInstallations.configureMaven3().getName();
134+
Config c1 = createSetting(mavenSettingProvider);
135+
Config c2 = createSetting(globalMavenSettingsConfigProvider);
136+
137+
MvnSettingsProvider s1 = new MvnSettingsProvider(c1.id);
138+
s1.setFailIfSettingsNotFound(true);
139+
MvnGlobalSettingsProvider s2 = new MvnGlobalSettingsProvider(c2.id);
140+
s2.setFailIfSettingsNotFound(true);
141+
142+
Maven m = new Maven("clean", mvnName, null, null, null, false, s1, s2);
143+
p.getBuildersList().add(m);
144+
p.setScm(new ExtractResourceSCM(getClass().getResource("/maven3-project.zip")));
145+
146+
jenkins.assertBuildStatus(Result.SUCCESS, p.scheduleBuild2(0, new Cause.UserCause()).get());
147+
}
120148
}

0 commit comments

Comments
 (0)
Please sign in to comment.