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 {