private static BuildIconStatus create()

in rest-api/src/jetbrains/buildServer/server/rest/request/BuildRequest.java [1675:1732]


    private static BuildIconStatus create(final BeanContext beanContext, final Value<BuildPromotion> buildPromotionRetriever) {
      BuildIconStatus[] result = new BuildIconStatus[1];
      try {
        final SecurityContextEx securityContext = beanContext.getSingletonService(SecurityContextEx.class);
        final AuthorityHolder currentUserAuthorityHolder = securityContext.getAuthorityHolder();
        try {
          securityContext.runAsSystem(() -> {
            BuildPromotion buildPromotion = buildPromotionRetriever.get();
            if (!hasPermissionsToViewStatus(buildPromotion, currentUserAuthorityHolder, beanContext)) {
              LOG.info("No permissions to access requested build. Either authenticate as user with appropriate permissions, or ensure 'guest' user has appropriate permissions " +
                       "or enable external status widget for the build configuration.");
              result[0] = PERMISSION;
              return;
            }
            final SBuild build = buildPromotion.getAssociatedBuild();
            //todo: support queued builds
            if (build == null) {
              result[0] = NOT_FOUND;
              return;
            }
            if (!build.isFinished()) {
              result[0] = RUNNING;  //todo: support running/failing and may be running/last failed
              return;
            }
            if (build.getCanceledInfo() != null) {
              result[0] = CANCELED;
              return;
            }
            if (build.getStatusDescriptor().isSuccessful()) {
              result[0] = SUCCESSFUL;
              return;
            }
            if (build.isInternalError()) {
              result[0] = ERROR;
              return;
            }
            result[0] = FAILED;
          });
          return result[0];
        } catch (NotFoundException e) {
          if (TeamCityProperties.getBoolean("rest.buildRequest.statusIcon.enableNotFoundResponsesWithoutPermissions") ||
              hasPermissionsToViewStatusGlobally(securityContext, beanContext)) {
            LOG.debug("Cannot find build for status icon under system, returning 'not_found': " + e.getMessage());
            return NOT_FOUND;
          } else {
            //should return the same error as when no permissions in order not to expose build existence
            LOG.debug("Cannot find build for status icon under system, returning 'permission': " + e.getMessage());
            return PERMISSION;
          }
        } catch (Throwable throwable) {
          LOG.info("Error while retrieving build under system, returning 'internal_error'': " + throwable.toString(), throwable);
          return INTERNAL_ERROR; //todo: use separate icon for errors (most importantly, wrong request)
        }
      } catch (AccessDeniedException e) {
        LOG.warn("Unexpected access denied error encountered while retrieving build, returning 'permission': " + e.toString());
        return PERMISSION;
      }
    }