You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2020/01/14 14:28:17 UTC
svn commit: r1872782 - in /felix/trunk/fileinstall/src:
main/java/org/apache/felix/fileinstall/internal/Scanner.java
test/java/org/apache/felix/fileinstall/internal/ScannerSubDirTest.java
Author: gnodet
Date: Tue Jan 14 14:28:17 2020
New Revision: 1872782
URL: http://svn.apache.org/viewvc?rev=1872782&view=rev
Log:
[FELIX-6211] fileinstall filter out subdirectories even though felix.fileinstall.subdir.mode property is set to 'recurse'
Added:
felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ScannerSubDirTest.java
Modified:
felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Scanner.java
Modified: felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Scanner.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Scanner.java?rev=1872782&r1=1872781&r2=1872782&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Scanner.java (original)
+++ felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Scanner.java Tue Jan 14 14:28:17 2020
@@ -126,7 +126,8 @@ public class Scanner implements Closeabl
*/
public Set<File> scan(boolean reportImmediately)
{
- File[] list = directory.listFiles(filter);
+
+ File[] list = directory.listFiles();
Set<File> files = processFiles(reportImmediately, list);
return new TreeSet<>(files);
}
@@ -149,7 +150,12 @@ public class Scanner implements Closeabl
}
else if (recurseSubdir)
{
- files.addAll(processFiles(reportImmediately, file.listFiles(filter)));
+ files.addAll(processFiles(reportImmediately, file.listFiles()));
+ continue;
+ }
+ }
+ else {
+ if (!filter.accept(file.getParentFile(),file.getName())){
continue;
}
}
Added: felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ScannerSubDirTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ScannerSubDirTest.java?rev=1872782&view=auto
==============================================================================
--- felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ScannerSubDirTest.java (added)
+++ felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ScannerSubDirTest.java Tue Jan 14 14:28:17 2020
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.fileinstall.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import static org.apache.felix.fileinstall.internal.Scanner.SUBDIR_MODE_RECURSE;
+import static org.apache.felix.fileinstall.internal.Scanner.SUBDIR_MODE_SKIP;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class ScannerSubDirTest {
+
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ private final static String FILTER = ".*\\.(cfg|config)";
+ private final static Set<File> expectedRecurseFiles = new HashSet<>();
+ private final static Set<File> excludedRecurseFiles = new HashSet<>();
+ private final static Set<File> expectedSkipFiles = new HashSet<>();
+ private final static Set<File> excludedSkipFiles = new HashSet<>();
+
+
+ @Test
+ public void testRecurse() throws Exception {
+ prepareFiles();
+ File watchedDirectory = folder.getRoot();
+ Scanner recurseScanner = new Scanner(watchedDirectory, FILTER, SUBDIR_MODE_RECURSE);
+ Set<File> filteredRecurseFiles = canon(recurseScanner.scan(true));
+ assertEquals(filteredRecurseFiles.size(), expectedRecurseFiles.size());
+ assertTrue(filteredRecurseFiles.containsAll(expectedRecurseFiles));
+ for (File file : excludedRecurseFiles) {
+ Assert.assertFalse(filteredRecurseFiles.contains(file));
+ }
+
+ Scanner skipScanner = new Scanner(watchedDirectory, FILTER, SUBDIR_MODE_SKIP);
+ Set<File> filteredSkipFiles = canon(skipScanner.scan(true));
+
+ //Assertions
+
+ assertEquals(filteredSkipFiles.size(), expectedSkipFiles.size());
+ assertTrue(filteredSkipFiles.containsAll(expectedSkipFiles));
+ for (File file : excludedSkipFiles) {
+ Assert.assertFalse(filteredSkipFiles.contains(file));
+ }
+ }
+
+ private Set<File> canon(Set<File> set) throws IOException {
+ Set<File> ns = new HashSet<>();
+ for (File f : set) {
+ ns.add(f.getCanonicalFile());
+ }
+ return ns;
+ }
+
+
+ private void prepareFiles() throws IOException {
+ File cfgFirst = folder.newFile("first.cfg").getCanonicalFile();
+ File mdFirst = folder.newFile("first.md").getCanonicalFile();
+
+ excludedRecurseFiles.add(mdFirst);
+ expectedRecurseFiles.add(cfgFirst);
+ excludedSkipFiles.add(mdFirst);
+ expectedSkipFiles.add(cfgFirst);
+
+ // first level subfolder and files
+ //expected
+ File firstLevelSubfolder = folder.newFolder("firstSubfolder").getCanonicalFile();
+ Path firstLevelSubfolderCfgFilePath = Paths.get(firstLevelSubfolder.getPath() + File.separator + "second.cfg");
+ File firstLevelSubfolderCfgFile = new File(firstLevelSubfolderCfgFilePath.toString());
+ firstLevelSubfolderCfgFile.createNewFile();
+ expectedRecurseFiles.add(firstLevelSubfolderCfgFile);
+ excludedSkipFiles.add(firstLevelSubfolderCfgFile);
+ //md
+ Path firstLevelSubfolderMdFilePath = Paths.get(firstLevelSubfolder.getPath() + File.separator + "second.md");
+ File firstLevelSubfolderMdFile = new File(firstLevelSubfolderMdFilePath.toString());
+ firstLevelSubfolderMdFile.createNewFile();
+ excludedRecurseFiles.add(firstLevelSubfolderMdFile);
+ excludedSkipFiles.add(firstLevelSubfolderMdFile);
+
+ // second level subfolder and files
+ //cfg
+ Path secondLevelSubfolderCfgFilePath = Paths.get(firstLevelSubfolder.getPath() + File.separator + "secondSubfolder" + File.separator + "third.config");
+ File secondLevelSubfolderCfgFile = new File(secondLevelSubfolderCfgFilePath.toString());
+ secondLevelSubfolderCfgFile.getParentFile().mkdirs();
+ secondLevelSubfolderCfgFile.createNewFile();
+ expectedRecurseFiles.add(secondLevelSubfolderCfgFile);
+ excludedSkipFiles.add(secondLevelSubfolderCfgFile);
+ //Txt
+ Path secondLevelSubfolderTxtFilePath = Paths.get(firstLevelSubfolder.getPath() + File.separator + "secondSubfolder" + File.separator + "third.txt");
+ File secondLevelSubfolderTxtFile = new File(secondLevelSubfolderTxtFilePath.toString());
+ secondLevelSubfolderTxtFile.createNewFile();
+ excludedRecurseFiles.add(secondLevelSubfolderTxtFile);
+ excludedSkipFiles.add(secondLevelSubfolderTxtFile);
+ }
+
+}