private void cleanupVersions()

in src/main/java/org/apache/sling/jcr/maintenance/internal/VersionCleanup.java [90:124]


    private void cleanupVersions(final Session session, final Resource history) {
        try {
            final VersionHistory versionHistory = (VersionHistory) session.getItem(history.getPath());
            final String path = getPath(session, versionHistory);
            final VersionCleanupPath config = VersionCleanupPath.getMatchingConfiguration(this.versionCleanupConfigs,
                    path);
            int limit = config.getLimit();

            if (!isMatchingVersion(session, path, versionHistory) && !config.isKeepVersions() && limit > 0) {
                log.debug("Deleted, removing all but last version");
                limit = 1;
            }
            log.debug("Cleaning up versions for: {}", versionHistory.getPath());
            final VersionIterator versionIterator = versionHistory.getAllVersions();
            final List<String> versionNames = new ArrayList<>();
            while (versionIterator.hasNext()) {
                final Version version = versionIterator.nextVersion();
                if (!version.getName().equals("jcr:rootVersion")) {
                    versionNames.add(version.getName());
                }
            }
            if (versionNames.size() > limit) {
                final List<String> toCleanup = versionNames.subList(0, versionNames.size() - limit);
                log.info("Cleaning up {} versions from {} at: {}", toCleanup.size(), path, versionHistory.getPath());
                for (final String item : toCleanup) {
                    versionHistory.removeVersion(item);
                    log.trace("Cleaned up: {}", item);
                    lastCleanedVersions++;
                }
            }
        } catch (final RepositoryException re) {
            log.warn("Failed to cleanup version history for: {}", history.getPath(), re);
        }

    }