Просмотр исходного кода

[MRM-746] unable to include *.xml in artifacts list as it picks up maven-metadata.xml

- consolidate operations that checked if something was an artifact into FileTypes
- add exclusions for the metadata and supporting files to consumers
- add tests
Merged from: r640793


git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@640819 13f79535-47bb-0310-9956-ffa450edef68
tags/archiva-r676265
Brett Porter 16 лет назад
Родитель
Сommit
e26eac7e06
24 измененных файлов: 502 добавлений и 236 удалений
  1. 74
    18
      archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/FileTypes.java
  2. 55
    0
      archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/FileTypesTest.java
  3. 16
    0
      archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java
  4. 1
    1
      archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
  5. 1
    1
      archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/MetadataUpdaterConsumer.java
  6. 1
    1
      archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
  7. 76
    0
      archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/AbstractArtifactConsumerTest.java
  8. 35
    0
      archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java
  9. 35
    0
      archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/MetadataUpdateConsumerTest.java
  10. 5
    5
      archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
  11. 45
    1
      archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
  12. 4
    0
      archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml
  13. 5
    0
      archiva-base/archiva-consumers/archiva-database-consumers/pom.xml
  14. 1
    1
      archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java
  15. 79
    0
      archiva-base/archiva-consumers/archiva-database-consumers/src/test/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumerTest.java
  16. 56
    0
      archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumerTest.xml
  17. 4
    50
      archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ManagedDefaultRepositoryContent.java
  18. 5
    51
      archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ManagedLegacyRepositoryContent.java
  19. 0
    70
      archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/RepositoryRequest.java
  20. 1
    23
      archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java
  21. 0
    14
      archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/RepositoryRequestTest.java
  22. 1
    0
      archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArtifactCountConsumer.java
  23. 1
    0
      archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/DuplicateArtifactsConsumer.java
  24. 1
    0
      archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/LocationArtifactsConsumer.java

+ 74
- 18
archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/FileTypes.java Просмотреть файл

@@ -34,8 +34,11 @@ import org.apache.maven.archiva.configuration.functors.FiletypeSelectionPredicat
import org.apache.maven.archiva.configuration.io.registry.ConfigurationRegistryReader;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.registry.RegistryException;
import org.codehaus.plexus.registry.RegistryListener;
import org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry;
import org.codehaus.plexus.util.SelectorUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@@ -48,7 +51,7 @@ import org.slf4j.LoggerFactory;
* @plexus.component role="org.apache.maven.archiva.configuration.FileTypes"
*/
public class FileTypes
implements Initializable
implements Initializable, RegistryListener
{
private Logger log = LoggerFactory.getLogger(FileTypes.class);
@@ -70,11 +73,18 @@ public class FileTypes
*/
private Map<String, List<String>> defaultTypeMap = new HashMap<String, List<String>>();

private List<String> artifactPatterns;

public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )
{
this.archivaConfiguration = archivaConfiguration;
}

/**
* <p>
* Get the list of patterns for a specified filetype.
* </p>
*
*
* <p>
* You will always get a list. In this order.
* <ul>
@@ -83,7 +93,7 @@ public class FileTypes
* <li>A single item list of <code>"**<span>/</span>*"</code></li>
* </ul>
* </p>
*
*
* @param id the id to lookup.
* @return the list of patterns.
*/
@@ -109,11 +119,33 @@ public class FileTypes
return defaultPatterns;
}

public synchronized boolean matchesArtifactPattern( String relativePath )
{
// Correct the slash pattern.
relativePath = relativePath.replace( '\\', '/' );

if ( artifactPatterns == null )
{
artifactPatterns = getFileTypePatterns( ARTIFACTS );
}
for ( String pattern : artifactPatterns )
{
if ( SelectorUtils.matchPath( pattern, relativePath, false ) )
{
// Found match
return true;
}
}

// No match.
return false;
}

