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);
}
}