in rest-api/src/jetbrains/buildServer/server/rest/data/finder/impl/BranchFinder.java [142:205]
private BranchFilterDetails getBranchFilterDetails(@NotNull final Locator locator) {
final List<FilterConditionChecker<BranchData>> filter = new ArrayList<>();
final BranchFilterDetails result = new BranchFilterDetails();
final String singleValue = locator.getSingleValue();
if (singleValue != null) {
if (!ANY.equals(singleValue)) {
// result.branchName = singleValue; do not set as it is ignore case and can match display/vcs branch
filter.add(item -> singleValue.equalsIgnoreCase(item.getDisplayName()) || singleValue.equalsIgnoreCase(item.getName()));
result.filter = MultiCheckerFilter.of(filter).toItemFilter();
return result;
} else {
result.matchesAllBranches = true;
result.filter = MultiCheckerFilter.of(filter).toItemFilter();
return result;
}
}
final String nameDimension = locator.getSingleDimensionValue(NAME);
if (nameDimension != null && !ANY.equals(nameDimension)) {
final ValueCondition parameterCondition = ParameterCondition.createValueCondition(nameDimension);
boolean compatibilityMode;
if (nameDimension.equals(parameterCondition.getValue())) {
//single value
compatibilityMode = true;
if (parameterCondition.getIgnoreCase() == null) parameterCondition.setIgnoreCase(true); //pre-TeamCity-10 behavior
} else {
compatibilityMode = false;
}
String exactValue = parameterCondition.getConstantValueIfSimpleEqualsCondition();
if (exactValue != null) result.branchName = exactValue;
filter.add(item -> {
if (compatibilityMode) {
return parameterCondition.matches(item.getDisplayName()) || parameterCondition.matches(item.getName()); //this basically matched both actual name and "<default>" for default branch
}
return parameterCondition.matches(item.getDisplayName());
});
}
final Boolean defaultDimension = locator.getSingleDimensionValueAsBoolean(DEFAULT);
if (defaultDimension != null) {
if (defaultDimension) {
result.matchesDefaultBranchOrNotBranched = true;
}
filter.add(item -> FilterUtil.isIncludedByBooleanFilter(defaultDimension, item.isDefaultBranch()));
}
final Boolean unspecifiedDimension = locator.getSingleDimensionValueAsBoolean(UNSPECIFIED);
if (unspecifiedDimension != null) {
result.unspecified = true;
filter.add(item -> FilterUtil.isIncludedByBooleanFilter(unspecifiedDimension, Branch.UNSPECIFIED_BRANCH_NAME.equals(item.getName())));
}
final Boolean branchedDimension = locator.getSingleDimensionValueAsBoolean(BRANCHED);
if (branchedDimension != null) {
filter.add(item -> FilterUtil.isIncludedByBooleanFilter(branchedDimension, BranchData.isBranched(item)));
}
result.matchesAllBranches = filter.size() == 0 &&
locator.getUnusedDimensions().isEmpty(); //e.g. "count" or "item" dimension is present
result.filter = MultiCheckerFilter.of(filter).toItemFilter();
return result;
}