public void initialize()
throws InitializationException
{
/* Initialize Default Type Map */
defaultTypeMap.clear();
// TODO: why is this done by hand?

String errMsg = "Unable to load default archiva configuration for FileTypes: ";
@@ -132,19 +164,7 @@ public class FileTypes
ConfigurationRegistryReader configReader = new ConfigurationRegistryReader();
Configuration defaultConfig = configReader.read( commonsRegistry );

// Store the default file type declaration.
List<FileType> filetypes = defaultConfig.getRepositoryScanning().getFileTypes();
for ( FileType filetype : filetypes )
{
List<String> patterns = defaultTypeMap.get( filetype.getId() );
if ( patterns == null )
{
patterns = new ArrayList<String>();
}
patterns.addAll( filetype.getPatterns() );

defaultTypeMap.put( filetype.getId(), patterns );
}
initialiseTypeMap( defaultConfig );
}
catch ( RegistryException e )
{
@@ -166,5 +186,41 @@ public class FileTypes
{
throw new InitializationException( errMsg + e.getMessage(), e );
}

this.archivaConfiguration.addChangeListener( this );
}

private void initialiseTypeMap( Configuration configuration )
{
defaultTypeMap.clear();

// Store the default file type declaration.
List<FileType> filetypes = configuration.getRepositoryScanning().getFileTypes();
for ( FileType filetype : filetypes )
{
List<String> patterns = defaultTypeMap.get( filetype.getId() );
if ( patterns == null )
{
patterns = new ArrayList<String>();
}
patterns.addAll( filetype.getPatterns() );

defaultTypeMap.put( filetype.getId(), patterns );
}
}

public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
if ( propertyName.contains( "fileType" ) )
{
artifactPatterns = null;

initialiseTypeMap( archivaConfiguration.getConfiguration() );
}
}

public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
/* nothing to do */
}
}

+ 55
- 0
archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/FileTypesTest.java Просмотреть файл

@@ -0,0 +1,55 @@
package org.apache.maven.archiva.configuration;

/*
* 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.
*/

import org.codehaus.plexus.spring.PlexusInSpringTestCase;

