in rest-api/src/jetbrains/buildServer/server/rest/data/finder/impl/BuildFinder.java [90:167]
public Builds getBuildsForRequest(final SBuildType buildType,
final String status,
final String userLocator,
final boolean includePersonal,
final boolean includeCanceled,
final boolean onlyPinned,
final List<String> tags,
final String agentName,
final String sinceBuildLocator,
final String sinceDate,
final Long start,
final Integer count,
final String locatorText,
final String locatorParameterName,
final UriInfo uriInfo,
final HttpServletRequest request,
@NotNull final Fields fields,
@NotNull final BeanContext beanContext) {
boolean legacyFieldsPresent = status != null ||
userLocator != null ||
includePersonal ||
includeCanceled ||
onlyPinned ||
(tags != null && !tags.isEmpty()) ||
agentName != null ||
sinceBuildLocator != null ||
sinceDate != null ||
start != null ||
count != null; //so far buildType is not included here as it can come from context, not query
String resultingLocatorText;
Locator locator;
if (locatorText != null || !legacyFieldsPresent) {
resultingLocatorText = locatorText;
try {
// legacy: override start and count only if set in URL query parameters and not set in locator
if (resultingLocatorText != null && !(new Locator(resultingLocatorText)).isSingleValue()) {
if (start != null) resultingLocatorText = Locator.setDimensionIfNotPresent(resultingLocatorText, PagerData.START, String.valueOf(start));
if (count != null) resultingLocatorText = Locator.setDimensionIfNotPresent(resultingLocatorText, PagerData.COUNT, String.valueOf(count));
}
} catch (LocatorProcessException e) {
//unparsable locator - proceed to report a due error later with all the supported locators
}
} else {
locator = Locator.createEmptyLocator();
if (buildType != null) locator.setDimension("buildType", BuildTypeFinder.getLocator(buildType));
if (status != null) locator.setDimension("status", status);
if (userLocator != null) locator.setDimension("user", userLocator);
// preserve 5.0 logic for personal/canceled/pinned builds; see also http://youtrack.jetbrains.com/issue/TW-25778
if (includePersonal) locator.setDimension("personal", "any");
if (includeCanceled) locator.setDimension("canceled", "any");
locator.setDimension("running", "false");
if (onlyPinned) locator.setDimension("pinned", "true");
if (tags != null && !tags.isEmpty()) locator.setDimension("tags", StringUtil.join(",", tags)); //behavior changed comparing to 9.0: not supporting tags with comma here
if (agentName != null) locator.setDimension("agentName", agentName);
if (sinceBuildLocator != null) locator.setDimension("sinceBuild", sinceBuildLocator);
if (sinceDate != null) locator.setDimension("sinceDate", sinceDate);
if (start != null) locator.setDimension(PagerData.START, String.valueOf(start));
if (count != null) locator.setDimension(PagerData.COUNT, String.valueOf(count));
resultingLocatorText = locator.getStringRepresentation();
}
if (legacyFieldsPresent && !TeamCityProperties.getBooleanOrTrue(SUPPORT_NON_LOCATOR_FILTERS)) {
throw new BadRequestException("Legacy query syntax supplied. Try URL parameter instead: " + locatorParameterName + "=" + resultingLocatorText + "\n" +
"Set \"" + SUPPORT_NON_LOCATOR_FILTERS + "=true\" server internal property to allow such legacy queries until next TeamCity upgrade.");
}
final PagedSearchResult<BuildPromotion> pagedResult = myBuildPromotionFinder.getBuildPromotionsWithLegacyFallback(buildType, resultingLocatorText);
final PagerData pagerData = new PagerDataImpl(uriInfo.getRequestUriBuilder(), request.getContextPath(), pagedResult,
locatorText == null ? null : resultingLocatorText,
locatorParameterName);
return Builds.createFromPrefilteredBuildPromotions(pagedResult.getEntries(), pagerData, fields, beanContext);
}