@Override
  public void pruneHistory(long maxHistoryLength, ProgressDelegate progress) {
    VFSContainer versionsContainer = getRootVersionsContainer();
    if (!versionsContainer.exists()) {
      return;
    }
    // delete folder without versioning first

    int count = 0;
    String[] excludedRootFolders = new String[] {"tmp", "scorm", "forum", "portfolio"};
    for (String excludedRootFolder : excludedRootFolders) {
      VFSItem excludedContainer = versionsContainer.resolve(excludedRootFolder);
      if (excludedContainer instanceof LocalFolderImpl) {
        File excludedFile = ((LocalFolderImpl) excludedContainer).getBasefile();
        FileUtils.deleteQuietly(excludedFile);
        if (progress != null) progress.setInfo(excludedContainer.getName());
      }
      if (progress != null) progress.setActual(++count);
    }

    if (maxHistoryLength < 0) {
      // nothing to do
    } else if (maxHistoryLength == 0 && versionsContainer instanceof LocalFolderImpl) {
      // delete all the stuff
      FileUtils.deleteQuietly(((LocalFolderImpl) versionsContainer).getBasefile());
    } else {
      pruneVersionHistory(versionsContainer, maxHistoryLength, progress, count);
    }

    if (progress != null) progress.finished();
  }
 @Override
 public boolean deleteOrphans(ProgressDelegate progress) {
   List<OrphanVersion> orphans = orphans();
   if (progress != null) progress.setMax(orphans.size());
   int count = 0;
   for (OrphanVersion orphan : orphans) {
     delete(orphan);
     if (progress != null) {
       progress.setActual(++count);
       progress.setInfo(orphan.getOriginalFilePath());
     }
   }
   if (progress != null) progress.finished();
   return true;
 }
 private void pruneVersionHistory(
     VFSContainer container, long maxHistoryLength, ProgressDelegate progress, int count) {
   List<VFSItem> children = container.getItems(new SystemItemFilter());
   for (VFSItem child : children) {
     if (child instanceof VFSContainer) {
       if (progress != null) progress.setActual(++count);
       pruneVersionHistory((VFSContainer) child, maxHistoryLength, progress, count);
     }
     if (child instanceof VFSLeaf) {
       VFSLeaf versionsLeaf = (VFSLeaf) child;
       pruneVersionHistory(versionsLeaf, maxHistoryLength, progress);
     }
   }
 }
 private void pruneVersionHistory(
     VFSLeaf versionsLeaf, long maxHistoryLength, ProgressDelegate progress) {
   if (versionsLeaf.getName().endsWith(".xml") && isVersionsXmlFile(versionsLeaf)) {
     File originalFile = reversedOriginFile(versionsLeaf);
     if (originalFile.exists()) {
       VFSLeaf original = new LocalFileImpl(originalFile);
       if (progress != null) progress.setInfo(original.getName());
       Versions versions = readVersions(original, versionsLeaf);
       List<VFSRevision> revisions = versions.getRevisions();
       if (revisions.size() > maxHistoryLength) {
         List<VFSRevision> revisionsToDelete =
             revisions.subList(0, revisions.size() - (int) maxHistoryLength);
         deleteRevisions((Versionable) original, revisionsToDelete);
       }
     }
   }
 }