private BranchFilterDetails getBranchFilterDetails()

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;
  }