mirror of https://github.com/apache/archiva.git
[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
This commit is contained in:
parent
7976dca5f6
commit
e26eac7e06
|
@ -34,8 +34,11 @@ import org.apache.maven.archiva.configuration.functors.FiletypeSelectionPredicat
|
||||||
import org.apache.maven.archiva.configuration.io.registry.ConfigurationRegistryReader;
|
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.Initializable;
|
||||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
|
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.RegistryException;
|
||||||
|
import org.codehaus.plexus.registry.RegistryListener;
|
||||||
import org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry;
|
import org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry;
|
||||||
|
import org.codehaus.plexus.util.SelectorUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -48,7 +51,7 @@ import org.slf4j.LoggerFactory;
|
||||||
* @plexus.component role="org.apache.maven.archiva.configuration.FileTypes"
|
* @plexus.component role="org.apache.maven.archiva.configuration.FileTypes"
|
||||||
*/
|
*/
|
||||||
public class FileTypes
|
public class FileTypes
|
||||||
implements Initializable
|
implements Initializable, RegistryListener
|
||||||
{
|
{
|
||||||
private Logger log = LoggerFactory.getLogger(FileTypes.class);
|
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 Map<String, List<String>> defaultTypeMap = new HashMap<String, List<String>>();
|
||||||
|
|
||||||
|
private List<String> artifactPatterns;
|
||||||
|
|
||||||
|
public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )
|
||||||
|
{
|
||||||
|
this.archivaConfiguration = archivaConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Get the list of patterns for a specified filetype.
|
* Get the list of patterns for a specified filetype.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* You will always get a list. In this order.
|
* You will always get a list. In this order.
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -83,7 +93,7 @@ public class FileTypes
|
||||||
* <li>A single item list of <code>"**<span>/</span>*"</code></li>
|
* <li>A single item list of <code>"**<span>/</span>*"</code></li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param id the id to lookup.
|
* @param id the id to lookup.
|
||||||
* @return the list of patterns.
|
* @return the list of patterns.
|
||||||
*/
|
*/
|
||||||
|
@ -109,11 +119,33 @@ public class FileTypes
|
||||||
return defaultPatterns;
|
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()
|
public void initialize()
|
||||||
throws InitializationException
|
throws InitializationException
|
||||||
{
|
{
|
||||||
/* Initialize Default Type Map */
|
// TODO: why is this done by hand?
|
||||||
defaultTypeMap.clear();
|
|
||||||
|
|
||||||
String errMsg = "Unable to load default archiva configuration for FileTypes: ";
|
String errMsg = "Unable to load default archiva configuration for FileTypes: ";
|
||||||
|
|
||||||
|
@ -132,19 +164,7 @@ public class FileTypes
|
||||||
ConfigurationRegistryReader configReader = new ConfigurationRegistryReader();
|
ConfigurationRegistryReader configReader = new ConfigurationRegistryReader();
|
||||||
Configuration defaultConfig = configReader.read( commonsRegistry );
|
Configuration defaultConfig = configReader.read( commonsRegistry );
|
||||||
|
|
||||||
// Store the default file type declaration.
|
initialiseTypeMap( defaultConfig );
|
||||||
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 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch ( RegistryException e )
|
catch ( RegistryException e )
|
||||||
{
|
{
|
||||||
|
@ -166,5 +186,41 @@ public class FileTypes
|
||||||
{
|
{
|
||||||
throw new InitializationException( errMsg + e.getMessage(), e );
|
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 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" ) );
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,8 +19,10 @@ package org.apache.maven.archiva.consumers;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,6 +36,15 @@ public abstract class AbstractMonitoredConsumer
|
||||||
{
|
{
|
||||||
private Set<ConsumerMonitor> monitors = new HashSet<ConsumerMonitor>();
|
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 )
|
public void addConsumerMonitor( ConsumerMonitor monitor )
|
||||||
{
|
{
|
||||||
monitors.add( monitor );
|
monitors.add( monitor );
|
||||||
|
@ -96,4 +107,9 @@ public abstract class AbstractMonitoredConsumer
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected List<String> getDefaultArtifactExclusions()
|
||||||
|
{
|
||||||
|
return DEFAULT_EXCLUSIONS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ public class ArtifactMissingChecksumsConsumer
|
||||||
|
|
||||||
public List<String> getExcludes()
|
public List<String> getExcludes()
|
||||||
{
|
{
|
||||||
return null;
|
return getDefaultArtifactExclusions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getIncludes()
|
public List<String> getIncludes()
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class MetadataUpdaterConsumer
|
||||||
|
|
||||||
public List<String> getExcludes()
|
public List<String> getExcludes()
|
||||||
{
|
{
|
||||||
return null;
|
return getDefaultArtifactExclusions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getIncludes()
|
public List<String> getIncludes()
|
||||||
|
|
|
@ -125,7 +125,7 @@ public class RepositoryPurgeConsumer
|
||||||
|
|
||||||
public List<String> getExcludes()
|
public List<String> getExcludes()
|
||||||
{
|
{
|
||||||
return null;
|
return getDefaultArtifactExclusions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getIncludes()
|
public List<String> getIncludes()
|
||||||
|
|
|
@ -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 ) );
|
||||||
|
}
|
||||||
|
}
|
|
@ -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" );
|
||||||
|
}
|
||||||
|
}
|
|
@ -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" );
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,10 @@ package org.apache.maven.archiva.consumers.core.repository;
|
||||||
* under the License.
|
* 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.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -27,10 +31,6 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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>
|
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
|
||||||
*/
|
*/
|
||||||
|
@ -270,5 +270,5 @@ public class DaysOldRepositoryPurgeTest
|
||||||
versions.add( "2.2-SNAPSHOT" );
|
versions.add( "2.2-SNAPSHOT" );
|
||||||
|
|
||||||
populateDb( "org.apache.maven.plugins", "maven-install-plugin", versions );
|
populateDb( "org.apache.maven.plugins", "maven-install-plugin", versions );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,16 @@ package org.apache.maven.archiva.consumers.core.repository;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
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.ArchivaConfiguration;
|
||||||
import org.apache.maven.archiva.configuration.Configuration;
|
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.configuration.ManagedRepositoryConfiguration;
|
||||||
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
|
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
|
||||||
import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexFactoryStub;
|
import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexFactoryStub;
|
||||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||||
|
import org.apache.maven.archiva.repository.scanner.functors.ConsumerWantsFilePredicate;
|
||||||
import org.custommonkey.xmlunit.XMLAssert;
|
import org.custommonkey.xmlunit.XMLAssert;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -38,6 +42,46 @@ import java.util.List;
|
||||||
public class RepositoryPurgeConsumerTest
|
public class RepositoryPurgeConsumerTest
|
||||||
extends AbstractRepositoryPurgeTest
|
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 )
|
private void setLastModified( String path )
|
||||||
{
|
{
|
||||||
File dir = new File( 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.
|
* Test the snapshot clean consumer on a repository set to NOT clean/delete snapshots based on released versions.
|
||||||
*
|
*
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public void testReleasedSnapshotsWereNotCleaned()
|
public void testReleasedSnapshotsWereNotCleaned()
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
</requirement>
|
</requirement>
|
||||||
<requirement>
|
<requirement>
|
||||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||||
|
<role-hint>retention-count</role-hint>
|
||||||
</requirement>
|
</requirement>
|
||||||
<requirement>
|
<requirement>
|
||||||
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
|
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
|
||||||
|
@ -101,6 +102,7 @@
|
||||||
</component>
|
</component>
|
||||||
<component>
|
<component>
|
||||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||||
|
<role-hint>retention-count</role-hint>
|
||||||
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
|
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
|
||||||
<requirements>
|
<requirements>
|
||||||
<requirement>
|
<requirement>
|
||||||
|
@ -134,6 +136,7 @@
|
||||||
</requirement>
|
</requirement>
|
||||||
<requirement>
|
<requirement>
|
||||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||||
|
<role-hint>days-old</role-hint>
|
||||||
</requirement>
|
</requirement>
|
||||||
<requirement>
|
<requirement>
|
||||||
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
|
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
|
||||||
|
@ -191,6 +194,7 @@
|
||||||
</component>
|
</component>
|
||||||
<component>
|
<component>
|
||||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||||
|
<role-hint>days-old</role-hint>
|
||||||
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
|
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
|
||||||
<requirements>
|
<requirements>
|
||||||
<requirement>
|
<requirement>
|
||||||
|
|
|
@ -53,5 +53,10 @@
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
<artifactId>plexus-digest</artifactId>
|
<artifactId>plexus-digest</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>hsqldb</groupId>
|
||||||
|
<artifactId>hsqldb</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -128,7 +128,7 @@ public class ArtifactUpdateDatabaseConsumer
|
||||||
|
|
||||||
public List<String> getExcludes()
|
public List<String> getExcludes()
|
||||||
{
|
{
|
||||||
return null;
|
return getDefaultArtifactExclusions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getIncludes()
|
public List<String> getIncludes()
|
||||||
|
|
|
@ -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 ) );
|
||||||
|
}
|
||||||
|
}
|
|
@ -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>
|
|
@ -30,16 +30,10 @@ import org.apache.maven.archiva.model.VersionedReference;
|
||||||
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
||||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
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.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,7 +49,7 @@ import java.util.Set;
|
||||||
*/
|
*/
|
||||||
public class ManagedDefaultRepositoryContent
|
public class ManagedDefaultRepositoryContent
|
||||||
extends AbstractDefaultRepositoryContent
|
extends AbstractDefaultRepositoryContent
|
||||||
implements ManagedRepositoryContent, Initializable
|
implements ManagedRepositoryContent
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @plexus.requirement
|
* @plexus.requirement
|
||||||
|
@ -64,8 +58,6 @@ public class ManagedDefaultRepositoryContent
|
||||||
|
|
||||||
private ManagedRepositoryConfiguration repository;
|
private ManagedRepositoryConfiguration repository;
|
||||||
|
|
||||||
private List<String> artifactPatterns;
|
|
||||||
|
|
||||||
public void deleteVersion( VersionedReference reference )
|
public void deleteVersion( VersionedReference reference )
|
||||||
throws ContentNotFoundException
|
throws ContentNotFoundException
|
||||||
{
|
{
|
||||||
|
@ -123,7 +115,7 @@ public class ManagedDefaultRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||||
|
|
||||||
|
@ -250,7 +242,7 @@ public class ManagedDefaultRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
ArtifactReference artifact = toArtifactReference( 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 )
|
public void setRepository( ManagedRepositoryConfiguration repository )
|
||||||
{
|
{
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
|
@ -386,7 +371,7 @@ public class ManagedDefaultRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||||
|
|
||||||
|
@ -410,35 +395,4 @@ public class ManagedDefaultRepositoryContent
|
||||||
return false;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,15 +31,9 @@ import org.apache.maven.archiva.model.VersionedReference;
|
||||||
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
||||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
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.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,7 +49,7 @@ import java.util.Set;
|
||||||
*/
|
*/
|
||||||
public class ManagedLegacyRepositoryContent
|
public class ManagedLegacyRepositoryContent
|
||||||
extends AbstractLegacyRepositoryContent
|
extends AbstractLegacyRepositoryContent
|
||||||
implements ManagedRepositoryContent, Initializable
|
implements ManagedRepositoryContent
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @plexus.requirement
|
* @plexus.requirement
|
||||||
|
@ -64,8 +58,6 @@ public class ManagedLegacyRepositoryContent
|
||||||
|
|
||||||
private ManagedRepositoryConfiguration repository;
|
private ManagedRepositoryConfiguration repository;
|
||||||
|
|
||||||
private List<String> artifactPatterns;
|
|
||||||
|
|
||||||
public void deleteVersion( VersionedReference reference )
|
public void deleteVersion( VersionedReference reference )
|
||||||
throws ContentNotFoundException
|
throws ContentNotFoundException
|
||||||
{
|
{
|
||||||
|
@ -115,7 +107,7 @@ public class ManagedLegacyRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -321,13 +313,6 @@ public class ManagedLegacyRepositoryContent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize()
|
|
||||||
throws InitializationException
|
|
||||||
{
|
|
||||||
this.artifactPatterns = new ArrayList<String>();
|
|
||||||
initVariables();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRepository( ManagedRepositoryConfiguration repository )
|
public void setRepository( ManagedRepositoryConfiguration repository )
|
||||||
{
|
{
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
|
@ -386,7 +371,7 @@ public class ManagedLegacyRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -417,7 +402,7 @@ public class ManagedLegacyRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -449,7 +434,7 @@ public class ManagedLegacyRepositoryContent
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
try
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,15 +26,6 @@ import org.apache.maven.archiva.model.ArtifactReference;
|
||||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||||
import org.apache.maven.archiva.repository.metadata.MetadataTools;
|
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
|
* 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"
|
* role="org.apache.maven.archiva.repository.content.RepositoryRequest"
|
||||||
*/
|
*/
|
||||||
public class RepositoryRequest
|
public class RepositoryRequest
|
||||||
implements RegistryListener, Initializable
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @plexus.requirement
|
* @plexus.requirement
|
||||||
|
@ -69,35 +59,6 @@ public class RepositoryRequest
|
||||||
*/
|
*/
|
||||||
private PathParser legacyPathParser;
|
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
|
* Takes an incoming requested path (in "/" format) and gleans the layout
|
||||||
* and ArtifactReference appropriate for that content.
|
* and ArtifactReference appropriate for that content.
|
||||||
|
@ -282,35 +243,4 @@ public class RepositoryRequest
|
||||||
String adjustedPath = repository.toPath( ref );
|
String adjustedPath = repository.toPath( ref );
|
||||||
return adjustedPath + supportfile;
|
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 */
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.personality.plexus.lifecycle.phase.InitializationException;
|
||||||
import org.codehaus.plexus.registry.Registry;
|
import org.codehaus.plexus.registry.Registry;
|
||||||
import org.codehaus.plexus.registry.RegistryListener;
|
import org.codehaus.plexus.registry.RegistryListener;
|
||||||
import org.codehaus.plexus.util.SelectorUtils;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -799,7 +798,7 @@ public class MetadataTools
|
||||||
|
|
||||||
String relativePath = PathUtil.getRelative( managedRepository.getRepoRoot(), repoFiles[i] );
|
String relativePath = PathUtil.getRelative( managedRepository.getRepoRoot(), repoFiles[i] );
|
||||||
|
|
||||||
if ( matchesArtifactPattern( relativePath ) )
|
if ( filetypes.matchesArtifactPattern( relativePath ) )
|
||||||
{
|
{
|
||||||
ArtifactReference artifact = managedRepository.toArtifactReference( relativePath );
|
ArtifactReference artifact = managedRepository.toArtifactReference( relativePath );
|
||||||
|
|
||||||
|
@ -810,25 +809,4 @@ public class MetadataTools
|
||||||
// No artifact was found.
|
// No artifact was found.
|
||||||
return null;
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,20 +209,6 @@ public class RepositoryRequestTest
|
||||||
"org.apache.archiva.test", "redonkulous", "3.1-beta-1-20050831.101112-42", null, "jar" );
|
"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()
|
public void testIsSupportFile()
|
||||||
{
|
{
|
||||||
assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.sha1" ) );
|
assertTrue( repoRequest.isSupportFile( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0-bin.tar.gz.sha1" ) );
|
||||||
|
|
|
@ -52,6 +52,7 @@ public class ArtifactCountConsumer
|
||||||
|
|
||||||
public ArtifactCountConsumer()
|
public ArtifactCountConsumer()
|
||||||
{
|
{
|
||||||
|
// TODO: shouldn't this use filetypes?
|
||||||
includes = new ArrayList();
|
includes = new ArrayList();
|
||||||
includes.add( "**/*.pom" );
|
includes.add( "**/*.pom" );
|
||||||
includes.add( "**/*.jar" );
|
includes.add( "**/*.jar" );
|
||||||
|
|
|
@ -90,6 +90,7 @@ public class DuplicateArtifactsConsumer
|
||||||
*/
|
*/
|
||||||
private RepositoryContentFactory repositoryFactory;
|
private RepositoryContentFactory repositoryFactory;
|
||||||
|
|
||||||
|
// TODO: why is this not used? If it should be, what about excludes?
|
||||||
private List<String> includes = new ArrayList<String>();
|
private List<String> includes = new ArrayList<String>();
|
||||||
|
|
||||||
public String getId()
|
public String getId()
|
||||||
|
|
|
@ -101,6 +101,7 @@ public class LocationArtifactsConsumer
|
||||||
|
|
||||||
private Map repositoryMap = new HashMap();
|
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>();
|
private List<String> includes = new ArrayList<String>();
|
||||||
|
|
||||||
public String getId()
|
public String getId()
|
||||||
|
|
Loading…
Reference in New Issue