Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/authorization/VersionManagementTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/authorization/VersionManagementTest.java (revision fd20ef4b4c359fe2cb7e3af29baa28e5994ae550) +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/authorization/VersionManagementTest.java (date 1554039659000) @@ -27,8 +27,10 @@ import javax.jcr.security.Privilege; import javax.jcr.version.Version; import javax.jcr.version.VersionHistory; +import javax.jcr.version.VersionIterator; import javax.jcr.version.VersionManager; +import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.test.NotExecutableException; import org.junit.Before; import org.junit.Test; @@ -192,6 +194,35 @@ superuser.save(); } } + + @Test + public void testHistoryRemovedWhenRemovedAllVersions() throws Exception { + Node testNode = createVersionableNode(superuser.getNode(path)); + + VersionManager versionManager = superuser.getWorkspace().getVersionManager(); + + versionManager.checkout(testNode.getPath()); + versionManager.checkin(testNode.getPath()); + + versionManager.checkout(testNode.getPath()); + versionManager.checkin(testNode.getPath()); + + VersionHistory versionHistory = versionManager.getVersionHistory(testNode.getPath()); + String historyNodePath = versionHistory.getPath(); + VersionIterator allVersions = versionHistory.getAllVersions(); + testNode.remove(); + superuser.save(); + + while (allVersions.hasNext()) { + Version version = allVersions.nextVersion(); + if (!version.getName().equals(JcrConstants.JCR_ROOTVERSION)) { + versionHistory.removeVersion(version.getName()); + } + } + superuser.save(); + + assertFalse(superuser.nodeExists(historyNodePath)); + } /** * @since oak (DIFF: jr required jcr:versionManagement privilege on the version store) Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java (revision fd20ef4b4c359fe2cb7e3af29baa28e5994ae550) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java (date 1554040383000) @@ -213,7 +213,11 @@ predecessor.setProperty(pb.getPropertyState()); } + versionNode.remove(); + if (isEmptyHistory(vh.getNodeState())) { + vh.remove(); + } } public void checkout(NodeBuilder versionable) {