@Override
    public void run(@NotNull ProgressIndicator indicator) {
      LOG.debug("Refresh task started");
      indicator.setIndeterminate(true);
      DataPack dataPack = myCurrentDataPack;
      DataPack smallDataPack;
      while (true) {
        List<RefreshRequest> requests = mySingleTaskController.popRequests();
        boolean optimize = ContainerUtil.exists(requests, request -> request.myOptimize);
        Collection<VirtualFile> rootsToRefresh = getRootsToRefresh(requests);
        LOG.debug("Requests: " + requests + ". roots to refresh: " + rootsToRefresh);
        if (rootsToRefresh.isEmpty()) {
          mySingleTaskController.taskCompleted(dataPack);
          break;
        }

        try {
          Collection<VcsLogProvider> providers = ContainerUtil.filter(myProviders, rootsToRefresh::contains).values();
          boolean supportsIncrementalRefresh = ContainerUtil.all(providers, provider -> {
            return VcsLogProperties.SUPPORTS_INCREMENTAL_REFRESH.getOrDefault(provider);
          });

          smallDataPack = optimize && supportsIncrementalRefresh && isSmallDataPackEnabled()
                          ? buildSmallDataPack() : DataPack.EMPTY;

          if (smallDataPack != DataPack.EMPTY) {
            myDataPackUpdateHandler.accept(smallDataPack);
          }

          dataPack = doRefresh(rootsToRefresh, supportsIncrementalRefresh);
        }
        catch (ProcessCanceledException e) {
          mySingleTaskController.taskCompleted(null);
          throw e;
        }
      }
    }
@Override
    public void run(@NotNull ProgressIndicator indicator)