You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2014/05/16 16:23:19 UTC

svn commit: r1595210 - in /sling/trunk/tooling/ide: eclipse-test/src/org/apache/sling/ide/test/impl/ContentImportTest.java eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java

Author: rombert
Date: Fri May 16 14:23:18 2014
New Revision: 1595210

URL: http://svn.apache.org/r1595210
Log:
SLING-3161 - SlingIDE Import Content wizard should respect .vltignore
files

Respect found .vltignore files found when importing.

Modified:
    sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ContentImportTest.java
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java

Modified: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ContentImportTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ContentImportTest.java?rev=1595210&r1=1595209&r2=1595210&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ContentImportTest.java (original)
+++ sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ContentImportTest.java Fri May 16 14:23:18 2014
@@ -37,8 +37,8 @@ import org.eclipse.core.resources.IProje
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.JavaCore;
-import org.hamcrest.CoreMatchers;
 import org.junit.After;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
@@ -83,7 +83,6 @@ public class ContentImportTest {
 
         // create server-side content
         RepositoryAccessor repo = new RepositoryAccessor(config);
-        repo.createNode("/content/test-root", "nt:folder");
         repo.createNode("/content/test-root/en", "nt:folder");
         repo.createNode("/content/test-root/en/files", "nt:folder");
         repo.createFile("/content/test-root/en/files/first.txt", "first file".getBytes());
@@ -120,7 +119,6 @@ public class ContentImportTest {
 
         // create server-side content
         RepositoryAccessor repo = new RepositoryAccessor(config);
-        repo.createNode("/content/test-root", "nt:folder");
         repo.createNode("/content/test-root/de", "nt:folder");
         repo.createNode("/content/test-root/de/files", "nt:folder");
         repo.createFile("/content/test-root/de/files/first.txt", "first file".getBytes());
@@ -133,6 +131,48 @@ public class ContentImportTest {
         assertThat(contentProject.findMember("jcr_root/content/test-root/de"), nullValue());
     }
 
+    @Test
+    public void importFilesAndFoldersRespectsVltIgnore() throws Exception {
+
+        // create faceted project
+        IProject contentProject = projectRule.getProject();
+
+        ProjectAdapter project = new ProjectAdapter(contentProject);
+        project.addNatures(JavaCore.NATURE_ID, "org.eclipse.wst.common.project.facet.core.nature");
+
+        project.createOrUpdateFile(Path.fromPortableString("META-INF/vault/filter.xml"), getClass()
+                .getResourceAsStream("filter-only-content-test-root-en.xml"));
+
+        project.createOrUpdateFile(Path.fromPortableString("jcr_root/content/test-root/.vltignore"),
+                new ByteArrayInputStream("en\n".getBytes()));
+
+        // install bundle facet
+        project.installFacet("sling.content", "1.0");
+
+        ServerAdapter server = new ServerAdapter(wstServer.getServer());
+        server.installModule(contentProject);
+
+        // create server-side content
+        RepositoryAccessor repo = new RepositoryAccessor(config);
+        repo.createNode("/content/test-root/en", "nt:folder");
+        repo.createNode("/content/test-root/en/files", "nt:folder");
+        repo.createFile("/content/test-root/en/files/first.txt", "first file".getBytes());
+
+        ImportRepositoryContentAction action = new ImportRepositoryContentAction(wstServer.getServer(),
+                Path.fromPortableString("/content/test-root"), contentProject, Activator.getDefault()
+                        .getSerializationManager());
+        action.run(new NullProgressMonitor());
+
+        assertThat(contentProject.findMember("jcr_root/content/test-root/en"), nullValue());
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        RepositoryAccessor repo = new RepositoryAccessor(config);
+        repo.createNode("/content", "nt:folder");
+        repo.createNode("/content/test-root", "nt:folder");
+    }
+
     @After
     public void cleanUp() throws Exception {
         new RepositoryAccessor(config).tryDeleteResource("/content/test-root");

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java?rev=1595210&r1=1595209&r2=1595210&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java Fri May 16 14:23:18 2014
@@ -19,11 +19,13 @@ package org.apache.sling.ide.eclipse.ui.
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
 import org.apache.sling.ide.eclipse.core.ProjectUtil;
 import org.apache.sling.ide.eclipse.core.ResourceUtil;
@@ -31,6 +33,7 @@ import org.apache.sling.ide.eclipse.core
 import org.apache.sling.ide.eclipse.core.debug.PluginLogger;
 import org.apache.sling.ide.filter.Filter;
 import org.apache.sling.ide.filter.FilterResult;
+import org.apache.sling.ide.filter.IgnoredResources;
 import org.apache.sling.ide.serialization.SerializationData;
 import org.apache.sling.ide.serialization.SerializationDataBuilder;
 import org.apache.sling.ide.serialization.SerializationException;
@@ -62,6 +65,7 @@ public class ImportRepositoryContentActi
 
     private SerializationManager serializationManager;
 	private SerializationDataBuilder builder;
+    private IgnoredResources ignoredResources;
 
     /**
      * @param server
@@ -76,6 +80,7 @@ public class ImportRepositoryContentActi
         this.projectRelativePath = projectRelativePath;
         this.project = project;
         this.serializationManager = serializationManager;
+        this.ignoredResources = new IgnoredResources();
     }
 
     public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException,
@@ -215,7 +220,11 @@ public class ImportRepositoryContentActi
 	            }
 	            case FOLDER:
 	            case METADATA_PARTIAL: {
-	                createFolder(project, fileOrFolderPath);
+
+                    IFolder folder = createFolder(project, fileOrFolderPath);
+
+                    parseIgnoreFiles(folder, path);
+
 	                if (serializationData.hasContents()) {
 	                    createFile(project, fileOrFolderPath.append(serializationData.getNameHint()),
 	                            serializationData.getContents());
@@ -240,6 +249,10 @@ public class ImportRepositoryContentActi
 
         for (ResourceProxy child : resourceChildren) {
 
+            if (ignoredResources.isIgnored(child.getPath())) {
+                continue;
+            }
+
             if (filter != null) {
                 FilterResult filterResult = filter.filter(contentSyncRoot, child.getPath(),
                         repository.getRepositoryInfo());
@@ -252,6 +265,22 @@ public class ImportRepositoryContentActi
         }
     }
 
+    private void parseIgnoreFiles(IFolder folder, String path) throws IOException, CoreException {
+        // TODO - the parsing should be extracted
+        IResource vltIgnore = folder.findMember(".vltignore");
+        if (vltIgnore != null && vltIgnore instanceof IFile) {
+            InputStream contents = ((IFile) vltIgnore).getContents();
+            try {
+                List<String> ignoreLines = IOUtils.readLines(contents);
+                for (String ignoreLine : ignoreLines) {
+                    ignoredResources.registerRegExpIgnoreRule(path, ignoreLine);
+                }
+            } finally {
+                IOUtils.closeQuietly(contents);
+            }
+        }
+    }
+
     private <T> T executeCommand(Command<T> command) throws RepositoryException {
 
         Result<T> result = command.execute();
@@ -264,17 +293,17 @@ public class ImportRepositoryContentActi
         createFile(project, destinationPath, content);
     }
 
-    private void createFolder(IProject project, IPath destinationPath) throws CoreException {
+    private IFolder createFolder(IProject project, IPath destinationPath) throws CoreException {
 
         IFolder destinationFolder = project.getFolder(destinationPath);
-        if (destinationFolder.exists())
-            return;
-
-        logger.trace("Creating folder {0}", destinationFolder.getFullPath());
+        if (!destinationFolder.exists()) {
+            logger.trace("Creating folder {0}", destinationFolder.getFullPath());
 
-        destinationFolder.create(true, true, null /* TODO progress monitor */);
+            destinationFolder.create(true, true, null /* TODO progress monitor */);
+            destinationFolder.setSessionProperty(ResourceUtil.QN_IGNORE_NEXT_CHANGE, Boolean.TRUE.toString());
+        }
 
-        destinationFolder.setSessionProperty(ResourceUtil.QN_IGNORE_NEXT_CHANGE, Boolean.TRUE.toString());
+        return destinationFolder;
     }
 
     private void createFile(IProject project, IPath path, byte[] node) throws CoreException {