private void execute(final int bunchSize) throws VcsException {
    myBunchSize = bunchSize;
    myResult.clear();

    int defender = 1000;
    while (true) {
      while (true) {
        -- defender;
        if (defender == 0) {
          return;
        }
        ProgressManager.checkCanceled();
        final Fragment fragment = myCurrentProvider.getEarliestBunchInInterval(myYoungest, 0,
                                  (myYoungest == -1) ? myBunchSize : (myBunchSize + 1), (myYoungest == -1), true);
        if ((fragment == null) || (fragment.getList().isEmpty())) {
          // switch to next provider
          break;
        }

        ProgressManager.checkCanceled();
        final List<CommittedChangeList> bunchLists = fragment.getList();
        if (! fragment.isConsistentWithYounger()) {
          final long endRevision = bunchLists.get(0).getNumber();
          if ((endRevision < myYoungest) || (myYoungest == -1)) {
            final Fragment liveFragment = myLiveProvider.getEarliestBunchInInterval(myYoungest, endRevision,
                                  (myYoungest == -1) ? (myBunchSize + 1) : (myBunchSize + 2), (myYoungest == -1), false);
            if (liveFragment != null) {
              addToResult(liveFragment);
              if (myBunchSize == 0) {
                return;
              }
            }
          }
        }
        addToResult(fragment);
        if (myBunchSize == 0) {
          return;
        }
      }
      if (myProviderIterator.hasNext()) {
        myCurrentProvider = myProviderIterator.next();
      } else {
        break;
      }
    }
  }
private void execute(final int bunchSize)