You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2012/02/09 11:00:23 UTC
svn commit: r1242256 -
/sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java
Author: cziegeler
Date: Thu Feb 9 10:00:22 2012
New Revision: 1242256
URL: http://svn.apache.org/viewvc?rev=1242256&view=rev
Log:
SLING-2407 : Configuration write back handles delete too aggressive
Modified:
sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java
Modified: sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java?rev=1242256&r1=1242255&r2=1242256&view=diff
==============================================================================
--- sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java (original)
+++ sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java Thu Feb 9 10:00:22 2012
@@ -552,24 +552,54 @@ public class JcrInstaller implements Eve
}
final int pos = url.indexOf(':');
final String path = url.substring(pos + 1);
- // remove
- logger.debug("Removal of {}", path);
- Session session = null;
- try {
- session = this.repository.loginAdministrative(null);
- if ( session.itemExists(path) ) {
- session.getItem(path).remove();
- session.save();
- }
- } catch (final RepositoryException re) {
- logger.error("Unable to remove resource from " + path, re);
+
+ // check path (SLING-2407)
+ // 0. Check protocol
+ if ( !url.startsWith(URL_SCHEME) ) {
+ logger.debug("Not removing unmanaged artifact from repository: {}", url);
return null;
- } finally {
- if ( session != null ) {
- session.logout();
+ }
+ // 1. Is this a system configuration then don't delete
+ final String[] rootPaths = this.folderNameFilter.getRootPaths();
+ final String systemConfigRootPath = rootPaths[rootPaths.length - 1];
+ if ( path.startsWith(systemConfigRootPath) ) {
+ logger.debug("Not removing system artifact from repository at {}", path);
+ return null;
+ }
+ // 2. Is this configuration provisioned by us
+ boolean found = false;
+ int lastSlash = path.lastIndexOf('/');
+ while (!found && lastSlash > 1) {
+ final String prefix = path.substring(0, lastSlash);
+ if ( this.folderNameFilter.getPriority(prefix) != -1 ) {
+ found = true;
+ } else {
+ lastSlash = prefix.lastIndexOf('/');
+ }
+ }
+ if ( found ) {
+ // remove
+ logger.debug("Removing artifact at {}", path);
+ Session session = null;
+ try {
+ session = this.repository.loginAdministrative(null);
+ if ( session.itemExists(path) ) {
+ session.getItem(path).remove();
+ session.save();
+ }
+ } catch (final RepositoryException re) {
+ logger.error("Unable to remove resource from " + path, re);
+ return null;
+ } finally {
+ if ( session != null ) {
+ session.logout();
+ }
}
+ return new UpdateResult(url);
}
- return new UpdateResult(url);
+ // not provisioned by us
+ logger.debug("Not removing unmanaged artifact from repository at {}", path);
+ return null;
}
/**