public static long scanFullRepository(
      ScanRepository scanRepository,
      String url,
      long fromRev,
      String indexDirectory,
      boolean create,
      ISVNAuthenticationManager authManager,
      Filtering filtering)
      throws SVNException {
    Repository repository = new Repository(url, authManager);

    boolean firstTime = true;

    // Assuming we have fromRev: 1
    // toRev: HEAD (-1)
    long latestRevision = repository.getRepository().getLatestRevision();

    // Define number per round
    long deltaRevisions = 10000;
    long blockNumber = 0;

    for (long revisions = fromRev; revisions < latestRevision; revisions += deltaRevisions) {
      long startRevision = revisions;
      long endRevision = revisions + deltaRevisions - 1;
      if (endRevision > latestRevision) {
        endRevision = latestRevision;
      }

      blockNumber = revisions / deltaRevisions;

      // BLOCK BEGIN
      if (create) {
        if (firstTime) {
          firstTime = false;
        } else {
          create = false;
        }
      }

      scanRepository.setLogEntries(new ArrayList<SVNLogEntry>());
      scanRepository.setRepository(repository);

      // We start with the revision which is given on the command line.
      // If it is not given we will start with revision 1.
      scanRepository.setStartRevision(startRevision);
      // We will scan the repository to the current HEAD of the repository.
      scanRepository.setEndRevision(endRevision);

      scanRepository.setFiltering(filtering);

      ScanSingleRepository.scanSingleRepos(scanRepository, indexDirectory + blockNumber, create);
      // BLOCK END
    }
    return blockNumber;
  }
  /**
   * @param fromRev
   * @param toRev
   * @param indexDirectory
   * @param create
   * @param repository
   */
  public static void scanSingleRepos(
      ScanRepository scanRepository, String indexDirectory, boolean create) {
    // BLOCK ANFANG

    Index index = new Index();
    // We will create a new one if --create is given on command line
    // otherwise we will append to the existing index.
    Analyzer analyzer = AnalyzerFactory.createInstance();
    index.setAnalyzer(analyzer);

    index.setCreate(create);
    IndexWriter indexWriter = index.createIndexWriter(indexDirectory);

    try {
      LOGGER.info("Scanning started.");
      scanRepository.scan(indexWriter);
      LOGGER.info("Scanning ready.");
      try {
        long startTime = System.currentTimeMillis();
        LOGGER.info("Index optimizing started.");
        indexWriter.optimize();
        indexWriter.close();
        long stopTime = System.currentTimeMillis();
        LOGGER.info("Index optimizing done.");
        long ms = (stopTime - startTime);
        long seconds = ms / 1000;
        LOGGER.info("The Index optimizing has taken " + seconds + " seconds.");
      } catch (CorruptIndexException e) {
        LOGGER.error("CorruptIndexException: Error during optimization of index: ", e);
      } catch (IOException e) {
        LOGGER.error("IOException: Error during optimization of index: ", e);
      }
    } catch (SVNAuthenticationException svnae) {
      LOGGER.error("Authentication has failed. ", svnae);
    } catch (Exception e) {
      LOGGER.error("Something unexpected went wrong ", e);
    }
  }