public void allowed(String... folders) { allowed(Arrays.asList(folders)); }
public void allowed(List<String> allowedFolders) { ArrayList<File> allowedDirs = convertToFiles(allowedFolders); for (File allowedDir : allowedDirs) { allowed(allowedDir, allowedDirs); } }
public void cleanUp(File baseFolder, ConsoleOutputStreamConsumer consumer) { if (hasMaterialsWithNoDestinationFolder()) { return; } DirectoryCleaner cleaner = new DirectoryCleaner(baseFolder, consumer); cleaner.allowed(allowedFolders()); cleaner.clean(); }
@Test public void shouldNotRemoveAllowedDirectoriesInSubfolder() { File allowedFolder = new File(baseFolder, "subfolder/allowed"); allowedFolder.mkdirs(); cleaner.allowed("subfolder/allowed"); cleaner.clean(); assertThat(baseFolder.exists(), is(true)); assertThat(allowedFolder.getParentFile().exists(), is(true)); assertThat(allowedFolder.exists(), is(true)); }
@Test public void shouldNotCleanSvnDestIfExternalIsEnabled() { File svnDest = new File(baseFolder, "test1"); File shouldExist = new File(svnDest, "shouldExist"); shouldExist.mkdirs(); File svnExternal = new File(baseFolder, "test1/external"); svnExternal.mkdirs(); cleaner.allowed("test1", "test1/subdir"); cleaner.clean(); assertThat(svnDest.exists(), is(true)); assertThat(shouldExist.exists(), is(true)); }
@Test public void shouldNotProcessFilesOutsideTheBaseFolder() { try { cleaner.allowed("/../.."); Assert.fail("Should not allow file outside the baseDirectory"); } catch (Exception e) { assertThat( e.getMessage(), containsString("Folder " + new File(baseFolder, "/../..").getAbsolutePath() + " is outside the base folder")); } }
@Test public void shouldRemoveNotAllowedDirectoriesInSubfolder() { File allowedFolder = new File(baseFolder, "subfolder/allowed"); allowedFolder.mkdirs(); File notAllowedFolder = new File(baseFolder, "subfolder/notAllowed"); notAllowedFolder.mkdirs(); cleaner.allowed("subfolder/allowed"); cleaner.clean(); assertThat(baseFolder.exists(), is(true)); assertThat(allowedFolder.getParentFile().exists(), is(true)); assertThat(notAllowedFolder.exists(), is(false)); }
@Test public void shouldRemoveExtraDirectoriesInRootFolder() { File notAllowed = new File(baseFolder, "notAllowed"); notAllowed.mkdirs(); cleaner.allowed("allowed"); cleaner.clean(); assertThat(baseFolder.exists(), is(true)); assertThat(notAllowed.exists(), is(false)); }
@Test public void shouldDoNothingIfSubdirectoryDoesNotExist() { File allowedFolder = new File(baseFolder, "subfolder/allowed"); cleaner.allowed("subfolder/allowed"); cleaner.clean(); assertThat(baseFolder.exists(), is(true)); assertThat(allowedFolder.exists(), is(false)); }
@Test public void shouldNotRemoveAllowedDirectoriesInRootFolder() { File allowedFolder = new File(baseFolder, "allowed"); allowedFolder.mkdir(); cleaner.allowed("allowed"); cleaner.clean(); assertThat(baseFolder.exists(), is(true)); assertThat(allowedFolder.exists(), is(true)); }
@Test public void shouldDoNothingIfDirectoryIsEmpty() { cleaner.allowed("non-existent"); cleaner.clean(); assertThat(baseFolder.exists(), is(true)); }
@Test public void shouldReportDeletingFiles() throws IOException { File allowedFolder = new File(baseFolder, "subfolder/allowed"); allowedFolder.mkdirs(); File notAllowedFolder = new File(baseFolder, "subfolder/notallowed"); notAllowedFolder.mkdirs(); cleaner.allowed("subfolder/allowed"); cleaner.clean(); assertThat(consumer.getStdOut(), containsString("Deleting folder " + notAllowedFolder.getPath())); assertThat(consumer.getStdOut(), containsString("Keeping folder " + allowedFolder.getPath())); } }
@Override public boolean execute(BuildCommand command, BuildSession buildSession) { File dir = buildSession.resolveRelativeDir(command.getWorkingDirectory(), command.getStringArg("path")); String[] allowed = command.getArrayArg("allowed"); if (allowed.length == 0) { try { FileUtils.cleanDirectory(dir); } catch (IOException e) { return false; } } else { DirectoryCleaner cleaner = new DirectoryCleaner(dir, buildSession.processOutputStreamConsumer()); cleaner.allowed(allowed); cleaner.clean(); } return true; } }
@Test public void shouldKeepMaterialFolderIfItContainsOtherMaterials() { File material1 = mkdirDir(baseFolder, "material1"); File dirOfMaterial1 = mkdirDir(material1, "dirOfMaterial1"); File material2 = mkdirDir(material1, "material2"); File oldMaterial3 = mkdirDir(baseFolder, "oldMaterial3"); cleaner.allowed("material1", "material1/material2"); cleaner.clean(); assertThat(material1.exists(), is(true)); assertThat(dirOfMaterial1.exists(), is(true)); assertThat(material2.exists(), is(true)); assertThat(oldMaterial3.exists(), is(false)); }