public class FileTypesTest
extends PlexusInSpringTestCase
{
private FileTypes filetypes;

protected void setUp()
throws Exception
{
super.setUp();

filetypes = (FileTypes) lookup( FileTypes.class );
}

public void testIsArtifact()
{
assertTrue( filetypes.matchesArtifactPattern( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
assertTrue( filetypes.matchesArtifactPattern(
"test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
assertTrue( filetypes.matchesArtifactPattern( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );

assertFalse(
filetypes.matchesArtifactPattern( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.sha1" ) );
assertFalse(
filetypes.matchesArtifactPattern( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.md5" ) );
assertFalse(
filetypes.matchesArtifactPattern( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.asc" ) );
assertFalse(
filetypes.matchesArtifactPattern( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
assertFalse( filetypes.matchesArtifactPattern( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml" ) );
assertFalse( filetypes.matchesArtifactPattern( "org/apache/derby/derby/maven-metadata.xml" ) );
}
}

+ 16
- 0
archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java Просмотреть файл

@@ -19,8 +19,10 @@ package org.apache.maven.archiva.consumers;
* under the License.
*/

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
@@ -34,6 +36,15 @@ public abstract class AbstractMonitoredConsumer
{
private Set<ConsumerMonitor> monitors = new HashSet<ConsumerMonitor>();

/**
* Default exclusions from artifact consumers that are using the file types. Note that this is simplistic in the
* case of the support files (based on extension) as it is elsewhere - it may be better to match these to actual
* artifacts and exclude later during scanning.
*/
private static final List<String> DEFAULT_EXCLUSIONS = Arrays.asList( "**/maven-metadata.xml",
"**/maven-metadata-*.xml", "**/*.sha1",
"**/*.asc", "**/*.md5", "**/*.pgp" );

public void addConsumerMonitor( ConsumerMonitor monitor )
{
monitors.add( monitor );
@@ -96,4 +107,9 @@ public abstract class AbstractMonitoredConsumer
{
return false;
}

protected List<String> getDefaultArtifactExclusions()
{
return DEFAULT_EXCLUSIONS;
}
}

+ 1
- 1
archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java Просмотреть файл

@@ -126,7 +126,7 @@ public class ArtifactMissingChecksumsConsumer

public List<String> getExcludes()
{
return null;
return getDefaultArtifactExclusions();
}

public List<String> getIncludes()

+ 1
- 1
archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/MetadataUpdaterConsumer.java Просмотреть файл

@@ -149,7 +149,7 @@ public class MetadataUpdaterConsumer

public List<String> getExcludes()
{
return null;
return getDefaultArtifactExclusions();
}

public List<String> getIncludes()

+ 1
- 1
archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java Просмотреть файл

@@ -125,7 +125,7 @@ public class RepositoryPurgeConsumer

public List<String> getExcludes()
{
return null;
return getDefaultArtifactExclusions();
}

public List<String> getIncludes()

+ 76
- 0
archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/AbstractArtifactConsumerTest.java Просмотреть файл

@@ -0,0 +1,76 @@
package org.apache.maven.archiva.consumers.core;

/*
* 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.
*/

import org.apache.maven.archiva.common.utils.BaseFile;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.FileType;
import org.apache.maven.archiva.configuration.FileTypes;
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.maven.archiva.repository.scanner.functors.ConsumerWantsFilePredicate;
import org.codehaus.plexus.spring.PlexusInSpringTestCase;

import java.io.File;

public abstract class AbstractArtifactConsumerTest
extends PlexusInSpringTestCase
{
private File repoLocation;

protected KnownRepositoryContentConsumer consumer;

protected void setUp()
throws Exception
{
super.setUp();

ArchivaConfiguration archivaConfiguration = (ArchivaConfiguration) lookup( ArchivaConfiguration.ROLE );
FileType fileType =
(FileType) archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 );
assertEquals( FileTypes.ARTIFACTS, fileType.getId() );
fileType.addPattern( "**/*.xml" );

repoLocation = getTestFile( "target/test-" + getName() + "/test-repo" );
}

public void testConsumption()
{
File localFile =
new File( repoLocation, "org/apache/maven/plugins/maven-plugin-plugin/2.4.1/maven-metadata.xml" );

ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate();
BaseFile baseFile = new BaseFile( repoLocation, localFile );
predicate.setBasefile( baseFile );

assertFalse( predicate.evaluate( consumer ) );
}

public void testConsumptionOfOtherMetadata()
{
File localFile =
new File( repoLocation, "org/apache/maven/plugins/maven-plugin-plugin/2.4.1/maven-metadata-central.xml" );

ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate();
BaseFile baseFile = new BaseFile( repoLocation, localFile );
predicate.setBasefile( baseFile );

assertFalse( predicate.evaluate( consumer ) );
}
}

+ 35
- 0
archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java Просмотреть файл

@@ -0,0 +1,35 @@
package org.apache.maven.archiva.consumers.core;

/*
* 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.
*/

import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;

public class ArtifactMissingChecksumsConsumerTest
extends AbstractArtifactConsumerTest
{
protected void setUp()
throws Exception
{
super.setUp();

consumer = (ArtifactMissingChecksumsConsumer) lookup( KnownRepositoryContentConsumer.class.getName(),
"create-missing-checksums" );
}
}

+ 35
- 0
archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/MetadataUpdateConsumerTest.java Просмотреть файл

@@ -0,0 +1,35 @@
package org.apache.maven.archiva.consumers.core;

/*
* 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.
*/

import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;

public class MetadataUpdateConsumerTest
extends AbstractArtifactConsumerTest
{
protected void setUp()
throws Exception
{
super.setUp();

consumer = (KnownRepositoryContentConsumer) lookup( KnownRepositoryContentConsumer.class.getName(),
"metadata-updater" );
}
}

+ 5
- 5
archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java Просмотреть файл

@@ -19,6 +19,10 @@ package org.apache.maven.archiva.consumers.core.repository;
* under the License.
*/

import org.apache.commons.lang.time.DateUtils;
import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexStub;
import org.apache.maven.archiva.indexer.RepositoryContentIndex;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -27,10 +31,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.time.DateUtils;
import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexStub;
import org.apache.maven.archiva.indexer.RepositoryContentIndex;

/**
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
*/
@@ -270,5 +270,5 @@ public class DaysOldRepositoryPurgeTest
versions.add( "2.2-SNAPSHOT" );

populateDb( "org.apache.maven.plugins", "maven-install-plugin", versions );
}
}
}

+ 45
- 1
archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java Просмотреть файл

@@ -20,12 +20,16 @@ package org.apache.maven.archiva.consumers.core.repository;
*/

import org.apache.commons.io.FileUtils;
import org.apache.maven.archiva.common.utils.BaseFile;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.FileType;
import org.apache.maven.archiva.configuration.FileTypes;
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexFactoryStub;
import org.apache.maven.archiva.database.ArchivaDatabaseException;
import org.apache.maven.archiva.repository.scanner.functors.ConsumerWantsFilePredicate;
import org.custommonkey.xmlunit.XMLAssert;

import java.io.File;
@@ -38,6 +42,46 @@ import java.util.List;
public class RepositoryPurgeConsumerTest
extends AbstractRepositoryPurgeTest
{
public void testConsumption()
throws Exception
{
assertNotConsumed( "org/apache/maven/plugins/maven-plugin-plugin/2.4.1/maven-metadata.xml" );
}

public void testConsumptionOfOtherMetadata()
throws Exception
{
assertNotConsumed( "org/apache/maven/plugins/maven-plugin-plugin/2.4.1/maven-metadata-central.xml" );
}

private void assertNotConsumed( String path )
throws Exception
{
ArchivaConfiguration archivaConfiguration = (ArchivaConfiguration) lookup( ArchivaConfiguration.ROLE );
FileType fileType =
(FileType) archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 );
assertEquals( FileTypes.ARTIFACTS, fileType.getId() );
fileType.addPattern( "**/*.xml" );

// trigger reload
FileTypes fileTypes = (FileTypes) lookup( FileTypes.class );
fileTypes.afterConfigurationChange( null, "repositoryScanning.fileTypes", null );

KnownRepositoryContentConsumer repoPurgeConsumer =
(KnownRepositoryContentConsumer) lookup( KnownRepositoryContentConsumer.class, "repository-purge" );

File repoLocation = getTestFile( "target/test-" + getName() + "/test-repo" );

File localFile =
new File( repoLocation, path );

ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate();
BaseFile baseFile = new BaseFile( repoLocation, localFile );
predicate.setBasefile( baseFile );

assertFalse( predicate.evaluate( repoPurgeConsumer ) );
}

private void setLastModified( String path )
{
File dir = new File( path );
@@ -168,7 +212,7 @@ public class RepositoryPurgeConsumerTest

/**
* Test the snapshot clean consumer on a repository set to NOT clean/delete snapshots based on released versions.
*
*
* @throws Exception
*/
public void testReleasedSnapshotsWereNotCleaned()

+ 4
- 0
archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml Просмотреть файл

@@ -44,6 +44,7 @@
</requirement>
<requirement>
<role>org.apache.maven.archiva.configuration.FileTypes</role>
<role-hint>retention-count</role-hint>
</requirement>
<requirement>
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
@@ -101,6 +102,7 @@
</component>
<component>
<role>org.apache.maven.archiva.configuration.FileTypes</role>
<role-hint>retention-count</role-hint>
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
<requirements>
<requirement>
@@ -134,6 +136,7 @@
</requirement>
<requirement>
<role>org.apache.maven.archiva.configuration.FileTypes</role>
<role-hint>days-old</role-hint>
</requirement>
<requirement>
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
@@ -191,6 +194,7 @@
</component>
<component>
<role>org.apache.maven.archiva.configuration.FileTypes</role>
<role-hint>days-old</role-hint>
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
<requirements>
<requirement>

+ 5
- 0
archiva-base/archiva-consumers/archiva-database-consumers/pom.xml Просмотреть файл

@@ -53,5 +53,10 @@
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-digest</artifactId>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

+ 1
- 1
archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java Просмотреть файл

@@ -128,7 +128,7 @@ public class ArtifactUpdateDatabaseConsumer

public List<String> getExcludes()
{
return null;
return getDefaultArtifactExclusions();
}

public List<String> getIncludes()

+ 79
- 0
archiva-base/archiva-consumers/archiva-database-consumers/src/test/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumerTest.java Просмотреть файл

@@ -0,0 +1,79 @@
package org.apache.maven.archiva.consumers.database;

/*
* 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.
*/

import org.apache.maven.archiva.common.utils.BaseFile;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.FileType;
import org.apache.maven.archiva.configuration.FileTypes;
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.maven.archiva.repository.scanner.functors.ConsumerWantsFilePredicate;
import org.codehaus.plexus.spring.PlexusInSpringTestCase;

import java.io.File;

public class ArtifactUpdateDatabaseConsumerTest
extends PlexusInSpringTestCase
{
private File repoLocation;

protected KnownRepositoryContentConsumer consumer;

protected void setUp()
throws Exception
{
super.setUp();

ArchivaConfiguration archivaConfiguration = (ArchivaConfiguration) lookup( ArchivaConfiguration.ROLE );
FileType fileType =
(FileType) archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 );
assertEquals( FileTypes.ARTIFACTS, fileType.getId() );
fileType.addPattern( "**/*.xml" );

repoLocation = getTestFile( "target/test-" + getName() + "/test-repo" );

consumer =
(KnownRepositoryContentConsumer) lookup( KnownRepositoryContentConsumer.class, "update-db-artifact" );
}

public void testConsumption()
{
File localFile =
new File( repoLocation, "org/apache/maven/plugins/maven-plugin-plugin/2.4.1/maven-metadata.xml" );

ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate();
BaseFile baseFile = new BaseFile( repoLocation, localFile );
predicate.setBasefile( baseFile );

assertFalse( predicate.evaluate( consumer ) );
}

public void testConsumptionOfOtherMetadata()
{
File localFile =
new File( repoLocation, "org/apache/maven/plugins/maven-plugin-plugin/2.4.1/maven-metadata-central.xml" );

ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate();
BaseFile baseFile = new BaseFile( repoLocation, localFile );
predicate.setBasefile( baseFile );

assertFalse( predicate.evaluate( consumer ) );
}
}

+ 56
- 0
archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumerTest.xml Просмотреть файл

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
~ 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.
-->

<component-set>
<components>
<!-- JdoAccess -->
<component>
<role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
<role-hint>archiva</role-hint>
<implementation>org.apache.maven.archiva.database.jdo.JdoAccess</implementation>
<requirements>
<requirement>
<role>org.codehaus.plexus.jdo.JdoFactory</role>
<role-hint>archiva</role-hint>
</requirement>
</requirements>
</component>

<!-- JDO Factory -->
<component>
<role>org.codehaus.plexus.jdo.JdoFactory</role>
<role-hint>archiva</role-hint>
<implementation>org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory</implementation>
<configuration>
<persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>
<driverName>org.hsqldb.jdbcDriver</driverName>
<userName>sa</userName>
<password></password>
<url>jdbc:hsqldb:mem:testdb</url>
<otherProperties>
<property>
<name>javax.jdo.PersistenceManagerFactoryClass</name>
<value>org.jpox.PersistenceManagerFactoryImpl</value>
</property>
</otherProperties>
</configuration>
</component>
</components>
</component-set>

+ 4
- 50
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ManagedDefaultRepositoryContent.java Просмотреть файл

@@ -30,16 +30,10 @@ import org.apache.maven.archiva.model.VersionedReference;
import org.apache.maven.archiva.repository.ContentNotFoundException;
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.util.SelectorUtils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
@@ -55,7 +49,7 @@ import java.util.Set;
*/
public class ManagedDefaultRepositoryContent
extends AbstractDefaultRepositoryContent
implements ManagedRepositoryContent, Initializable
implements ManagedRepositoryContent
{
/**
* @plexus.requirement
@@ -64,8 +58,6 @@ public class ManagedDefaultRepositoryContent

private ManagedRepositoryConfiguration repository;

private List<String> artifactPatterns;

public void deleteVersion( VersionedReference reference )
throws ContentNotFoundException
{
@@ -123,7 +115,7 @@ public class ManagedDefaultRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
ArtifactReference artifact = toArtifactReference( relativePath );
@@ -250,7 +242,7 @@ public class ManagedDefaultRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
ArtifactReference artifact = toArtifactReference( relativePath );

@@ -300,13 +292,6 @@ public class ManagedDefaultRepositoryContent
}
}

public void initialize()
throws InitializationException
{
this.artifactPatterns = new ArrayList<String>();
initVariables();
}

public void setRepository( ManagedRepositoryConfiguration repository )
{
this.repository = repository;
@@ -386,7 +371,7 @@ public class ManagedDefaultRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
ArtifactReference artifact = toArtifactReference( relativePath );

@@ -410,35 +395,4 @@ public class ManagedDefaultRepositoryContent
return false;
}
}

private void initVariables()
{
synchronized ( this.artifactPatterns )
{
this.artifactPatterns.clear();

this.artifactPatterns.addAll( filetypes.getFileTypePatterns( FileTypes.ARTIFACTS ) );
}
}

private boolean matchesArtifactPattern( String relativePath )
{
// Correct the slash pattern.
relativePath = relativePath.replace( '\\', '/' );

Iterator<String> it = this.artifactPatterns.iterator();
while ( it.hasNext() )
{
String pattern = it.next();

if ( SelectorUtils.matchPath( pattern, relativePath, false ) )
{
// Found match
return true;
}
}

// No match.
return false;
}
}

+ 5
- 51
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ManagedLegacyRepositoryContent.java Просмотреть файл

@@ -31,15 +31,9 @@ import org.apache.maven.archiva.model.VersionedReference;
import org.apache.maven.archiva.repository.ContentNotFoundException;
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.util.SelectorUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
@@ -55,7 +49,7 @@ import java.util.Set;
*/
public class ManagedLegacyRepositoryContent
extends AbstractLegacyRepositoryContent
implements ManagedRepositoryContent, Initializable
implements ManagedRepositoryContent
{
/**
* @plexus.requirement
@@ -64,8 +58,6 @@ public class ManagedLegacyRepositoryContent

private ManagedRepositoryConfiguration repository;

private List<String> artifactPatterns;

public void deleteVersion( VersionedReference reference )
throws ContentNotFoundException
{
@@ -115,7 +107,7 @@ public class ManagedLegacyRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
try
{
@@ -321,13 +313,6 @@ public class ManagedLegacyRepositoryContent
}
}

public void initialize()
throws InitializationException
{
this.artifactPatterns = new ArrayList<String>();
initVariables();
}

public void setRepository( ManagedRepositoryConfiguration repository )
{
this.repository = repository;
@@ -386,7 +371,7 @@ public class ManagedLegacyRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
try
{
@@ -417,7 +402,7 @@ public class ManagedLegacyRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
try
{
@@ -449,7 +434,7 @@ public class ManagedLegacyRepositoryContent

String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
try
{
@@ -467,35 +452,4 @@ public class ManagedLegacyRepositoryContent
}
}
}

private void initVariables()
{
synchronized ( this.artifactPatterns )
{
this.artifactPatterns.clear();

this.artifactPatterns.addAll( filetypes.getFileTypePatterns( FileTypes.ARTIFACTS ) );
}
}

private boolean matchesArtifactPattern( String relativePath )
{
// Correct the slash pattern.
relativePath = relativePath.replace( '\\', '/' );

Iterator<String> it = this.artifactPatterns.iterator();
while ( it.hasNext() )
{
String pattern = it.next();

if ( SelectorUtils.matchPath( pattern, relativePath, false ) )
{
// Found match
return true;
}
}

// No match.
return false;
}
}

+ 0
- 70
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/RepositoryRequest.java Просмотреть файл

@@ -26,15 +26,6 @@ import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.apache.maven.archiva.repository.metadata.MetadataTools;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.registry.RegistryListener;
import org.codehaus.plexus.util.SelectorUtils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* RepositoryRequest is used to determine the type of request that is incoming, and convert it to an appropriate
@@ -47,7 +38,6 @@ import java.util.List;
* role="org.apache.maven.archiva.repository.content.RepositoryRequest"
*/
public class RepositoryRequest
implements RegistryListener, Initializable
{
/**
* @plexus.requirement
@@ -69,35 +59,6 @@ public class RepositoryRequest
*/
private PathParser legacyPathParser;

private List<String> artifactPatterns;

/**
* Test path to see if it is an artifact being requested (or not).
*
* @param requestedPath the path to test.
* @return true if it is an artifact being requested.
*/
public boolean isArtifact( String requestedPath )
{
// Correct the slash pattern.
String relativePath = requestedPath.replace( '\\', '/' );

Iterator<String> it = this.artifactPatterns.iterator();
while ( it.hasNext() )
{
String pattern = it.next();

if ( SelectorUtils.matchPath( pattern, relativePath, false ) )
{
// Found match
return true;
}
}

// No match.
return false;
}

/**
* Takes an incoming requested path (in "/" format) and gleans the layout
* and ArtifactReference appropriate for that content.
@@ -282,35 +243,4 @@ public class RepositoryRequest
String adjustedPath = repository.toPath( ref );
return adjustedPath + supportfile;
}

public void initialize()
throws InitializationException
{
this.artifactPatterns = new ArrayList<String>();
initVariables();
this.archivaConfiguration.addChangeListener( this );
}

private void initVariables()
{
synchronized ( this.artifactPatterns )
{
this.artifactPatterns.clear();
this.artifactPatterns.addAll( filetypes.getFileTypePatterns( FileTypes.ARTIFACTS ) );
}
}

public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
if ( propertyName.contains( "fileType" ) )
{
initVariables();
}
}

public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
/* nothing to do */

}
}

+ 1
- 23
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java Просмотреть файл

@@ -45,7 +45,6 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.registry.RegistryListener;
import org.codehaus.plexus.util.SelectorUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@@ -799,7 +798,7 @@ public class MetadataTools

String relativePath = PathUtil.getRelative( managedRepository.getRepoRoot(), repoFiles[i] );

if ( matchesArtifactPattern( relativePath ) )
if ( filetypes.matchesArtifactPattern( relativePath ) )
{
ArtifactReference artifact = managedRepository.toArtifactReference( relativePath );

@@ -810,25 +809,4 @@ public class MetadataTools
// No artifact was found.
return null;
}

private boolean matchesArtifactPattern( String relativePath )
{
// Correct the slash pattern.
relativePath = relativePath.replace( '\\', '/' );

Iterator<String> it = this.artifactPatterns.iterator();
while ( it.hasNext() )
{
String pattern = it.next();

if ( SelectorUtils.matchPath( pattern, relativePath, false ) )
{
// Found match
return true;
}
}

// No match.
return false;
}
}

+ 0
- 14
archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/RepositoryRequestTest.java Просмотреть файл

@@ -209,20 +209,6 @@ public class RepositoryRequestTest
"org.apache.archiva.test", "redonkulous", "3.1-beta-1-20050831.101112-42", null, "jar" );
}

public void testIsArtifact()
{
assertTrue( repoRequest.isArtifact( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom" ) );
assertTrue( repoRequest.isArtifact( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.jar" ) );
assertTrue( repoRequest.isArtifact( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz" ) );

assertFalse( repoRequest.isArtifact( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.sha1" ) );
assertFalse( repoRequest.isArtifact( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.md5" ) );
assertFalse( repoRequest.isArtifact( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.asc" ) );
assertFalse( repoRequest.isArtifact( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.pgp" ) );
assertFalse( repoRequest.isArtifact( "org/apache/derby/derby/10.2.2.0/maven-metadata.xml" ) );
assertFalse( repoRequest.isArtifact( "org/apache/derby/derby/maven-metadata.xml" ) );
}

public void testIsSupportFile()
{
assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.sha1" ) );

+ 1
- 0
archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArtifactCountConsumer.java Просмотреть файл

@@ -52,6 +52,7 @@ public class ArtifactCountConsumer

public ArtifactCountConsumer()
{
// TODO: shouldn't this use filetypes?
includes = new ArrayList();
includes.add( "**/*.pom" );
includes.add( "**/*.jar" );

+ 1
- 0
archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/DuplicateArtifactsConsumer.java Просмотреть файл

@@ -90,6 +90,7 @@ public class DuplicateArtifactsConsumer
*/
private RepositoryContentFactory repositoryFactory;

// TODO: why is this not used? If it should be, what about excludes?
private List<String> includes = new ArrayList<String>();

public String getId()

+ 1
- 0
archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/LocationArtifactsConsumer.java Просмотреть файл

@@ -101,6 +101,7 @@ public class LocationArtifactsConsumer

private Map repositoryMap = new HashMap();

// TODO: why is this not used? If it should be, what about excludes?
private List<String> includes = new ArrayList<String>();

public String getId()

Загрузка…
Отмена
Сохранить