Skip to content

Commit 32e0c2f

Browse files
committed
fix issue #27: Multiple from states prevent build successful trigger to
transit issues automatically
1 parent 1525d7b commit 32e0c2f

6 files changed

Lines changed: 33 additions & 11 deletions

File tree

server-core/src/main/java/io/onedev/server/entitymanager/impl/DefaultIssueChangeManager.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,14 @@ private void checkBuild(TransitionSpec transition, Build build) {
155155
&& (branches == null || project.isCommitOnBranches(commitId, branches))) {
156156
IssueQuery query = IssueQuery.parse(project, trigger.getIssueQuery(), true, false, true, false, false);
157157
List<IssueCriteria> criterias = new ArrayList<>();
158+
159+
List<IssueCriteria> fromStateCriterias = new ArrayList<>();
158160
for (String fromState: transition.getFromStates())
159-
criterias.add(new StateCriteria(fromState));
161+
fromStateCriterias.add(new StateCriteria(fromState));
162+
163+
criterias.add(IssueCriteria.or(fromStateCriterias));
160164
criterias.add(query.getCriteria());
161-
query = new IssueQuery(IssueCriteria.of(criterias), new ArrayList<>());
165+
query = new IssueQuery(IssueCriteria.and(criterias), new ArrayList<>());
162166
Build.push(build);
163167
try {
164168
for (Issue issue: issueManager.query(project, query, 0, Integer.MAX_VALUE)) {
@@ -297,10 +301,14 @@ public void run() {
297301
if (trigger.getBranches() == null || PatternSet.parse(trigger.getBranches()).matches(matcher, request.getTargetBranch())) {
298302
IssueQuery query = IssueQuery.parse(project, trigger.getIssueQuery(), true, false, false, true, false);
299303
List<IssueCriteria> criterias = new ArrayList<>();
304+
305+
List<IssueCriteria> fromStateCriterias = new ArrayList<>();
300306
for (String fromState: transition.getFromStates())
301-
criterias.add(new StateCriteria(fromState));
307+
fromStateCriterias.add(new StateCriteria(fromState));
308+
309+
criterias.add(IssueCriteria.or(fromStateCriterias));
302310
criterias.add(query.getCriteria());
303-
query = new IssueQuery(IssueCriteria.of(criterias), new ArrayList<>());
311+
query = new IssueQuery(IssueCriteria.and(criterias), new ArrayList<>());
304312
PullRequest.push(request);
305313
try {
306314
for (Issue issue: issueManager.query(project, query, 0, Integer.MAX_VALUE)) {
@@ -418,10 +426,14 @@ public void run() {
418426
IssueQuery query = IssueQuery.parse(project, trigger.getIssueQuery(),
419427
true, false, false, false, true);
420428
List<IssueCriteria> criterias = new ArrayList<>();
429+
430+
List<IssueCriteria> fromStateCriterias = new ArrayList<>();
421431
for (String fromState: transition.getFromStates())
422-
criterias.add(new StateCriteria(fromState));
432+
fromStateCriterias.add(new StateCriteria(fromState));
433+
434+
criterias.add(IssueCriteria.or(fromStateCriterias));
423435
criterias.add(query.getCriteria());
424-
query = new IssueQuery(IssueCriteria.of(criterias), new ArrayList<>());
436+
query = new IssueQuery(IssueCriteria.and(criterias), new ArrayList<>());
425437
ProjectAwareCommit.push(commit);
426438
try {
427439
for (Issue issue: issueManager.query(project, query, 0, Integer.MAX_VALUE)) {

server-core/src/main/java/io/onedev/server/issue/TransitionSpec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private static List<String> getStateChoices() {
197197

198198
@Override
199199
public String toString() {
200-
return StringUtils.join(getFromStates()) + "-->" + getToState();
200+
return StringUtils.join(getFromStates()) + "->" + getToState();
201201
}
202202

203203
public boolean canTransitManually(Issue issue, @Nullable String toState) {

server-core/src/main/java/io/onedev/server/search/entity/issue/IssueCriteria.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Collection<UndefinedFieldValue> getUndefinedFieldValues() {
5050
}
5151

5252
@Nullable
53-
public static IssueCriteria of(List<IssueCriteria> criterias) {
53+
public static IssueCriteria and(List<IssueCriteria> criterias) {
5454
if (criterias.size() > 1)
5555
return new AndIssueCriteria(criterias);
5656
else if (criterias.size() == 1)
@@ -59,6 +59,16 @@ else if (criterias.size() == 1)
5959
return null;
6060
}
6161

62+
@Nullable
63+
public static IssueCriteria or(List<IssueCriteria> criterias) {
64+
if (criterias.size() > 1)
65+
return new OrIssueCriteria(criterias);
66+
else if (criterias.size() == 1)
67+
return criterias.iterator().next();
68+
else
69+
return null;
70+
}
71+
6272
public boolean onEditFieldValues(String fieldName, ValueSetEdit valueSetEdit) {
6373
return false;
6474
}

server-core/src/main/java/io/onedev/server/search/entity/issue/IssueQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ public static IssueQuery merge(IssueQuery query1, IssueQuery query2) {
506506
List<EntitySort> sorts = new ArrayList<>();
507507
sorts.addAll(query1.getSorts());
508508
sorts.addAll(query2.getSorts());
509-
return new IssueQuery(IssueCriteria.of(criterias), sorts);
509+
return new IssueQuery(IssueCriteria.and(criterias), sorts);
510510
}
511511

512512
}

server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/BacklogColumnPanel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ protected IssueQuery load() {
5050
if (backlogQuery.getCriteria() != null)
5151
criterias.add(backlogQuery.getCriteria());
5252
criterias.add(new MilestoneIsEmptyCriteria());
53-
return new IssueQuery(IssueCriteria.of(criterias), backlogQuery.getSorts());
53+
return new IssueQuery(IssueCriteria.and(criterias), backlogQuery.getSorts());
5454
} else {
5555
return null;
5656
}

server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/BoardColumnPanel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected IssueQuery load() {
9090
} else {
9191
criterias.add(new FieldOperatorCriteria(identifyField, IssueQueryLexer.IsEmpty, false));
9292
}
93-
return new IssueQuery(IssueCriteria.of(criterias), boardQuery.getSorts());
93+
return new IssueQuery(IssueCriteria.and(criterias), boardQuery.getSorts());
9494
} else {
9595
return null;
9696
}

0 commit comments

Comments
 (0)