Skip to content

Commit 0f1eeb3

Browse files
author
Pawel Kozikowski
committed
Add configurable JIRA_ISSUES_SIZE to the JiraEnvironmentVariableBuilder
1 parent 486879b commit 0f1eeb3

File tree

6 files changed

+68
-21
lines changed

6 files changed

+68
-21
lines changed

src/main/java/hudson/plugins/jira/JiraEnvironmentContributingAction.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,41 @@ public class JiraEnvironmentContributingAction extends InvisibleAction implement
1515
public static final String JIRA_URL_VARIABLE_NAME = "JIRA_URL";
1616

1717
private final String issuesList;
18-
18+
19+
private final Integer issuesSize;
20+
1921
private final String jiraUrl;
20-
22+
23+
private final String issuesSizeVariableName;
24+
2125
public String getIssuesList(){
2226
return issuesList;
2327
}
24-
28+
29+
public Integer getNumberOfIssues(){
30+
return issuesSize;
31+
}
32+
2533
public String getJiraUrl() {
2634
return jiraUrl;
2735
}
36+
37+
public String getIssuesSizeVariableName() {
38+
return issuesSizeVariableName;
39+
}
2840

29-
public JiraEnvironmentContributingAction(String issuesList, String jiraUrl) {
41+
public JiraEnvironmentContributingAction(String issuesList, int issuesSize, String jiraUrl, String issuesSizeVariableName) {
3042
this.issuesList = issuesList;
43+
this.issuesSize = issuesSize;
3144
this.jiraUrl = jiraUrl;
45+
this.issuesSizeVariableName = issuesSizeVariableName;
3246
}
3347

3448
@Override
3549
public void buildEnvVars(AbstractBuild<?, ?> ab, EnvVars ev) {
3650
if (ev != null){
3751
ev.put(ISSUES_VARIABLE_NAME, issuesList);
52+
ev.put(getIssuesSizeVariableName(), getNumberOfIssues().toString());
3853
ev.put(JIRA_URL_VARIABLE_NAME, getJiraUrl());
3954
}
4055
}

src/main/java/hudson/plugins/jira/JiraEnvironmentVariableBuilder.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import hudson.tasks.BuildStepDescriptor;
1212
import hudson.tasks.Builder;
1313
import java.io.IOException;
14+
15+
import jenkins.model.Jenkins;
1416
import org.kohsuke.stapler.DataBoundConstructor;
1517
import java.util.Set;
1618
import org.apache.commons.lang.StringUtils;
@@ -21,18 +23,24 @@
2123
public class JiraEnvironmentVariableBuilder extends Builder {
2224

2325
private AbstractIssueSelector issueSelector;
26+
private String issuesSizeVariableName;
2427

2528
@DataBoundConstructor
26-
public JiraEnvironmentVariableBuilder(AbstractIssueSelector issueSelector) {
29+
public JiraEnvironmentVariableBuilder(AbstractIssueSelector issueSelector, String issuesSizeVariableName) {
2730
this.issueSelector = issueSelector;
31+
this.issuesSizeVariableName = issuesSizeVariableName;
2832
}
2933

3034
public AbstractIssueSelector getIssueSelector() {
3135
AbstractIssueSelector uis = this.issueSelector;
3236
if (uis == null) uis = new DefaultIssueSelector();
3337
return (this.issueSelector = uis);
3438
}
35-
39+
40+
String getIssuesSizeVariableName() {
41+
return issuesSizeVariableName;
42+
}
43+
3644
JiraSite getSiteForProject(AbstractProject<?, ?> project) {
3745
return JiraSite.get(project);
3846
}
@@ -49,10 +57,12 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListen
4957
Set<String> ids = getIssueSelector().findIssueIds(build, site, listener);
5058

5159
String idList = StringUtils.join(ids, ",");
60+
Integer idListSize = ids != null ? ids.size() : null;
5261

5362
listener.getLogger().println(Messages.JiraEnvironmentVariableBuilder_Updating(JiraEnvironmentContributingAction.ISSUES_VARIABLE_NAME, idList));
63+
listener.getLogger().println(Messages.JiraEnvironmentVariableBuilder_Updating(getIssuesSizeVariableName(), idListSize));
5464

55-
build.addAction(new JiraEnvironmentContributingAction(idList, site.getName()));
65+
build.addAction(new JiraEnvironmentContributingAction(idList, idListSize, site.getName(), getIssuesSizeVariableName()));
5666

5767
return true;
5868
}
@@ -72,5 +82,9 @@ public boolean isApplicable(Class<? extends AbstractProject> klass) {
7282
public String getDisplayName() {
7383
return Messages.JiraEnvironmentVariableBuilder_DisplayName();
7484
}
85+
86+
public boolean hasIssueSelectors() {
87+
return Jenkins.getActiveInstance().getDescriptorList(AbstractIssueSelector.class).size() > 1;
88+
}
7589
}
7690
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
22
<j:if test="${descriptor.hasIssueSelectors()}">
33
<f:dropdownDescriptorSelector field="issueSelector" title="${%Issue selector}"/>
4-
</j:if>
4+
</j:if>
5+
<f:advanced>
6+
<f:entry title="${%Issues size variable name}" field="issuesSizeVariableName">
7+
<f:textbox default="JIRA_ISSUES_SIZE"/>
8+
</f:entry>
9+
</f:advanced>
510
</j:jelly>

src/main/resources/hudson/plugins/jira/JiraEnvironmentVariableBuilder/help.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<div>Available variables:</div>
44
<ul>
55
<li>JIRA_ISSUES - A comma separated list of issues which are referenced in the version control system changelog</li>
6+
<li>JIRA_ISSUES_SIZE - Size of the list described above</li>
67
<li>JIRA_URL - Primary URL for the JIRA server </li>
78
</ul>
89
<p>

src/test/java/hudson/plugins/jira/JiraEnvironmentContributingActionTest.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
public class JiraEnvironmentContributingActionTest {
1414
private static final String JIRA_URL = "http://example.com";
1515
private static final String JIRA_URL_PROPERTY_NAME = "JIRA_URL";
16-
private static final String ISSUES_PROPERTY_NAME = "JIRA_ISSUES";
17-
private static final String ISSUES_LIST = "ISS-1,ISS-2";
18-
16+
private static final String ISSUES_PROPERTY_NAME = "JIRA_ISSUES";
17+
private static final String ISSUES_SIZE_PROPERTY_NAME = "JIRA_ISSUES_SIZE";
18+
private static final String ISSUES_LIST = "ISS-1,ISS-2";
19+
private static final Integer ISSUES_SIZE = 2;
20+
1921
@Test
2022
public void buildEnvVarsEnvIsNull() {
21-
JiraEnvironmentContributingAction action = new JiraEnvironmentContributingAction(ISSUES_LIST, JIRA_URL);
23+
JiraEnvironmentContributingAction action = new JiraEnvironmentContributingAction(ISSUES_LIST, ISSUES_SIZE, JIRA_URL, ISSUES_SIZE_PROPERTY_NAME);
2224
AbstractBuild build = mock(AbstractBuild.class);
2325

2426
action.buildEnvVars(build, null);
@@ -27,20 +29,23 @@ public void buildEnvVarsEnvIsNull() {
2729

2830
@Test
2931
public void buildEnvVarsAddVariables() {
30-
JiraEnvironmentContributingAction action = new JiraEnvironmentContributingAction(ISSUES_LIST, JIRA_URL);
32+
JiraEnvironmentContributingAction action = new JiraEnvironmentContributingAction(ISSUES_LIST, ISSUES_SIZE, JIRA_URL, ISSUES_SIZE_PROPERTY_NAME);
3133
AbstractBuild build = mock(AbstractBuild.class);
3234
EnvVars envVars = mock(EnvVars.class);
3335

3436
action.buildEnvVars(build, envVars);
3537

3638
ArgumentCaptor<String> keys = ArgumentCaptor.forClass(String.class);
3739
ArgumentCaptor<String> values = ArgumentCaptor.forClass(String.class);
38-
verify(envVars, times(2)).put(keys.capture(), values.capture());
40+
verify(envVars, times(3)).put(keys.capture(), values.capture());
3941

4042
assertThat(keys.getAllValues().get(0), is(ISSUES_PROPERTY_NAME));
4143
assertThat(values.getAllValues().get(0), is(ISSUES_LIST));
4244

43-
assertThat(keys.getAllValues().get(1), is(JIRA_URL_PROPERTY_NAME));
44-
assertThat(values.getAllValues().get(1), is(JIRA_URL));
45+
assertThat(keys.getAllValues().get(1), is(ISSUES_SIZE_PROPERTY_NAME));
46+
assertThat(values.getAllValues().get(1), is(ISSUES_SIZE.toString()));
47+
48+
assertThat(keys.getAllValues().get(2), is(JIRA_URL_PROPERTY_NAME));
49+
assertThat(values.getAllValues().get(2), is(JIRA_URL));
4550
}
4651
}

src/test/java/hudson/plugins/jira/JiraEnvironmentVariableBuilderTest.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public class JiraEnvironmentVariableBuilderTest {
3535

3636
private static final String JIRA_URL = "http://example.com";
3737
private static final String JIRA_URL_PROPERTY_NAME = "JIRA_URL";
38-
private static final String ISSUES_PROPERTY_NAME = "JIRA_ISSUES";
38+
private static final String ISSUES_PROPERTY_NAME = "JIRA_ISSUES";
39+
private static final String ISSUES_SIZE_PROPERTY_NAME = "JIRA_ISSUES_SIZE";
3940
private static final String ISSUE_ID_1 = "ISS-1";
4041
private static final String ISSUE_ID_2 = "ISS-2";
4142

@@ -79,26 +80,32 @@ public void createMocks() throws IOException, InterruptedException {
7980

8081
@Test
8182
public void testIssueSelectorDefaultsToDefault() {
82-
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(null);
83+
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(null, null);
8384
assertThat(builder.getIssueSelector(), instanceOf(DefaultIssueSelector.class));
8485
}
8586

8687
@Test
8788
public void testSetIssueSelectorPersists() {
88-
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(issueSelector);
89+
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(issueSelector, null);
8990
assertThat(builder.getIssueSelector(), is(issueSelector));
9091
}
92+
93+
@Test
94+
public void testSetIssuesSizeVariableNamePersists() {
95+
final JiraEnvironmentVariableBuilder builder = new JiraEnvironmentVariableBuilder(issueSelector, ISSUES_SIZE_PROPERTY_NAME);
96+
assertThat(builder.getIssuesSizeVariableName(), is(ISSUES_SIZE_PROPERTY_NAME));
97+
}
9198

9299
@Test(expected = AbortException.class)
93100
public void testPerformWithNoSiteFailsBuild() throws InterruptedException, IOException {
94-
JiraEnvironmentVariableBuilder builder = spy(new JiraEnvironmentVariableBuilder(issueSelector));
101+
JiraEnvironmentVariableBuilder builder = spy(new JiraEnvironmentVariableBuilder(issueSelector, null));
95102
doReturn(null).when(builder).getSiteForProject((AbstractProject<?, ?>) Mockito.any());
96103
builder.perform(build, launcher, listener);
97104
}
98105

99106
@Test
100107
public void testPerformAddsAction() throws InterruptedException, IOException {
101-
JiraEnvironmentVariableBuilder builder = spy(new JiraEnvironmentVariableBuilder(issueSelector));
108+
JiraEnvironmentVariableBuilder builder = spy(new JiraEnvironmentVariableBuilder(issueSelector, null));
102109
doReturn(site).when(builder).getSiteForProject((AbstractProject<?, ?>) Mockito.any());
103110

104111
boolean result = builder.perform(build, launcher, listener);

0 commit comments

Comments
 (0)