private void appyIgnoreFilter(MaterialConfig materialConfig, ModifiedFile file, Set<ModifiedFile> ignoredFiles) { for (IgnoredFiles ignore : materialConfig.filter()) { if (ignore.shouldIgnore(materialConfig, file.getFileName())) { ignoredFiles.add(file); } } }
public boolean shouldBeIgnoredByFilterIn(MaterialConfig materialConfig) { if (materialConfig.filter().shouldNeverIgnore()) { return false; } Set<ModifiedFile> allFiles = getAllFiles(this); Set<ModifiedFile> ignoredFiles = new HashSet<>(); for (ModifiedFile file : allFiles) { appyIgnoreFilter(materialConfig, file, ignoredFiles); } LOG.debug("Checking ignore filters for {}", materialConfig); LOG.debug("Ignored files: {}", ignoredFiles); LOG.debug("Changed files: {}", CollectionUtils.subtract(allFiles, ignoredFiles)); if (materialConfig.isInvertFilter()) { // return true (ignore) if we are inverting the filter, and the ignoredFiles and allFiles are disjoint sets return Collections.disjoint(allFiles, ignoredFiles); } else { return ignoredFiles.containsAll(allFiles); } }
@Test public void shouldLoadIgnoresFromHgPartial() throws Exception { String buildXmlPartial = "<hg url=\"file:///tmp/testSvnRepo/project1/trunk\" >\n" + " <filter>\n" + " <ignore pattern=\"x\"/>\n" + " </filter>\n" + " </hg>"; MaterialConfig hgMaterial = xmlLoader.fromXmlPartial(buildXmlPartial, HgMaterialConfig.class); Filter parsedFilter = hgMaterial.filter(); Filter expectedFilter = new Filter(); expectedFilter.add(new IgnoredFiles("x")); assertThat(parsedFilter, is(expectedFilter)); }
@Test public void shouldLoadIgnoresFromP4Partial() throws Exception { String gitPartial = "<p4 port=\"localhost:8080\">\n" + " <filter>\n" + " <ignore pattern=\"x\"/>\n" + " </filter>\n" + " <view></view>\n" + "</p4>"; MaterialConfig p4Material = xmlLoader.fromXmlPartial(gitPartial, P4MaterialConfig.class); Filter parsedFilter = p4Material.filter(); Filter expectedFilter = new Filter(); expectedFilter.add(new IgnoredFiles("x")); assertThat(parsedFilter, is(expectedFilter)); }
@Test public void shouldLoadIgnoresFromSvnPartial() throws Exception { String buildXmlPartial = "<svn url=\"file:///tmp/testSvnRepo/project1/trunk\" >\n" + " <filter>\n" + " <ignore pattern=\"x\"/>\n" + " </filter>\n" + " </svn>"; MaterialConfig svnMaterial = xmlLoader.fromXmlPartial(buildXmlPartial, SvnMaterialConfig.class); Filter parsedFilter = svnMaterial.filter(); Filter expectedFilter = new Filter(); expectedFilter.add(new IgnoredFiles("x")); assertThat(parsedFilter, is(expectedFilter)); }
@Test public void shouldRemoveDuplicatedIgnoreTag() throws Exception { CruiseConfig cruiseConfig = ConfigMigrator.load(ConfigFileFixture.TWO_DUPLICATED_FILTER); int size = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString("pipeline1")).materialConfigs().first().filter().size(); assertThat(size, is(1)); }
@Test public void shouldAllowSCMTypeMaterialForPipeline() throws Exception { CruiseConfig configToSave = new BasicCruiseConfig(); SCM scm = new SCM(); String scmId = "scm-id"; scm.setId(scmId); scm.setName("name"); scm.setPluginConfiguration(new PluginConfiguration("plugin-id", "1.0")); scm.setConfiguration(new Configuration(getConfigurationProperty("url", false, "http://go"))); configToSave.getSCMs().add(scm); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(scmId); pluggableSCMMaterialConfig.setSCMConfig(scm); configToSave.addPipeline("default", PipelineConfigMother.pipelineConfig("test", new MaterialConfigs(pluggableSCMMaterialConfig), new JobConfigs(new JobConfig("ls")))); xmlWriter.write(configToSave, output, false); GoConfigHolder goConfigHolder = xmlLoader.loadConfigHolder(output.toString()); PipelineConfig pipelineConfig = goConfigHolder.config.pipelineConfigByName(new CaseInsensitiveString("test")); MaterialConfig materialConfig = pipelineConfig.materialConfigs().get(0); assertThat(materialConfig instanceof PluggableSCMMaterialConfig, is(true)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getScmId(), is(scmId)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getSCMConfig(), is(scm)); assertThat(materialConfig.getFolder(), is(nullValue())); assertThat(materialConfig.filter(), is(new Filter())); }
@Test public void shouldAllowFolderAndFilterForPluggableSCMMaterialForPipeline() throws Exception { CruiseConfig configToSave = new BasicCruiseConfig(); SCM scm = new SCM(); String scmId = "scm-id"; scm.setId(scmId); scm.setName("name"); scm.setPluginConfiguration(new PluginConfiguration("plugin-id", "1.0")); scm.setConfiguration(new Configuration(getConfigurationProperty("url", false, "http://go"))); configToSave.getSCMs().add(scm); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(scmId); pluggableSCMMaterialConfig.setSCMConfig(scm); pluggableSCMMaterialConfig.setFolder("dest"); pluggableSCMMaterialConfig.setFilter(new Filter(new IgnoredFiles("x"), new IgnoredFiles("y"))); configToSave.addPipeline("default", PipelineConfigMother.pipelineConfig("test", new MaterialConfigs(pluggableSCMMaterialConfig), new JobConfigs(new JobConfig("ls")))); xmlWriter.write(configToSave, output, false); GoConfigHolder goConfigHolder = xmlLoader.loadConfigHolder(output.toString()); PipelineConfig pipelineConfig = goConfigHolder.config.pipelineConfigByName(new CaseInsensitiveString("test")); MaterialConfig materialConfig = pipelineConfig.materialConfigs().get(0); assertThat(materialConfig instanceof PluggableSCMMaterialConfig, is(true)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getScmId(), is(scmId)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getSCMConfig(), is(scm)); assertThat(materialConfig.getFolder(), is("dest")); assertThat(materialConfig.filter(), is(new Filter(new IgnoredFiles("x"), new IgnoredFiles("y")))); }