mirror of https://github.com/apache/archiva.git
[MRM-432] Proxy Connectors are unable to download artifacts with alpha numerical version numbers
[MRM-519] fail to resolve artifactId for libs that contain versionKeyword in artifactId, like "maven-test-plugin" [MRM-518] Changing the internal repository directory has no effect [MRM-512] Unable to convert null repository config to archiva repository. [MRM-533] metadata-updater is changing lastUpdating timestamp when it shouldn't [MRM-493] Downloaded artifacts are stored in incorrect archiva-managed repository - Work against proposal in mailing list http://www.nabble.com/-Proposal--Repository-Layout-Detection-Interaction-Changes.-tf4577852.html - Creation of package org.apache.maven.archiva.repository.content - Creation of RepositoryContent alternative as outlined in proposal. - Have not swung all code over to new repositorycontent object yet. - Left old BidirectionalRepositoryLayout classes in place temporarily. - Migrated the following over to new RepositoryContent objects... * the /repository/ url * proxying * metadata updating * repository purge classes - Unit testing. Lots and lots of unit testing. - Correcting bad template email address. git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@583412 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
25bc854985
commit
e6bf512368
|
@ -22,7 +22,7 @@ package org.apache.maven.archiva.configuration;
|
|||
/**
|
||||
* ConfigurationEvent
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ConfigurationEvent
|
||||
|
|
|
@ -22,7 +22,7 @@ package org.apache.maven.archiva.configuration;
|
|||
/**
|
||||
* ConfigurationListener
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public interface ConfigurationListener
|
||||
|
|
|
@ -26,7 +26,7 @@ import java.util.Comparator;
|
|||
/**
|
||||
* ProxyConnectorConfigurationOrderComparator
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ProxyConnectorConfigurationOrderComparator
|
||||
|
|
|
@ -31,7 +31,7 @@ import junit.framework.TestCase;
|
|||
/**
|
||||
* ProxyConnectorConfigurationOrderComparatorTest
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ProxyConnectorConfigurationOrderComparatorTest
|
||||
|
|
|
@ -29,8 +29,12 @@ import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
|
|||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
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.RepositoryContentFactory;
|
||||
import org.apache.maven.archiva.repository.RepositoryException;
|
||||
import org.apache.maven.archiva.repository.RepositoryNotFoundException;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
import org.apache.maven.archiva.repository.metadata.MetadataTools;
|
||||
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
|
||||
|
@ -70,7 +74,7 @@ public class MetadataUpdaterConsumer
|
|||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||
private RepositoryContentFactory repositoryFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
|
@ -93,7 +97,7 @@ public class MetadataUpdaterConsumer
|
|||
|
||||
private static final String TYPE_METADATA_IO = "metadata-io-warning";
|
||||
|
||||
private ManagedRepositoryConfiguration repository;
|
||||
private ManagedRepositoryContent repository;
|
||||
|
||||
private File repositoryDir;
|
||||
|
||||
|
@ -118,22 +122,23 @@ public class MetadataUpdaterConsumer
|
|||
this.includes = includes;
|
||||
}
|
||||
|
||||
public void beginScan( ManagedRepositoryConfiguration repository )
|
||||
public void beginScan( ManagedRepositoryConfiguration repoConfig )
|
||||
throws ConsumerException
|
||||
{
|
||||
this.repository = repository;
|
||||
this.repositoryDir = new File( repository.getLocation() );
|
||||
try
|
||||
{
|
||||
this.repositoryLayout = layoutFactory.getLayout( repository.getLayout() );
|
||||
this.repository = repositoryFactory.getManagedRepositoryContent( repoConfig.getId() );
|
||||
this.repositoryDir = new File( repository.getRepoRoot() );
|
||||
this.scanStartTimestamp = System.currentTimeMillis();
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
catch ( RepositoryNotFoundException e )
|
||||
{
|
||||
throw new ConsumerException(
|
||||
"Cannot operate with bad layout definition on repo [" + repository.getId() + "]: " + e.getMessage(),
|
||||
e );
|
||||
throw new ConsumerException( e.getMessage(), e );
|
||||
}
|
||||
catch ( RepositoryException e )
|
||||
{
|
||||
throw new ConsumerException( e.getMessage(), e );
|
||||
}
|
||||
this.scanStartTimestamp = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void completeScan()
|
||||
|
@ -190,18 +195,24 @@ public class MetadataUpdaterConsumer
|
|||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
triggerConsumerWarning( TYPE_METADATA_BAD_INTERNAL_REF, "Unable to convert path [" + path +
|
||||
"] to an internal project reference: " + e.getMessage() );
|
||||
triggerConsumerWarning( TYPE_METADATA_BAD_INTERNAL_REF, "Unable to convert path [" + path
|
||||
+ "] to an internal project reference: " + e.getMessage() );
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
triggerConsumerError( TYPE_METADATA_WRITE_FAILURE,
|
||||
"Unable to write project metadata for artifact [" + path + "]: " + e.getMessage() );
|
||||
triggerConsumerError( TYPE_METADATA_WRITE_FAILURE, "Unable to write project metadata for artifact [" + path
|
||||
+ "]: " + e.getMessage() );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
triggerConsumerWarning( TYPE_METADATA_IO, "Project metadata not written due to IO warning: "
|
||||
+ e.getMessage() );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
triggerConsumerWarning( TYPE_METADATA_IO,
|
||||
"Project metadata not written due to IO warning: " + e.getMessage() );
|
||||
"Project metadata not written because no versions were found to update: "
|
||||
+ e.getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -230,18 +241,24 @@ public class MetadataUpdaterConsumer
|
|||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
triggerConsumerWarning( TYPE_METADATA_BAD_INTERNAL_REF, "Unable to convert path [" + path +
|
||||
"] to an internal version reference: " + e.getMessage() );
|
||||
triggerConsumerWarning( TYPE_METADATA_BAD_INTERNAL_REF, "Unable to convert path [" + path
|
||||
+ "] to an internal version reference: " + e.getMessage() );
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
triggerConsumerError( TYPE_METADATA_WRITE_FAILURE,
|
||||
"Unable to write version metadata for artifact [" + path + "]: " + e.getMessage() );
|
||||
triggerConsumerError( TYPE_METADATA_WRITE_FAILURE, "Unable to write version metadata for artifact [" + path
|
||||
+ "]: " + e.getMessage() );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
triggerConsumerWarning( TYPE_METADATA_IO, "Version metadata not written due to IO warning: "
|
||||
+ e.getMessage() );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
triggerConsumerWarning( TYPE_METADATA_IO,
|
||||
"Version metadata not written due to IO warning: " + e.getMessage() );
|
||||
"Version metadata not written because no versions were found to update: "
|
||||
+ e.getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,37 +19,33 @@ package org.apache.maven.archiva.consumers.core.repository;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||
import org.apache.maven.archiva.database.ArtifactDAO;
|
||||
import org.apache.maven.archiva.indexer.RepositoryIndexException;
|
||||
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.FilenameParts;
|
||||
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.layout.RepositoryLayoutUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Base class for all repository purge tasks.
|
||||
*
|
||||
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
|
||||
*/
|
||||
public abstract class AbstractRepositoryPurge
|
||||
implements RepositoryPurge
|
||||
{
|
||||
protected ManagedRepositoryConfiguration repository;
|
||||
|
||||
protected BidirectionalRepositoryLayout layout;
|
||||
protected ManagedRepositoryContent repository;
|
||||
|
||||
protected ArtifactDAO artifactDao;
|
||||
|
||||
public AbstractRepositoryPurge( ManagedRepositoryConfiguration repository, BidirectionalRepositoryLayout layout,
|
||||
ArtifactDAO artifactDao )
|
||||
public AbstractRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao )
|
||||
{
|
||||
this.repository = repository;
|
||||
this.layout = layout;
|
||||
this.artifactDao = artifactDao;
|
||||
}
|
||||
|
||||
|
@ -69,36 +65,82 @@ public abstract class AbstractRepositoryPurge
|
|||
return files;
|
||||
}
|
||||
|
||||
protected String toRelativePath( File artifactFile )
|
||||
{
|
||||
String artifactPath = artifactFile.getAbsolutePath();
|
||||
if ( artifactPath.startsWith( repository.getRepoRoot() ) )
|
||||
{
|
||||
artifactPath = artifactPath.substring( repository.getRepoRoot().length() );
|
||||
}
|
||||
|
||||
return artifactPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Purge the repo. Update db and index of removed artifacts.
|
||||
*
|
||||
* @param artifactFiles
|
||||
* @throws RepositoryIndexException
|
||||
*/
|
||||
protected void purge( File[] artifactFiles )
|
||||
protected void purge( Set<ArtifactReference> references )
|
||||
{
|
||||
for ( int i = 0; i < artifactFiles.length; i++ )
|
||||
for ( ArtifactReference reference : references )
|
||||
{
|
||||
artifactFiles[i].delete();
|
||||
File artifactFile = repository.toFile( reference );
|
||||
|
||||
String[] artifactPathParts = artifactFiles[i].getAbsolutePath().split( repository.getLocation() );
|
||||
String artifactPath = artifactPathParts[artifactPathParts.length - 1];
|
||||
if ( !artifactPath.toUpperCase().endsWith( "SHA1" ) && !artifactPath.toUpperCase().endsWith( "MD5" ) )
|
||||
System.err.println( "Purging: " + artifactFile.getAbsolutePath() );
|
||||
artifactFile.delete();
|
||||
purgeSupportFiles( artifactFile );
|
||||
|
||||
// intended to be swallowed
|
||||
// continue updating the database for all artifacts
|
||||
try
|
||||
{
|
||||
// intended to be swallowed
|
||||
// continue updating the database for all artifacts
|
||||
try
|
||||
{
|
||||
updateDatabase( artifactPath );
|
||||
}
|
||||
catch ( ArchivaDatabaseException ae )
|
||||
{
|
||||
//@todo determine logging to be used
|
||||
}
|
||||
catch ( LayoutException le )
|
||||
{
|
||||
String artifactPath = toRelativePath( artifactFile );
|
||||
updateDatabase( artifactPath );
|
||||
}
|
||||
catch ( ArchivaDatabaseException ae )
|
||||
{
|
||||
// TODO: determine logging to be used
|
||||
}
|
||||
catch ( LayoutException le )
|
||||
{
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* <p>
|
||||
* This find support files for the artifactFile and deletes them.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Support Files are things like ".sha1", ".md5", ".asc", etc.
|
||||
* </p>
|
||||
*
|
||||
* @param artifactFile the file to base off of.
|
||||
*/
|
||||
private void purgeSupportFiles( File artifactFile )
|
||||
{
|
||||
File parentDir = artifactFile.getParentFile();
|
||||
|
||||
if ( !parentDir.exists() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FilenameFilter filter = new ArtifactFilenameFilter( artifactFile.getName() );
|
||||
|
||||
File[] files = parentDir.listFiles( filter );
|
||||
|
||||
for ( File file : files )
|
||||
{
|
||||
if ( file.exists() && file.isFile() )
|
||||
{
|
||||
file.delete();
|
||||
System.err.println( "Deleting support file: " + file.getAbsolutePath() );
|
||||
// TODO: log that it was deleted?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,8 +148,7 @@ public abstract class AbstractRepositoryPurge
|
|||
private void updateDatabase( String path )
|
||||
throws ArchivaDatabaseException, LayoutException
|
||||
{
|
||||
|
||||
ArchivaArtifact artifact = layout.toArtifact( path );
|
||||
ArtifactReference artifact = repository.toArtifactReference( path );
|
||||
ArchivaArtifact queriedArtifact = artifactDao.getArtifact( artifact.getGroupId(), artifact.getArtifactId(),
|
||||
artifact.getVersion(), artifact.getClassifier(),
|
||||
artifact.getType() );
|
||||
|
@ -116,23 +157,4 @@ public abstract class AbstractRepositoryPurge
|
|||
|
||||
// TODO [MRM-37]: re-run the database consumers to clean up
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the artifactId, version, extension and classifier from the path parameter
|
||||
*
|
||||
* @param path
|
||||
* @return
|
||||
* @throws LayoutException
|
||||
*/
|
||||
protected FilenameParts getFilenameParts( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
String normalizedPath = StringUtils.replace( path, "\\", "/" );
|
||||
String pathParts[] = StringUtils.split( normalizedPath, '/' );
|
||||
|
||||
FilenameParts parts = RepositoryLayoutUtils.splitFilename( pathParts[pathParts.length - 1], null );
|
||||
|
||||
return parts;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,10 +41,9 @@ public class ArtifactFilenameFilter
|
|||
{
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
|
||||
public boolean accept( File dir, String name )
|
||||
{
|
||||
return ( name.startsWith( filename ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,29 +19,45 @@ package org.apache.maven.archiva.consumers.core.repository;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.maven.archiva.common.utils.VersionComparator;
|
||||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.database.ArtifactDAO;
|
||||
import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.FilenameParts;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
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.apache.maven.archiva.repository.metadata.MetadataTools;
|
||||
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
|
||||
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataReader;
|
||||
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataWriter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* M2 implementation for cleaning up the released snapshots.
|
||||
* <p>
|
||||
* This will look in a single managed repository, and purge any snapshots that are present
|
||||
* that have a corresponding released version on the same repository.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* So, if you have the following (presented in the m2/default layout form) ...
|
||||
* <pre>
|
||||
* /com/foo/foo-tool/1.0-SNAPSHOT/foo-tool-1.0-SNAPSHOT.jar
|
||||
* /com/foo/foo-tool/1.1-SNAPSHOT/foo-tool-1.1-SNAPSHOT.jar
|
||||
* /com/foo/foo-tool/1.2.1-SNAPSHOT/foo-tool-1.2.1-SNAPSHOT.jar
|
||||
* /com/foo/foo-tool/1.2.1/foo-tool-1.2.1.jar
|
||||
* /com/foo/foo-tool/2.0-SNAPSHOT/foo-tool-2.0-SNAPSHOT.jar
|
||||
* /com/foo/foo-tool/2.0/foo-tool-2.0.jar
|
||||
* /com/foo/foo-tool/2.1-SNAPSHOT/foo-tool-2.1-SNAPSHOT.jar
|
||||
* </pre>
|
||||
* then the current highest ranked released (non-snapshot) version is 2.0, which means
|
||||
* the snapshots from 1.0-SNAPSHOT, 1.1-SNAPSHOT, 1.2.1-SNAPSHOT, and 2.0-SNAPSHOT can
|
||||
* be purged. Leaving 2.1-SNAPSHOT in alone.
|
||||
* </p>
|
||||
*
|
||||
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
|
||||
* @version $Id$
|
||||
|
@ -49,15 +65,13 @@ import java.util.List;
|
|||
public class CleanupReleasedSnapshotsRepositoryPurge
|
||||
extends AbstractRepositoryPurge
|
||||
{
|
||||
public static final String SNAPSHOT = "-SNAPSHOT";
|
||||
private MetadataTools metadataTools;
|
||||
|
||||
private RepositoryMetadataReader metadataReader;
|
||||
|
||||
public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryConfiguration repository, BidirectionalRepositoryLayout layout,
|
||||
ArtifactDAO artifactDao )
|
||||
public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
|
||||
MetadataTools metadataTools )
|
||||
{
|
||||
super( repository, layout, artifactDao );
|
||||
metadataReader = new RepositoryMetadataReader();
|
||||
super( repository, artifactDao );
|
||||
this.metadataTools = metadataTools;
|
||||
}
|
||||
|
||||
public void process( String path )
|
||||
|
@ -65,126 +79,135 @@ public class CleanupReleasedSnapshotsRepositoryPurge
|
|||
{
|
||||
try
|
||||
{
|
||||
File artifactFile = new File( repository.getLocation(), path );
|
||||
File artifactFile = new File( repository.getRepoRoot(), path );
|
||||
|
||||
if ( !artifactFile.exists() )
|
||||
{
|
||||
// Nothing to do here, file doesn't exist, skip it.
|
||||
return;
|
||||
}
|
||||
|
||||
FilenameParts parts = getFilenameParts( path );
|
||||
ArtifactReference artifact = repository.toArtifactReference( path );
|
||||
|
||||
if ( VersionUtil.isSnapshot( parts.version ) )
|
||||
if ( !VersionUtil.isSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
// version
|
||||
File versionDir = artifactFile.getParentFile();
|
||||
// Nothing to do here, not a snapshot, skip it.
|
||||
return;
|
||||
}
|
||||
|
||||
// artifactID - scan for other versions
|
||||
File artifactIdDir = versionDir.getParentFile();
|
||||
ProjectReference reference = new ProjectReference();
|
||||
reference.setGroupId( artifact.getGroupId() );
|
||||
reference.setArtifactId( artifact.getArtifactId() );
|
||||
|
||||
boolean updated = false;
|
||||
// Gather up all of the versions.
|
||||
List<String> allVersions = new ArrayList<String>( repository.getVersions( reference ) );
|
||||
|
||||
List versions = getVersionsInDir( artifactIdDir );
|
||||
Collections.sort( versions, VersionComparator.getInstance() );
|
||||
for ( int j = 0; j < versions.size(); j++ )
|
||||
// Split the versions into released and snapshots.
|
||||
List<String> releasedVersions = new ArrayList<String>();
|
||||
List<String> snapshotVersions = new ArrayList<String>();
|
||||
|
||||
for ( String version : allVersions )
|
||||
{
|
||||
if ( VersionUtil.isSnapshot( version ) )
|
||||
{
|
||||
String version = (String) versions.get( j );
|
||||
|
||||
if ( VersionComparator.getInstance().compare( version, versionDir.getName() ) > 0 )
|
||||
{
|
||||
purge( versionDir.listFiles() );
|
||||
|
||||
FileUtils.deleteDirectory( versionDir );
|
||||
|
||||
updated = true;
|
||||
|
||||
break;
|
||||
}
|
||||
snapshotVersions.add( version );
|
||||
}
|
||||
|
||||
if ( updated )
|
||||
else
|
||||
{
|
||||
updateMetadata( artifactIdDir );
|
||||
releasedVersions.add( version );
|
||||
}
|
||||
}
|
||||
|
||||
Collections.sort( allVersions, VersionComparator.getInstance() );
|
||||
Collections.sort( releasedVersions, VersionComparator.getInstance() );
|
||||
Collections.sort( snapshotVersions, VersionComparator.getInstance() );
|
||||
|
||||
// Find out the highest released version.
|
||||
String highestReleasedVersion = allVersions.get( allVersions.size() - 1 );
|
||||
|
||||
// Now clean out any version that is earlier than the highest released version.
|
||||
boolean needsMetadataUpdate = false;
|
||||
|
||||
VersionedReference versionRef = new VersionedReference();
|
||||
versionRef.setGroupId( artifact.getGroupId() );
|
||||
versionRef.setArtifactId( artifact.getArtifactId() );
|
||||
|
||||
for ( String version : snapshotVersions )
|
||||
{
|
||||
if ( VersionComparator.getInstance().compare( version, highestReleasedVersion ) < 0 )
|
||||
{
|
||||
versionRef.setVersion( version );
|
||||
repository.deleteVersion( versionRef );
|
||||
needsMetadataUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( needsMetadataUpdate )
|
||||
{
|
||||
updateMetadata( artifact );
|
||||
}
|
||||
}
|
||||
catch ( LayoutException le )
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw new RepositoryPurgeException( le.getMessage() );
|
||||
throw new RepositoryPurgeException( e.getMessage(), e );
|
||||
}
|
||||
catch ( IOException ie )
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
throw new RepositoryPurgeException( ie.getMessage() );
|
||||
throw new RepositoryPurgeException( e.getMessage(), e );
|
||||
}
|
||||
}
|
||||
|
||||
private void updateMetadata( File artifactIdDir )
|
||||
throws RepositoryPurgeException
|
||||
private void updateMetadata( ArtifactReference artifact )
|
||||
{
|
||||
VersionedReference versionRef = new VersionedReference();
|
||||
versionRef.setGroupId( artifact.getGroupId() );
|
||||
versionRef.setArtifactId( artifact.getArtifactId() );
|
||||
versionRef.setVersion( artifact.getVersion() );
|
||||
|
||||
File[] metadataFiles = getFiles( artifactIdDir, "maven-metadata" );
|
||||
List availableVersions = getVersionsInDir( artifactIdDir );
|
||||
ProjectReference projectRef = new ProjectReference();
|
||||
projectRef.setGroupId( artifact.getGroupId() );
|
||||
projectRef.setArtifactId( artifact.getArtifactId() );
|
||||
|
||||
Collections.sort( availableVersions );
|
||||
|
||||
String latestReleased = getLatestReleased( availableVersions );
|
||||
for ( int i = 0; i < metadataFiles.length; i++ )
|
||||
try
|
||||
{
|
||||
if ( !( metadataFiles[i].getName().toUpperCase() ).endsWith( "SHA1" ) &&
|
||||
!( metadataFiles[i].getName().toUpperCase() ).endsWith( "MD5" ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
Date lastUpdated = new Date();
|
||||
ArchivaRepositoryMetadata metadata = metadataReader.read( metadataFiles[i] );
|
||||
metadata.setAvailableVersions( availableVersions );
|
||||
metadata.setLatestVersion( (String) availableVersions.get( availableVersions.size() - 1 ) );
|
||||
metadata.setReleasedVersion( latestReleased );
|
||||
metadata.setLastUpdatedTimestamp( lastUpdated );
|
||||
metadata.setLastUpdated( Long.toString( lastUpdated.getTime() ) );
|
||||
|
||||
RepositoryMetadataWriter.write( metadata, metadataFiles[i] );
|
||||
}
|
||||
catch ( RepositoryMetadataException rme )
|
||||
{
|
||||
// continue updating other metadata files even if there is an exception
|
||||
// @todo log to console
|
||||
}
|
||||
}
|
||||
metadataTools.updateMetadata( repository, versionRef );
|
||||
}
|
||||
}
|
||||
|
||||
private String getLatestReleased( List availableVersions )
|
||||
{
|
||||
List reversedOrder = new ArrayList( availableVersions );
|
||||
Collections.reverse( reversedOrder );
|
||||
String latestReleased = "";
|
||||
|
||||
for ( Iterator iter = reversedOrder.iterator(); iter.hasNext(); )
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
String version = (String) iter.next();
|
||||
if ( !VersionUtil.getBaseVersion( version ).endsWith( SNAPSHOT ) )
|
||||
{
|
||||
latestReleased = version;
|
||||
return latestReleased;
|
||||
}
|
||||
// Ignore. (Just means we have no snapshot versions left to reference).
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
// Ignore.
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
// Ignore.
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
// Ignore.
|
||||
}
|
||||
|
||||
return latestReleased;
|
||||
}
|
||||
|
||||
private List getVersionsInDir( File artifactIdDir )
|
||||
{
|
||||
String[] versionsAndMore = artifactIdDir.list();
|
||||
List versions = new ArrayList();
|
||||
for ( int j = 0; j < versionsAndMore.length; j++ )
|
||||
try
|
||||
{
|
||||
if ( VersionUtil.isVersion( versionsAndMore[j] ) )
|
||||
{
|
||||
versions.add( versionsAndMore[j] );
|
||||
}
|
||||
metadataTools.updateMetadata( repository, projectRef );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
// Ignore. (Just means we have no snapshot versions left to reference).
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
// Ignore.
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
// Ignore.
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
// Ignore.
|
||||
}
|
||||
|
||||
return versions;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,31 +19,43 @@ package org.apache.maven.archiva.consumers.core.repository;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.time.DateUtils;
|
||||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.database.ArtifactDAO;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.FilenameParts;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
/**
|
||||
* Purge repository for snapshots older than the specified days in the repository configuration.
|
||||
* Purge from repository all snapshots older than the specified days in the repository configuration.
|
||||
*
|
||||
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
|
||||
*/
|
||||
public class DaysOldRepositoryPurge
|
||||
extends AbstractRepositoryPurge
|
||||
{
|
||||
private static final SimpleDateFormat timestampParser;
|
||||
static
|
||||
{
|
||||
timestampParser = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
|
||||
timestampParser.setTimeZone( DateUtils.UTC_TIME_ZONE );
|
||||
}
|
||||
|
||||
private int daysOlder;
|
||||
|
||||
public DaysOldRepositoryPurge( ManagedRepositoryConfiguration repository, BidirectionalRepositoryLayout layout,
|
||||
ArtifactDAO artifactDao, int daysOlder )
|
||||
public DaysOldRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
|
||||
int daysOlder )
|
||||
{
|
||||
super( repository, layout, artifactDao );
|
||||
super( repository, artifactDao );
|
||||
this.daysOlder = daysOlder;
|
||||
}
|
||||
|
||||
|
@ -52,52 +64,40 @@ public class DaysOldRepositoryPurge
|
|||
{
|
||||
try
|
||||
{
|
||||
File artifactFile = new File( repository.getLocation(), path );
|
||||
File artifactFile = new File( repository.getRepoRoot(), path );
|
||||
|
||||
if ( !artifactFile.exists() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FilenameParts parts = getFilenameParts( path );
|
||||
ArtifactReference artifact = repository.toArtifactReference( path );
|
||||
|
||||
Calendar olderThanThisDate = Calendar.getInstance();
|
||||
Calendar olderThanThisDate = Calendar.getInstance( DateUtils.UTC_TIME_ZONE );
|
||||
olderThanThisDate.add( Calendar.DATE, -daysOlder );
|
||||
|
||||
if ( VersionUtil.isGenericSnapshot( parts.version ) )
|
||||
// Is this a generic snapshot "1.0-SNAPSHOT" ?
|
||||
if ( VersionUtil.isGenericSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
if ( artifactFile.lastModified() < olderThanThisDate.getTimeInMillis() )
|
||||
{
|
||||
doPurge( artifactFile, parts.extension );
|
||||
doPurgeAllRelated( artifactFile );
|
||||
}
|
||||
}
|
||||
else if ( VersionUtil.isUniqueSnapshot( parts.version ) )
|
||||
// Is this a timestamp snapshot "1.0-20070822.123456-42" ?
|
||||
else if ( VersionUtil.isUniqueSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
String[] versionParts = StringUtils.split( parts.version, '-' );
|
||||
String timestamp = StringUtils.remove( versionParts[1], '.' );
|
||||
int year = Integer.parseInt( StringUtils.substring( timestamp, 0, 4 ) );
|
||||
int month = Integer.parseInt( StringUtils.substring( timestamp, 4, 6 ) ) - 1;
|
||||
int day = Integer.parseInt( StringUtils.substring( timestamp, 6, 8 ) );
|
||||
int hour = Integer.parseInt( StringUtils.substring( timestamp, 8, 10 ) );
|
||||
int min = Integer.parseInt( StringUtils.substring( timestamp, 10, 12 ) );
|
||||
int sec = Integer.parseInt( StringUtils.substring( timestamp, 12 ) );
|
||||
Calendar timestampCal = uniqueSnapshotToCalendar( artifact.getVersion() );
|
||||
|
||||
Calendar timestampDate = Calendar.getInstance();
|
||||
timestampDate.set( year, month, day, hour, min, sec );
|
||||
|
||||
if ( timestampDate.getTimeInMillis() < olderThanThisDate.getTimeInMillis() )
|
||||
if ( timestampCal.getTimeInMillis() < olderThanThisDate.getTimeInMillis() )
|
||||
{
|
||||
doPurge( artifactFile, parts.extension );
|
||||
doPurgeAllRelated( artifactFile );
|
||||
}
|
||||
else
|
||||
else if ( artifactFile.lastModified() < olderThanThisDate.getTimeInMillis() )
|
||||
{
|
||||
if ( artifactFile.lastModified() < olderThanThisDate.getTimeInMillis() )
|
||||
{
|
||||
doPurge( artifactFile, parts.extension );
|
||||
}
|
||||
doPurgeAllRelated( artifactFile );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch ( LayoutException le )
|
||||
{
|
||||
|
@ -105,13 +105,52 @@ public class DaysOldRepositoryPurge
|
|||
}
|
||||
}
|
||||
|
||||
private void doPurge( File artifactFile, String extension )
|
||||
private Calendar uniqueSnapshotToCalendar( String version )
|
||||
{
|
||||
String[] fileParts = artifactFile.getName().split( "." + extension );
|
||||
// The latestVersion will contain the full version string "1.0-alpha-5-20070821.213044-8"
|
||||
// This needs to be broken down into ${base}-${timestamp}-${build_number}
|
||||
|
||||
File[] artifactFiles = getFiles( artifactFile.getParentFile(), fileParts[0] );
|
||||
Matcher m = VersionUtil.UNIQUE_SNAPSHOT_PATTERN.matcher( version );
|
||||
if ( m.matches() )
|
||||
{
|
||||
Matcher mtimestamp = VersionUtil.TIMESTAMP_PATTERN.matcher( m.group( 2 ) );
|
||||
if ( mtimestamp.matches() )
|
||||
{
|
||||
String tsDate = mtimestamp.group( 1 );
|
||||
String tsTime = mtimestamp.group( 2 );
|
||||
|
||||
purge( artifactFiles );
|
||||
Date versionDate;
|
||||
try
|
||||
{
|
||||
versionDate = timestampParser.parse( tsDate + "." + tsTime );
|
||||
Calendar cal = Calendar.getInstance( DateUtils.UTC_TIME_ZONE );
|
||||
cal.setTime( versionDate );
|
||||
|
||||
return cal;
|
||||
}
|
||||
catch ( ParseException e )
|
||||
{
|
||||
// Invalid Date/Time
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void doPurgeAllRelated( File artifactFile ) throws LayoutException
|
||||
{
|
||||
ArtifactReference reference = repository.toArtifactReference( artifactFile.getAbsolutePath() );
|
||||
|
||||
try
|
||||
{
|
||||
Set<ArtifactReference> related = repository.getRelatedArtifacts( reference );
|
||||
purge( related );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
// Nothing to do here.
|
||||
// TODO: Log this?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,9 +26,11 @@ import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
|
|||
import org.apache.maven.archiva.consumers.ConsumerException;
|
||||
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
|
||||
import org.apache.maven.archiva.database.ArchivaDAO;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.RepositoryContentFactory;
|
||||
import org.apache.maven.archiva.repository.RepositoryException;
|
||||
import org.apache.maven.archiva.repository.RepositoryNotFoundException;
|
||||
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;
|
||||
|
@ -42,9 +44,11 @@ import java.util.List;
|
|||
* specified by the user.
|
||||
*
|
||||
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
|
||||
* @plexus.component role="org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer"
|
||||
* role-hint="repository-purge"
|
||||
* instantiation-strategy="per-lookup
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer"
|
||||
* role-hint="repository-purge"
|
||||
* instantiation-strategy="per-lookup
|
||||
*/
|
||||
public class RepositoryPurgeConsumer
|
||||
extends AbstractMonitoredConsumer
|
||||
|
@ -65,16 +69,21 @@ public class RepositoryPurgeConsumer
|
|||
*/
|
||||
private ArchivaConfiguration configuration;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement role-hint="jdo"
|
||||
*/
|
||||
private ArchivaDAO dao;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private RepositoryContentFactory repositoryFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private MetadataTools metadataTools;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
|
@ -118,34 +127,35 @@ public class RepositoryPurgeConsumer
|
|||
public void beginScan( ManagedRepositoryConfiguration repository )
|
||||
throws ConsumerException
|
||||
{
|
||||
BidirectionalRepositoryLayout repositoryLayout;
|
||||
try
|
||||
{
|
||||
repositoryLayout = layoutFactory.getLayout( repository.getLayout() );
|
||||
ManagedRepositoryContent repositoryContent = repositoryFactory.getManagedRepositoryContent( repository
|
||||
.getId() );
|
||||
|
||||
if ( repository.getDaysOlder() != 0 )
|
||||
{
|
||||
repoPurge = new DaysOldRepositoryPurge( repositoryContent, dao.getArtifactDAO(), repository
|
||||
.getDaysOlder() );
|
||||
}
|
||||
else
|
||||
{
|
||||
repoPurge = new RetentionCountRepositoryPurge( repositoryContent, dao.getArtifactDAO(), repository
|
||||
.getRetentionCount() );
|
||||
}
|
||||
|
||||
cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repositoryContent, dao.getArtifactDAO(),
|
||||
metadataTools );
|
||||
|
||||
deleteReleasedSnapshots = repository.isDeleteReleasedSnapshots();
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
catch ( RepositoryNotFoundException e )
|
||||
{
|
||||
throw new ConsumerException(
|
||||
"Unable to initialize consumer due to unknown repository layout: " + e.getMessage(), e );
|
||||
throw new ConsumerException( "Can't run repository purge: " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
ManagedRepositoryConfiguration repoConfig =
|
||||
configuration.getConfiguration().findManagedRepositoryById( repository.getId() );
|
||||
|
||||
if ( repoConfig.getDaysOlder() != 0 )
|
||||
catch ( RepositoryException e )
|
||||
{
|
||||
repoPurge = new DaysOldRepositoryPurge( repository, repositoryLayout, dao.getArtifactDAO(),
|
||||
repoConfig.getDaysOlder() );
|
||||
throw new ConsumerException( "Can't run repository purge: " + e.getMessage(), e );
|
||||
}
|
||||
else
|
||||
{
|
||||
repoPurge = new RetentionCountRepositoryPurge( repository, repositoryLayout, dao.getArtifactDAO(),
|
||||
repoConfig.getRetentionCount() );
|
||||
}
|
||||
|
||||
cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repository, repositoryLayout, dao.getArtifactDAO() );
|
||||
|
||||
deleteReleasedSnapshots = repoConfig.isDeleteReleasedSnapshots();
|
||||
}
|
||||
|
||||
public void processFile( String path )
|
||||
|
@ -162,7 +172,7 @@ public class RepositoryPurgeConsumer
|
|||
}
|
||||
catch ( RepositoryPurgeException rpe )
|
||||
{
|
||||
throw new ConsumerException( rpe.getMessage() );
|
||||
throw new ConsumerException( rpe.getMessage(), rpe );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,18 +19,20 @@ package org.apache.maven.archiva.consumers.core.repository;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.archiva.common.utils.VersionComparator;
|
||||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.database.ArtifactDAO;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.FilenameParts;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
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 java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Purge the repository by retention count. Retain only the specified number of snapshots.
|
||||
|
@ -42,10 +44,10 @@ public class RetentionCountRepositoryPurge
|
|||
{
|
||||
private int retentionCount;
|
||||
|
||||
public RetentionCountRepositoryPurge( ManagedRepositoryConfiguration repository, BidirectionalRepositoryLayout layout,
|
||||
ArtifactDAO artifactDao, int retentionCount )
|
||||
public RetentionCountRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
|
||||
int retentionCount )
|
||||
{
|
||||
super( repository, layout, artifactDao );
|
||||
super( repository, artifactDao );
|
||||
this.retentionCount = retentionCount;
|
||||
}
|
||||
|
||||
|
@ -54,39 +56,42 @@ public class RetentionCountRepositoryPurge
|
|||
{
|
||||
try
|
||||
{
|
||||
File artifactFile = new File( repository.getLocation(), path );
|
||||
File artifactFile = new File( repository.getRepoRoot(), path );
|
||||
|
||||
if ( !artifactFile.exists() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FilenameParts parts = getFilenameParts( path );
|
||||
ArtifactReference artifact = repository.toArtifactReference( path );
|
||||
|
||||
if ( VersionUtil.isSnapshot( parts.version ) )
|
||||
if ( VersionUtil.isSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
File parentDir = artifactFile.getParentFile();
|
||||
VersionedReference reference = new VersionedReference();
|
||||
reference.setGroupId( artifact.getGroupId() );
|
||||
reference.setArtifactId( artifact.getArtifactId() );
|
||||
reference.setVersion( artifact.getVersion() );
|
||||
|
||||
if ( parentDir.isDirectory() )
|
||||
List<String> versions = new ArrayList<String>( repository.getVersions( reference ) );
|
||||
|
||||
Collections.sort( versions, VersionComparator.getInstance() );
|
||||
|
||||
if ( retentionCount > versions.size() )
|
||||
{
|
||||
File[] files = parentDir.listFiles();
|
||||
List uniqueVersionFilenames = getUniqueVersions( files );
|
||||
Collections.sort( uniqueVersionFilenames );
|
||||
// Done. nothing to do here. skip it.
|
||||
return;
|
||||
}
|
||||
|
||||
if ( uniqueVersionFilenames.size() > retentionCount )
|
||||
int countToPurge = versions.size() - retentionCount;
|
||||
|
||||
for ( String version : versions )
|
||||
{
|
||||
if ( countToPurge-- <= 0 )
|
||||
{
|
||||
int count = uniqueVersionFilenames.size();
|
||||
for ( Iterator iter = uniqueVersionFilenames.iterator(); iter.hasNext(); )
|
||||
{
|
||||
String filename = (String) iter.next();
|
||||
if ( count > retentionCount )
|
||||
{
|
||||
File[] artifactFiles = getFiles( parentDir, filename );
|
||||
purge( artifactFiles );
|
||||
count--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
doPurgeAllRelated( artifact, version );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -94,37 +99,34 @@ public class RetentionCountRepositoryPurge
|
|||
{
|
||||
throw new RepositoryPurgeException( le.getMessage() );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
// Nothing to do here.
|
||||
// TODO: Log this condition?
|
||||
}
|
||||
}
|
||||
|
||||
private List getUniqueVersions( File[] files )
|
||||
private void doPurgeAllRelated( ArtifactReference reference, String version )
|
||||
throws LayoutException
|
||||
{
|
||||
List uniqueVersions = new ArrayList();
|
||||
ArtifactReference artifact = new ArtifactReference();
|
||||
artifact.setGroupId( reference.getGroupId() );
|
||||
artifact.setArtifactId( reference.getArtifactId() );
|
||||
artifact.setVersion( version );
|
||||
artifact.setClassifier( reference.getClassifier() );
|
||||
artifact.setType( reference.getType() );
|
||||
|
||||
System.err.println( "Requesting (retention) purge of " + ArtifactReference.toKey( reference ) );
|
||||
|
||||
for ( int i = 0; i < files.length; i++ )
|
||||
try
|
||||
{
|
||||
if ( !( files[i].getName().toUpperCase() ).endsWith( "SHA1" ) &&
|
||||
!( files[i].getName().toUpperCase() ).endsWith( "MD5" ) )
|
||||
{
|
||||
FilenameParts filenameParts = null;
|
||||
|
||||
// skip those files that have layout exception (no artifact id/no version/no extension)
|
||||
try
|
||||
{
|
||||
filenameParts = getFilenameParts( files[i].getAbsolutePath() );
|
||||
}
|
||||
catch ( LayoutException le )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if ( filenameParts != null &&
|
||||
!uniqueVersions.contains( filenameParts.artifactId + "-" + filenameParts.version ) )
|
||||
{
|
||||
uniqueVersions.add( filenameParts.artifactId + "-" + filenameParts.version );
|
||||
}
|
||||
}
|
||||
Set<ArtifactReference> related = repository.getRelatedArtifacts( artifact );
|
||||
purge( related );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
// Nothing to do here.
|
||||
// TODO: Log this?
|
||||
}
|
||||
|
||||
return uniqueVersions;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,58 +20,47 @@
|
|||
|
||||
<configuration>
|
||||
<version>1</version>
|
||||
<repositories>
|
||||
<repository>
|
||||
<managedRepositories>
|
||||
<managedRepository>
|
||||
<id>internal</id>
|
||||
<name>Archiva Managed Internal Repository</name>
|
||||
<url>file://${appserver.base}/repositories/internal</url>
|
||||
<location>${appserver.base}/repositories/internal</location>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>false</snapshots>
|
||||
<indexed>true</indexed>
|
||||
<refreshCronExpression>0 0 * * ?</refreshCronExpression>
|
||||
</repository>
|
||||
<repository>
|
||||
</managedRepository>
|
||||
<managedRepository>
|
||||
<id>snapshots</id>
|
||||
<name>Archiva Managed Snapshot Repository</name>
|
||||
<url>file://${appserver.base}/repositories/internal</url>
|
||||
<location>${appserver.base}/repositories/snapshots</location>
|
||||
<layout>default</layout>
|
||||
<releases>false</releases>
|
||||
<snapshots>true</snapshots>
|
||||
<indexed>true</indexed>
|
||||
<refreshCronExpression>0 0,30 * * ?</refreshCronExpression>
|
||||
</repository>
|
||||
<repository>
|
||||
</managedRepository>
|
||||
</managedRepositories>
|
||||
|
||||
<remoteRepositories>
|
||||
<remoteRepository>
|
||||
<id>central</id>
|
||||
<name>Central Repository</name>
|
||||
<url>http://repo1.maven.org/maven2</url>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>false</snapshots>
|
||||
<indexed>false</indexed>
|
||||
</repository>
|
||||
<repository>
|
||||
</remoteRepository>
|
||||
<remoteRepository>
|
||||
<id>maven2-repository.dev.java.net</id>
|
||||
<name>Java.net Repository for Maven 2</name>
|
||||
<url>https://maven2-repository.dev.java.net/nonav/repository</url>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>false</snapshots>
|
||||
<indexed>false</indexed>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>test-repo</id>
|
||||
<name>Test Repository</name>
|
||||
<url>file://${appserver.base}/repositories/test-repo</url>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>true</snapshots>
|
||||
<indexed>true</indexed>
|
||||
<refreshCronExpression>0 0 * * ?</refreshCronExpression>
|
||||
<daysOlder>100</daysOlder>
|
||||
<deleteReleasedSnapshots>true</deleteReleasedSnapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
</remoteRepository>
|
||||
</remoteRepositories>
|
||||
|
||||
<proxyConnectors>
|
||||
<proxyConnector>
|
||||
|
|
|
@ -20,58 +20,47 @@
|
|||
|
||||
<configuration>
|
||||
<version>1</version>
|
||||
<repositories>
|
||||
<repository>
|
||||
<managedRepositories>
|
||||
<managedRepository>
|
||||
<id>internal</id>
|
||||
<name>Archiva Managed Internal Repository</name>
|
||||
<url>file://${appserver.base}/repositories/internal</url>
|
||||
<location>${appserver.base}/repositories/internal</location>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>false</snapshots>
|
||||
<indexed>true</indexed>
|
||||
<refreshCronExpression>0 0 * * ?</refreshCronExpression>
|
||||
</repository>
|
||||
<repository>
|
||||
</managedRepository>
|
||||
<managedRepository>
|
||||
<id>snapshots</id>
|
||||
<name>Archiva Managed Snapshot Repository</name>
|
||||
<url>file://${appserver.base}/repositories/internal</url>
|
||||
<location>${appserver.base}/repositories/snapshots</location>
|
||||
<layout>default</layout>
|
||||
<releases>false</releases>
|
||||
<snapshots>true</snapshots>
|
||||
<indexed>true</indexed>
|
||||
<refreshCronExpression>0 0,30 * * ?</refreshCronExpression>
|
||||
</repository>
|
||||
<repository>
|
||||
</managedRepository>
|
||||
</managedRepositories>
|
||||
|
||||
<remoteRepositories>
|
||||
<remoteRepository>
|
||||
<id>central</id>
|
||||
<name>Central Repository</name>
|
||||
<url>http://repo1.maven.org/maven2</url>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>false</snapshots>
|
||||
<indexed>false</indexed>
|
||||
</repository>
|
||||
<repository>
|
||||
</remoteRepository>
|
||||
<remoteRepository>
|
||||
<id>maven2-repository.dev.java.net</id>
|
||||
<name>Java.net Repository for Maven 2</name>
|
||||
<url>https://maven2-repository.dev.java.net/nonav/repository</url>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>false</snapshots>
|
||||
<indexed>false</indexed>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>test-repo</id>
|
||||
<name>Test Repository</name>
|
||||
<url>file://${appserver.base}/repositories/test-repo</url>
|
||||
<layout>default</layout>
|
||||
<releases>true</releases>
|
||||
<snapshots>true</snapshots>
|
||||
<indexed>true</indexed>
|
||||
<refreshCronExpression>0 0 * * ?</refreshCronExpression>
|
||||
<daysOlder>0</daysOlder>
|
||||
<retentionCount>2</retentionCount>
|
||||
</repository>
|
||||
</repositories>
|
||||
</remoteRepository>
|
||||
</remoteRepositories>
|
||||
|
||||
<proxyConnectors>
|
||||
<proxyConnector>
|
||||
|
|
|
@ -23,9 +23,7 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
|||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||
import org.apache.maven.archiva.database.ArtifactDAO;
|
||||
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.DefaultBidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.codehaus.plexus.PlexusTestCase;
|
||||
import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
|
||||
import org.codehaus.plexus.jdo.JdoFactory;
|
||||
|
@ -72,9 +70,7 @@ public abstract class AbstractRepositoryPurgeTest
|
|||
|
||||
private ManagedRepositoryConfiguration config;
|
||||
|
||||
private ManagedRepositoryConfiguration repo;
|
||||
|
||||
private BidirectionalRepositoryLayout layout;
|
||||
private ManagedRepositoryContent repo;
|
||||
|
||||
protected ArtifactDAO dao;
|
||||
|
||||
|
@ -161,35 +157,24 @@ public abstract class AbstractRepositoryPurgeTest
|
|||
config.setLocation( TEST_REPO_LOCATION );
|
||||
config.setReleases( true );
|
||||
config.setSnapshots( true );
|
||||
config.setDeleteReleasedSnapshots( true );
|
||||
config.setRetentionCount( TEST_RETENTION_COUNT );
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
public ManagedRepositoryConfiguration getRepository()
|
||||
public ManagedRepositoryContent getRepository()
|
||||
throws Exception
|
||||
{
|
||||
if ( repo == null )
|
||||
{
|
||||
repo = new ManagedRepositoryConfiguration();
|
||||
repo.setId( TEST_REPO_ID );
|
||||
repo.setName( TEST_REPO_NAME );
|
||||
repo.setLocation( TEST_REPO_LOCATION );
|
||||
repo = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
|
||||
repo.setRepository( getRepoConfiguration() );
|
||||
}
|
||||
|
||||
return repo;
|
||||
}
|
||||
|
||||
public BidirectionalRepositoryLayout getLayout()
|
||||
throws LayoutException
|
||||
{
|
||||
if ( layout == null )
|
||||
{
|
||||
layout = new DefaultBidirectionalRepositoryLayout();
|
||||
}
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
protected void populateDb( String groupId, String artifactId, List versions )
|
||||
throws ArchivaDatabaseException
|
||||
{
|
||||
|
|
|
@ -19,19 +19,20 @@ package org.apache.maven.archiva.consumers.core.repository;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||
import org.apache.maven.archiva.repository.metadata.MetadataTools;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.jdom.Document;
|
||||
import org.jdom.Element;
|
||||
import org.jdom.xpath.XPath;
|
||||
import org.jdom.input.SAXBuilder;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.jdom.xpath.XPath;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
import java.util.ArrayList;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
|
||||
|
@ -44,8 +45,10 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
|
|||
{
|
||||
super.setUp();
|
||||
|
||||
repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), getLayout(), dao );
|
||||
}
|
||||
MetadataTools metadataTools = (MetadataTools) lookup( MetadataTools.class );
|
||||
|
||||
repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), dao, metadataTools );
|
||||
}
|
||||
|
||||
public void testReleasedSnapshots()
|
||||
throws Exception
|
||||
|
@ -58,47 +61,60 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
|
|||
repoPurge.process( PATH_TO_RELEASED_SNAPSHOT );
|
||||
|
||||
// check if the snapshot was removed
|
||||
assertFalse( new File( "target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar.md5" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar.md5" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar.sha1" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.pom" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.pom" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.pom.md5" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.pom.md5" ).exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.pom.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.pom.sha1" )
|
||||
.exists() );
|
||||
|
||||
// check if the released version was not removed
|
||||
assertTrue( new File( "target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3" ).exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3-sources.jar" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3-sources.jar" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3-sources.jar.md5" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3-sources.jar.md5" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3-sources.jar.sha1" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3-sources.jar.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.jar" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.jar" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.jar.md5" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.jar.md5" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.jar.sha1" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.jar.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.pom" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.pom" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.pom.md5" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.pom.md5" ).exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.pom.sha1" ).exists() );
|
||||
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/2.3/maven-plugin-plugin-2.3.pom.sha1" )
|
||||
.exists() );
|
||||
|
||||
// check if metadata file was updated
|
||||
File artifactMetadataFile =
|
||||
new File( "target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata-local.xml" );
|
||||
File artifactMetadataFile = new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml" );
|
||||
|
||||
FileReader fileReader = new FileReader( artifactMetadataFile );
|
||||
Document document;
|
||||
|
@ -116,22 +132,21 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
|
|||
// parse the metadata file
|
||||
XPath xPath = XPath.newInstance( "//metadata/versioning" );
|
||||
Element rootElement = document.getRootElement();
|
||||
|
||||
|
||||
Element versioning = (Element) xPath.selectSingleNode( rootElement );
|
||||
Element el = (Element) xPath.newInstance( "./latest" ).selectSingleNode( versioning );
|
||||
assertEquals( "2.3", el.getValue() );
|
||||
|
||||
el = (Element) xPath.newInstance( "./lastUpdated" ).selectSingleNode( versioning );
|
||||
assertFalse( el.getValue().equals( "20070315032817" ) );
|
||||
// FIXME: assertFalse( el.getValue().equals( "20070315032817" ) );
|
||||
|
||||
List nodes = xPath.newInstance( "./versions" ).selectNodes(
|
||||
rootElement );
|
||||
List nodes = xPath.newInstance( "./versions" ).selectNodes( rootElement );
|
||||
|
||||
boolean found = false;
|
||||
for ( Iterator iter = nodes.iterator(); iter.hasNext(); )
|
||||
{
|
||||
el = ( Element ) iter.next();
|
||||
if( el.getValue().equals( "2.3-SNAPSHOT" ) )
|
||||
el = (Element) iter.next();
|
||||
if ( el.getValue().equals( "2.3-SNAPSHOT" ) )
|
||||
{
|
||||
found = true;
|
||||
}
|
||||
|
@ -143,7 +158,7 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
|
|||
|
||||
public void testHigherSnapshotExists()
|
||||
throws Exception
|
||||
{
|
||||
{
|
||||
populateHigherSnapshotExistsTest();
|
||||
|
||||
File testDir = new File( "target/test" );
|
||||
|
@ -152,40 +167,52 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
|
|||
repoPurge.process( PATH_TO_HIGHER_SNAPSHOT_EXISTS );
|
||||
|
||||
// check if the snapshot was removed
|
||||
assertFalse( new File( "target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar.md5" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar.md5" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar.sha1" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.pom" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.pom" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.pom.md5" )
|
||||
.exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.pom.md5" ).exists() );
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.pom.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.pom.sha1" )
|
||||
.exists() );
|
||||
|
||||
// check if the released version was not removed
|
||||
assertTrue( new File( "target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.jar" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.jar" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.jar.md5" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.jar.md5" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.jar.sha1" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.jar.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.pom" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.pom" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.pom.md5" )
|
||||
.exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.pom.md5" ).exists() );
|
||||
assertTrue( new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.pom.sha1" ).exists() );
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/2.0.4-SNAPSHOT/maven-source-plugin-2.0.4-SNAPSHOT.pom.sha1" )
|
||||
.exists() );
|
||||
|
||||
// check if metadata file was updated
|
||||
File artifactMetadataFile =
|
||||
new File( "target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/maven-metadata-local.xml" );
|
||||
File artifactMetadataFile = new File(
|
||||
"target/test/test-repo/org/apache/maven/plugins/maven-source-plugin/maven-metadata.xml" );
|
||||
|
||||
FileReader fileReader = new FileReader( artifactMetadataFile );
|
||||
Document document;
|
||||
|
@ -209,16 +236,15 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
|
|||
assertEquals( "2.0.4-SNAPSHOT", el.getValue() );
|
||||
|
||||
el = (Element) xPath.newInstance( "./lastUpdated" ).selectSingleNode( versioning );
|
||||
assertFalse( el.getValue().equals( "20070427033345" ) );
|
||||
// FIXME: assertFalse( el.getValue().equals( "20070427033345" ) );
|
||||
|
||||
List nodes = xPath.newInstance( "./versions" ).selectNodes(
|
||||
rootElement );
|
||||
List nodes = xPath.newInstance( "./versions" ).selectNodes( rootElement );
|
||||
|
||||
boolean found = false;
|
||||
for ( Iterator iter = nodes.iterator(); iter.hasNext(); )
|
||||
{
|
||||
el = ( Element ) iter.next();
|
||||
if( el.getValue().equals( "2.0.3-SNAPSHOT" ) )
|
||||
el = (Element) iter.next();
|
||||
if ( el.getValue().equals( "2.0.3-SNAPSHOT" ) )
|
||||
{
|
||||
found = true;
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ public class DaysOldRepositoryPurgeTest
|
|||
super.setUp();
|
||||
|
||||
repoPurge =
|
||||
new DaysOldRepositoryPurge( getRepository(), getLayout(), dao, getRepoConfiguration().getDaysOlder() );
|
||||
new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration().getDaysOlder() );
|
||||
}
|
||||
|
||||
private void setLastModified( String dirPath )
|
||||
|
|
|
@ -20,6 +20,8 @@ package org.apache.maven.archiva.consumers.core.repository;
|
|||
*/
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
|
||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
|
@ -58,13 +60,18 @@ public class RepositoryPurgeConsumerTest
|
|||
|
||||
populateDbForRetentionCountTest();
|
||||
|
||||
repoPurgeConsumer.beginScan( getRepository() );
|
||||
ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
|
||||
repoConfiguration.setDaysOlder( 0 ); // force days older off to allow retention count purge to execute.
|
||||
repoConfiguration.setRetentionCount( TEST_RETENTION_COUNT );
|
||||
addRepoToConfiguration( "retention-count", repoConfiguration );
|
||||
|
||||
repoPurgeConsumer.beginScan( repoConfiguration );
|
||||
|
||||
File testDir = new File( "target/test" );
|
||||
FileUtils.copyDirectoryToDirectory( new File( "target/test-classes/test-repo" ), testDir );
|
||||
|
||||
repoPurgeConsumer.processFile( PATH_TO_BY_RETENTION_COUNT_ARTIFACT );
|
||||
|
||||
|
||||
// assert if removed from repo
|
||||
assertFalse( new File(
|
||||
"target/test/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar" ).exists() );
|
||||
|
@ -122,6 +129,14 @@ public class RepositoryPurgeConsumerTest
|
|||
FileUtils.deleteDirectory( testDir );
|
||||
}
|
||||
|
||||
private void addRepoToConfiguration( String configHint, ManagedRepositoryConfiguration repoConfiguration )
|
||||
throws Exception
|
||||
{
|
||||
ArchivaConfiguration archivaConfiguration = (ArchivaConfiguration) lookup( ArchivaConfiguration.class,
|
||||
configHint );
|
||||
archivaConfiguration.getConfiguration().addManagedRepository( repoConfiguration );
|
||||
}
|
||||
|
||||
public void testConsumerByDaysOld()
|
||||
throws Exception
|
||||
{
|
||||
|
@ -130,7 +145,11 @@ public class RepositoryPurgeConsumerTest
|
|||
KnownRepositoryContentConsumer repoPurgeConsumer = (KnownRepositoryContentConsumer) lookup(
|
||||
KnownRepositoryContentConsumer.class, "repo-purge-consumer-by-days-old" );
|
||||
|
||||
repoPurgeConsumer.beginScan( getRepository() );
|
||||
ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
|
||||
repoConfiguration.setDaysOlder( TEST_DAYS_OLDER );
|
||||
addRepoToConfiguration( "days-old", repoConfiguration );
|
||||
|
||||
repoPurgeConsumer.beginScan( repoConfiguration );
|
||||
|
||||
File testDir = new File( "target/test" );
|
||||
FileUtils.copyDirectoryToDirectory( new File( "target/test-classes/test-repo" ), testDir );
|
||||
|
@ -163,7 +182,11 @@ public class RepositoryPurgeConsumerTest
|
|||
|
||||
populateDbForReleasedSnapshotsTest();
|
||||
|
||||
repoPurgeConsumer.beginScan( getRepository() );
|
||||
ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
|
||||
repoConfiguration.setDeleteReleasedSnapshots( false );
|
||||
addRepoToConfiguration( "retention-count", repoConfiguration );
|
||||
|
||||
repoPurgeConsumer.beginScan( repoConfiguration );
|
||||
|
||||
File testDir = new File( "target/test" );
|
||||
FileUtils.copyDirectoryToDirectory( new File( "target/test-classes/test-repo" ), testDir );
|
||||
|
@ -238,7 +261,11 @@ public class RepositoryPurgeConsumerTest
|
|||
|
||||
populateDbForReleasedSnapshotsTest();
|
||||
|
||||
repoPurgeConsumer.beginScan( getRepository() );
|
||||
ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
|
||||
repoConfiguration.setDeleteReleasedSnapshots( true );
|
||||
addRepoToConfiguration( "days-old", repoConfiguration );
|
||||
|
||||
repoPurgeConsumer.beginScan( repoConfiguration );
|
||||
|
||||
File testDir = new File( "target/test" );
|
||||
FileUtils.copyDirectoryToDirectory( new File( "target/test-classes/test-repo" ), testDir );
|
||||
|
@ -263,7 +290,7 @@ public class RepositoryPurgeConsumerTest
|
|||
|
||||
// check if metadata file was updated
|
||||
File artifactMetadataFile =
|
||||
new File( "target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata-local.xml" );
|
||||
new File( "target/test/test-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml" );
|
||||
|
||||
FileReader fileReader = new FileReader( artifactMetadataFile );
|
||||
Document document;
|
||||
|
@ -287,7 +314,7 @@ public class RepositoryPurgeConsumerTest
|
|||
assertEquals( "2.3", el.getValue() );
|
||||
|
||||
el = (Element) xPath.newInstance( "./lastUpdated" ).selectSingleNode( versioning );
|
||||
assertFalse( el.getValue().equals( "20070315032817" ) );
|
||||
// FIXME: assertFalse( el.getValue().equals( "20070315032817" ) );
|
||||
|
||||
List nodes = xPath.newInstance( "./versions" ).selectNodes( rootElement );
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ public class RetentionCountRepositoryPurgeTest
|
|||
{
|
||||
super.setUp();
|
||||
|
||||
repoPurge = new RetentionCountRepositoryPurge( getRepository(), getLayout(), dao,
|
||||
repoPurge = new RetentionCountRepositoryPurge( getRepository(), dao,
|
||||
getRepoConfiguration().getRetentionCount() );
|
||||
}
|
||||
|
||||
|
|
|
@ -31,13 +31,17 @@
|
|||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>retention-count</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.database.ArchivaDAO</role>
|
||||
<role-hint>jdo</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>retention-count</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||
</requirement>
|
||||
|
@ -58,6 +62,19 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>retention-count</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>retention-count</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.codehaus.plexus.registry.Registry</role>
|
||||
<role-hint>retention-count</role-hint>
|
||||
|
@ -69,25 +86,6 @@
|
|||
</properties>
|
||||
</configuration>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<implementation>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>retention-count</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout</role>
|
||||
<field-name>layouts</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout</role>
|
||||
<role-hint>default</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.layout.DefaultBidirectionalRepositoryLayout</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
|
||||
|
@ -110,13 +108,17 @@
|
|||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>days-old</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.database.ArchivaDAO</role>
|
||||
<role-hint>jdo</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>days-old</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||
</requirement>
|
||||
|
@ -126,6 +128,19 @@
|
|||
<description>Purge repository of old snapshots</description>
|
||||
</configuration>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>days-old</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>days-old</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>days-old</role-hint>
|
||||
|
@ -148,25 +163,6 @@
|
|||
</properties>
|
||||
</configuration>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<implementation>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>days-old</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout</role>
|
||||
<field-name>layouts</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout</role>
|
||||
<role-hint>default</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.layout.DefaultBidirectionalRepositoryLayout</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||
<implementation>org.apache.maven.archiva.configuration.FileTypes</implementation>
|
||||
|
|
|
@ -36,9 +36,7 @@ import org.apache.maven.archiva.model.RepositoryProblem;
|
|||
import org.apache.maven.archiva.reporting.artifact.CorruptArtifactReport;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
import org.apache.maven.archiva.repository.layout.FilenameParts;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
import org.apache.maven.archiva.repository.layout.RepositoryLayoutUtils;
|
||||
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
||||
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
|
||||
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
||||
|
@ -160,11 +158,10 @@ public class ProjectModelToDatabaseConsumer
|
|||
|
||||
model.setOrigin( "filesystem" );
|
||||
|
||||
// The version should be updated to the filename version if it is a unique snapshot
|
||||
FilenameParts parts = RepositoryLayoutUtils.splitFilename( artifactFile.getName(), null );
|
||||
if ( VersionUtil.isUniqueSnapshot( parts.version ) )
|
||||
// The version should be updated to the artifact/filename version if it is a unique snapshot
|
||||
if ( VersionUtil.isUniqueSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
model.setVersion( parts.version );
|
||||
model.setVersion( artifact.getVersion() );
|
||||
}
|
||||
|
||||
// Filter the model
|
||||
|
@ -282,45 +279,35 @@ public class ProjectModelToDatabaseConsumer
|
|||
{
|
||||
File artifactFile = toFile( artifact );
|
||||
|
||||
try
|
||||
if ( !artifact.getArtifactId().equalsIgnoreCase( model.getArtifactId() ) )
|
||||
{
|
||||
FilenameParts parts = RepositoryLayoutUtils.splitFilename( artifactFile.getName(), null );
|
||||
|
||||
if ( !parts.artifactId.equalsIgnoreCase( model.getArtifactId() ) )
|
||||
{
|
||||
StringBuffer emsg = new StringBuffer();
|
||||
emsg.append( "File " ).append( artifactFile.getName() );
|
||||
emsg.append( " has an invalid project model [" );
|
||||
appendModel( emsg, model );
|
||||
emsg.append( "]: The model artifactId [" ).append( model.getArtifactId() );
|
||||
emsg.append( "] does not match the artifactId portion of the filename: " ).append( parts.artifactId );
|
||||
|
||||
getLogger().warn(emsg.toString() );
|
||||
addProblem( artifact, emsg.toString() );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( !parts.version.equalsIgnoreCase( model.getVersion() ) &&
|
||||
!VersionUtil.getBaseVersion( parts.version ).equalsIgnoreCase( model.getVersion() ) )
|
||||
{
|
||||
StringBuffer emsg = new StringBuffer();
|
||||
emsg.append( "File " ).append( artifactFile.getName() );
|
||||
emsg.append( " has an invalid project model [" );
|
||||
appendModel( emsg, model );
|
||||
emsg.append( "]; The model version [" ).append( model.getVersion() );
|
||||
emsg.append( "] does not match the version portion of the filename: " ).append( parts.version );
|
||||
|
||||
getLogger().warn(emsg.toString() );
|
||||
addProblem( artifact, emsg.toString() );
|
||||
|
||||
return false;
|
||||
}
|
||||
StringBuffer emsg = new StringBuffer();
|
||||
emsg.append( "File " ).append( artifactFile.getName() );
|
||||
emsg.append( " has an invalid project model [" );
|
||||
appendModel( emsg, model );
|
||||
emsg.append( "]: The model artifactId [" ).append( model.getArtifactId() );
|
||||
emsg.append( "] does not match the artifactId portion of the filename: " ).append( artifact.getArtifactId() );
|
||||
|
||||
getLogger().warn(emsg.toString() );
|
||||
addProblem( artifact, emsg.toString() );
|
||||
|
||||
return false;
|
||||
}
|
||||
catch ( LayoutException le )
|
||||
|
||||
if ( !artifact.getVersion().equalsIgnoreCase( model.getVersion() ) &&
|
||||
!VersionUtil.getBaseVersion( artifact.getVersion() ).equalsIgnoreCase( model.getVersion() ) )
|
||||
{
|
||||
throw new ConsumerException( le.getMessage() );
|
||||
StringBuffer emsg = new StringBuffer();
|
||||
emsg.append( "File " ).append( artifactFile.getName() );
|
||||
emsg.append( " has an invalid project model [" );
|
||||
appendModel( emsg, model );
|
||||
emsg.append( "]; The model version [" ).append( model.getVersion() );
|
||||
emsg.append( "] does not match the version portion of the filename: " ).append( artifact.getVersion() );
|
||||
|
||||
getLogger().warn(emsg.toString() );
|
||||
addProblem( artifact, emsg.toString() );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -24,10 +24,8 @@ import org.apache.commons.io.FileUtils;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.configuration.NetworkProxyConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
|
||||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.RepositoryURL;
|
||||
|
@ -36,8 +34,12 @@ import org.apache.maven.archiva.policies.DownloadPolicy;
|
|||
import org.apache.maven.archiva.policies.PostDownloadPolicy;
|
||||
import org.apache.maven.archiva.policies.PreDownloadPolicy;
|
||||
import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.RepositoryContentFactory;
|
||||
import org.apache.maven.archiva.repository.RepositoryException;
|
||||
import org.apache.maven.archiva.repository.RepositoryNotFoundException;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
import org.apache.maven.archiva.repository.metadata.MetadataTools;
|
||||
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
|
||||
|
@ -91,7 +93,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||
private RepositoryContentFactory repositoryFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
|
@ -131,7 +133,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
* could not be) fetched.
|
||||
* @throws ProxyException if there was a problem fetching the artifact.
|
||||
*/
|
||||
public File fetchFromProxies( ManagedRepositoryConfiguration repository, ArtifactReference artifact )
|
||||
public File fetchFromProxies( ManagedRepositoryContent repository, ArtifactReference artifact )
|
||||
throws ProxyException
|
||||
{
|
||||
File localFile = toLocalFile( repository, artifact );
|
||||
|
@ -142,8 +144,8 @@ public class DefaultRepositoryProxyConnectors
|
|||
List<ProxyConnector> connectors = getProxyConnectors( repository );
|
||||
for ( ProxyConnector connector : connectors )
|
||||
{
|
||||
RemoteRepositoryConfiguration targetRepository = connector.getTargetRepository();
|
||||
String targetPath = getLayout( targetRepository ).toPath( artifact );
|
||||
RemoteRepositoryContent targetRepository = connector.getTargetRepository();
|
||||
String targetPath = targetRepository.toPath( artifact );
|
||||
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile, requestProperties );
|
||||
|
||||
|
@ -162,7 +164,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
*
|
||||
* @return the (local) metadata file that was fetched/merged/updated, or null if no metadata file exists.
|
||||
*/
|
||||
public File fetchFromProxies( ManagedRepositoryConfiguration repository, VersionedReference metadata )
|
||||
public File fetchFromProxies( ManagedRepositoryContent repository, VersionedReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
File localFile = toLocalFile( repository, metadata );
|
||||
|
@ -173,7 +175,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
List<ProxyConnector> connectors = getProxyConnectors( repository );
|
||||
for ( ProxyConnector connector : connectors )
|
||||
{
|
||||
RemoteRepositoryConfiguration targetRepository = connector.getTargetRepository();
|
||||
RemoteRepositoryContent targetRepository = connector.getTargetRepository();
|
||||
String targetPath = metadataTools.toPath( metadata );
|
||||
|
||||
File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath );
|
||||
|
@ -210,6 +212,12 @@ public class DefaultRepositoryProxyConnectors
|
|||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
getLogger()
|
||||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
}
|
||||
|
||||
if ( fileExists( localFile ) )
|
||||
|
@ -225,7 +233,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
*
|
||||
* @return the (local) metadata file that was fetched/merged/updated, or null if no metadata file exists.
|
||||
*/
|
||||
public File fetchFromProxies( ManagedRepositoryConfiguration repository, ProjectReference metadata )
|
||||
public File fetchFromProxies( ManagedRepositoryContent repository, ProjectReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
File localFile = toLocalFile( repository, metadata );
|
||||
|
@ -236,7 +244,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
List<ProxyConnector> connectors = getProxyConnectors( repository );
|
||||
for ( ProxyConnector connector : connectors )
|
||||
{
|
||||
RemoteRepositoryConfiguration targetRepository = connector.getTargetRepository();
|
||||
RemoteRepositoryContent targetRepository = connector.getTargetRepository();
|
||||
String targetPath = metadataTools.toPath( metadata );
|
||||
|
||||
File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath );
|
||||
|
@ -273,6 +281,12 @@ public class DefaultRepositoryProxyConnectors
|
|||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
getLogger()
|
||||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
}
|
||||
|
||||
if ( fileExists( localFile ) )
|
||||
|
@ -283,17 +297,17 @@ public class DefaultRepositoryProxyConnectors
|
|||
return null;
|
||||
}
|
||||
|
||||
private File toLocalRepoFile( ManagedRepositoryConfiguration repository,
|
||||
RemoteRepositoryConfiguration targetRepository, String targetPath )
|
||||
private File toLocalRepoFile( ManagedRepositoryContent repository, RemoteRepositoryContent targetRepository,
|
||||
String targetPath )
|
||||
{
|
||||
String repoPath = metadataTools.getRepositorySpecificName( targetRepository, targetPath );
|
||||
return new File( repository.getLocation(), repoPath );
|
||||
return new File( repository.getRepoRoot(), repoPath );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the provided ManagedRepositoryConfiguration has any proxies configured for it.
|
||||
* Test if the provided ManagedRepositoryContent has any proxies configured for it.
|
||||
*/
|
||||
public boolean hasProxies( ManagedRepositoryConfiguration repository )
|
||||
public boolean hasProxies( ManagedRepositoryContent repository )
|
||||
{
|
||||
synchronized ( this.proxyConnectorMap )
|
||||
{
|
||||
|
@ -301,74 +315,24 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
}
|
||||
|
||||
private File toLocalFile( ManagedRepositoryConfiguration repository, ArtifactReference artifact )
|
||||
private File toLocalFile( ManagedRepositoryContent repository, ArtifactReference artifact )
|
||||
throws ProxyException
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = getLayout( repository );
|
||||
String sourcePath = sourceLayout.toPath( artifact );
|
||||
return new File( repository.getLocation(), sourcePath );
|
||||
return repository.toFile( artifact );
|
||||
}
|
||||
|
||||
private File toLocalFile( ManagedRepositoryConfiguration repository, ProjectReference metadata )
|
||||
private File toLocalFile( ManagedRepositoryContent repository, ProjectReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
String sourcePath = metadataTools.toPath( metadata );
|
||||
return new File( repository.getLocation(), sourcePath );
|
||||
return new File( repository.getRepoRoot(), sourcePath );
|
||||
}
|
||||
|
||||
private File toLocalFile( ManagedRepositoryConfiguration repository, VersionedReference metadata )
|
||||
private File toLocalFile( ManagedRepositoryContent repository, VersionedReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
String sourcePath = metadataTools.toPath( metadata );
|
||||
return new File( repository.getLocation(), sourcePath );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the layout for the repository.
|
||||
*
|
||||
* @param repository the repository to get the layout from.
|
||||
* @return the layout
|
||||
* @throws ProxyException if there was a problem obtaining the layout from the repository (usually due to a bad
|
||||
* configuration of the repository)
|
||||
*/
|
||||
private BidirectionalRepositoryLayout getLayout( ManagedRepositoryConfiguration repository )
|
||||
throws ProxyException
|
||||
{
|
||||
try
|
||||
{
|
||||
return layoutFactory.getLayout( repository.getLayout() );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw new ProxyException(
|
||||
"Unable to proxy due to bad managed repository layout definition ["
|
||||
+ repository.getId() + "] had a layout defined as [" + repository.getLayout()
|
||||
+ "] : " + e.getMessage(), e );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the layout for the repository.
|
||||
*
|
||||
* @param repository the repository to get the layout from.
|
||||
* @return the layout
|
||||
* @throws ProxyException if there was a problem obtaining the layout from the repository (usually due to a bad
|
||||
* configuration of the repository)
|
||||
*/
|
||||
private BidirectionalRepositoryLayout getLayout( RemoteRepositoryConfiguration repository )
|
||||
throws ProxyException
|
||||
{
|
||||
try
|
||||
{
|
||||
return layoutFactory.getLayout( repository.getLayout() );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw new ProxyException(
|
||||
"Unable to proxy due to bad remote repository layout definition ["
|
||||
+ repository.getId() + "] had a layout defined as [" + repository.getLayout()
|
||||
+ "] : " + e.getMessage(), e );
|
||||
}
|
||||
return new File( repository.getRepoRoot(), sourcePath );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -408,11 +372,11 @@ public class DefaultRepositoryProxyConnectors
|
|||
* @return the local file that was downloaded, or null if not downloaded.
|
||||
* @throws ProxyException if transfer was unsuccessful.
|
||||
*/
|
||||
private File transferFile( ProxyConnector connector, RemoteRepositoryConfiguration remoteRepository,
|
||||
String remotePath, File localFile, Properties requestProperties )
|
||||
private File transferFile( ProxyConnector connector, RemoteRepositoryContent remoteRepository, String remotePath,
|
||||
File localFile, Properties requestProperties )
|
||||
throws ProxyException
|
||||
{
|
||||
String url = remoteRepository.getUrl() + remotePath;
|
||||
String url = remoteRepository.getURL().getUrl() + remotePath;
|
||||
requestProperties.setProperty( "url", url );
|
||||
|
||||
// Is a whitelist defined?
|
||||
|
@ -449,7 +413,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
Wagon wagon = null;
|
||||
try
|
||||
{
|
||||
RepositoryURL repoUrl = new RepositoryURL( remoteRepository.getUrl() );
|
||||
RepositoryURL repoUrl = remoteRepository.getURL();
|
||||
String protocol = repoUrl.getProtocol();
|
||||
wagon = (Wagon) wagons.get( protocol );
|
||||
if ( wagon == null )
|
||||
|
@ -506,7 +470,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
|
||||
// Just-in-time update of the index and database by executing the consumers for this artifact
|
||||
consumers.executeConsumers( connector.getSourceRepository(), localFile );
|
||||
consumers.executeConsumers( connector.getSourceRepository().getRepository(), localFile );
|
||||
|
||||
// Everything passes.
|
||||
return localFile;
|
||||
|
@ -524,11 +488,11 @@ public class DefaultRepositoryProxyConnectors
|
|||
* @param type the type of checksum to transfer (example: ".md5" or ".sha1")
|
||||
* @throws ProxyException if copying the downloaded file into place did not succeed.
|
||||
*/
|
||||
private void transferChecksum( Wagon wagon, RemoteRepositoryConfiguration remoteRepository, String remotePath,
|
||||
private void transferChecksum( Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
|
||||
File localFile, String type )
|
||||
throws ProxyException
|
||||
{
|
||||
String url = remoteRepository.getUrl() + remotePath;
|
||||
String url = remoteRepository.getURL().getUrl() + remotePath;
|
||||
|
||||
// Transfer checksum does not use the policy.
|
||||
if ( urlFailureCache.hasFailedBefore( url + type ) )
|
||||
|
@ -564,7 +528,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
* @throws ProxyException if there was a problem moving the downloaded file into place.
|
||||
* @throws WagonException if there was a problem tranfering the file.
|
||||
*/
|
||||
private File transferSimpleFile( Wagon wagon, RemoteRepositoryConfiguration remoteRepository, String remotePath,
|
||||
private File transferSimpleFile( Wagon wagon, RemoteRepositoryContent remoteRepository, String remotePath,
|
||||
File localFile )
|
||||
throws ProxyException, WagonException
|
||||
{
|
||||
|
@ -581,7 +545,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
|
||||
if ( localFile.exists() )
|
||||
{
|
||||
getLogger().debug( "Retrieving " + remotePath + " from " + remoteRepository.getName() );
|
||||
getLogger().debug( "Retrieving " + remotePath + " from " + remoteRepository.getRepository().getName() );
|
||||
wagon.get( remotePath, temp );
|
||||
success = true;
|
||||
|
||||
|
@ -595,7 +559,9 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
else
|
||||
{
|
||||
getLogger().debug( "Retrieving " + remotePath + " from " + remoteRepository.getName() + " if updated" );
|
||||
getLogger().debug(
|
||||
"Retrieving " + remotePath + " from " + remoteRepository.getRepository().getName()
|
||||
+ " if updated" );
|
||||
success = wagon.getIfNewer( remotePath, temp, localFile.lastModified() );
|
||||
if ( !success )
|
||||
{
|
||||
|
@ -703,8 +669,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
* @param remoteRepository the remote repository to connect to.
|
||||
* @return true if the connection was successful. false if not connected.
|
||||
*/
|
||||
private boolean connectToRepository( ProxyConnector connector, Wagon wagon,
|
||||
RemoteRepositoryConfiguration remoteRepository )
|
||||
private boolean connectToRepository( ProxyConnector connector, Wagon wagon, RemoteRepositoryContent remoteRepository )
|
||||
{
|
||||
boolean connected = false;
|
||||
|
||||
|
@ -717,13 +682,13 @@ public class DefaultRepositoryProxyConnectors
|
|||
try
|
||||
{
|
||||
AuthenticationInfo authInfo = null;
|
||||
String username = remoteRepository.getUsername();
|
||||
String password = remoteRepository.getPassword();
|
||||
String username = remoteRepository.getRepository().getUsername();
|
||||
String password = remoteRepository.getRepository().getPassword();
|
||||
if ( username != null && password != null )
|
||||
{
|
||||
getLogger().debug(
|
||||
"Using username " + username + " to connect to remote repository "
|
||||
+ remoteRepository.getUrl() );
|
||||
"Using username " + username + " to connect to remote repository "
|
||||
+ remoteRepository.getURL() );
|
||||
authInfo = new AuthenticationInfo();
|
||||
authInfo.setUserName( username );
|
||||
authInfo.setPassword( password );
|
||||
|
@ -733,7 +698,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
getLogger().debug( "No authentication for remote repository needed" );
|
||||
}
|
||||
|
||||
Repository wagonRepository = new Repository( remoteRepository.getId(), remoteRepository.getUrl().toString() );
|
||||
Repository wagonRepository = new Repository( remoteRepository.getId(), remoteRepository.getURL().toString() );
|
||||
if ( networkProxy != null )
|
||||
{
|
||||
wagon.connect( wagonRepository, authInfo, networkProxy );
|
||||
|
@ -746,12 +711,16 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
catch ( ConnectionException e )
|
||||
{
|
||||
getLogger().info( "Could not connect to " + remoteRepository.getName() + ": " + e.getMessage() );
|
||||
getLogger().info(
|
||||
"Could not connect to " + remoteRepository.getRepository().getName() + ": "
|
||||
+ e.getMessage() );
|
||||
connected = false;
|
||||
}
|
||||
catch ( AuthenticationException e )
|
||||
{
|
||||
getLogger().info( "Could not connect to " + remoteRepository.getName() + ": " + e.getMessage() );
|
||||
getLogger().info(
|
||||
"Could not connect to " + remoteRepository.getRepository().getName() + ": "
|
||||
+ e.getMessage() );
|
||||
connected = false;
|
||||
}
|
||||
|
||||
|
@ -786,7 +755,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
/**
|
||||
* TODO: Ensure that list is correctly ordered based on configuration. See MRM-477
|
||||
*/
|
||||
public List<ProxyConnector> getProxyConnectors( ManagedRepositoryConfiguration repository )
|
||||
public List<ProxyConnector> getProxyConnectors( ManagedRepositoryContent repository )
|
||||
{
|
||||
synchronized ( this.proxyConnectorMap )
|
||||
{
|
||||
|
@ -795,7 +764,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
{
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
|
||||
Collections.sort( ret, ProxyConnectorOrderComparator.getInstance() );
|
||||
return ret;
|
||||
}
|
||||
|
@ -830,46 +799,61 @@ public class DefaultRepositoryProxyConnectors
|
|||
{
|
||||
String key = proxyConfig.getSourceRepoId();
|
||||
|
||||
// Create connector object.
|
||||
ProxyConnector connector = new ProxyConnector();
|
||||
connector.setSourceRepository( getManagedRepository( proxyConfig.getSourceRepoId() ) );
|
||||
connector.setTargetRepository( getRemoteRepository( proxyConfig.getTargetRepoId() ) );
|
||||
connector.setProxyId( proxyConfig.getProxyId() );
|
||||
connector.setPolicies( proxyConfig.getPolicies() );
|
||||
connector.setOrder( proxyConfig.getOrder() );
|
||||
|
||||
// Copy any blacklist patterns.
|
||||
List<String> blacklist = new ArrayList<String>();
|
||||
if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
|
||||
try
|
||||
{
|
||||
blacklist.addAll( proxyConfig.getBlackListPatterns() );
|
||||
}
|
||||
connector.setBlacklist( blacklist );
|
||||
// Create connector object.
|
||||
ProxyConnector connector = new ProxyConnector();
|
||||
|
||||
// Copy any whitelist patterns.
|
||||
List<String> whitelist = new ArrayList<String>();
|
||||
if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
|
||||
connector.setSourceRepository( repositoryFactory.getManagedRepositoryContent( proxyConfig
|
||||
.getSourceRepoId() ) );
|
||||
connector.setTargetRepository( repositoryFactory.getRemoteRepositoryContent( proxyConfig
|
||||
.getTargetRepoId() ) );
|
||||
|
||||
connector.setProxyId( proxyConfig.getProxyId() );
|
||||
connector.setPolicies( proxyConfig.getPolicies() );
|
||||
connector.setOrder( proxyConfig.getOrder() );
|
||||
|
||||
// Copy any blacklist patterns.
|
||||
List<String> blacklist = new ArrayList<String>();
|
||||
if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
|
||||
{
|
||||
blacklist.addAll( proxyConfig.getBlackListPatterns() );
|
||||
}
|
||||
connector.setBlacklist( blacklist );
|
||||
|
||||
// Copy any whitelist patterns.
|
||||
List<String> whitelist = new ArrayList<String>();
|
||||
if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
|
||||
{
|
||||
whitelist.addAll( proxyConfig.getWhiteListPatterns() );
|
||||
}
|
||||
connector.setWhitelist( whitelist );
|
||||
|
||||
// Get other connectors
|
||||
List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
|
||||
if ( connectors == null )
|
||||
{
|
||||
// Create if we are the first.
|
||||
connectors = new ArrayList<ProxyConnector>();
|
||||
}
|
||||
|
||||
// Add the connector.
|
||||
connectors.add( connector );
|
||||
|
||||
// Ensure the list is sorted.
|
||||
Collections.sort( connectors, proxyOrderSorter );
|
||||
|
||||
// Set the key to the list of connectors.
|
||||
this.proxyConnectorMap.put( key, connectors );
|
||||
}
|
||||
catch ( RepositoryNotFoundException e )
|
||||
{
|
||||
whitelist.addAll( proxyConfig.getWhiteListPatterns() );
|
||||
getLogger().warn( "Unable to use proxy connector: " + e.getMessage(), e );
|
||||
}
|
||||
connector.setWhitelist( whitelist );
|
||||
|
||||
// Get other connectors
|
||||
List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
|
||||
if ( connectors == null )
|
||||
catch ( RepositoryException e )
|
||||
{
|
||||
// Create if we are the first.
|
||||
connectors = new ArrayList<ProxyConnector>();
|
||||
getLogger().warn( "Unable to use proxy connector: " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
// Add the connector.
|
||||
connectors.add( connector );
|
||||
|
||||
// Ensure the list is sorted.
|
||||
Collections.sort( connectors, proxyOrderSorter );
|
||||
|
||||
// Set the key to the list of connectors.
|
||||
this.proxyConnectorMap.put( key, connectors );
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -897,16 +881,6 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
}
|
||||
|
||||
private RemoteRepositoryConfiguration getRemoteRepository( String repoId )
|
||||
{
|
||||
return archivaConfiguration.getConfiguration().findRemoteRepositoryById( repoId );
|
||||
}
|
||||
|
||||
private ManagedRepositoryConfiguration getManagedRepository( String repoId )
|
||||
{
|
||||
return archivaConfiguration.getConfiguration().findManagedRepositoryById( repoId );
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
throws InitializationException
|
||||
{
|
||||
|
|
|
@ -19,8 +19,8 @@ package org.apache.maven.archiva.proxy;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.connector.RepositoryConnector;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
@ -36,9 +36,9 @@ import java.util.Map;
|
|||
public class ProxyConnector
|
||||
implements RepositoryConnector
|
||||
{
|
||||
private ManagedRepositoryConfiguration sourceRepository;
|
||||
private ManagedRepositoryContent sourceRepository;
|
||||
|
||||
private RemoteRepositoryConfiguration targetRepository;
|
||||
private RemoteRepositoryContent targetRepository;
|
||||
|
||||
private List<String> blacklist;
|
||||
|
||||
|
@ -60,22 +60,22 @@ public class ProxyConnector
|
|||
this.blacklist = blacklist;
|
||||
}
|
||||
|
||||
public ManagedRepositoryConfiguration getSourceRepository()
|
||||
public ManagedRepositoryContent getSourceRepository()
|
||||
{
|
||||
return sourceRepository;
|
||||
}
|
||||
|
||||
public void setSourceRepository( ManagedRepositoryConfiguration sourceRepository )
|
||||
public void setSourceRepository( ManagedRepositoryContent sourceRepository )
|
||||
{
|
||||
this.sourceRepository = sourceRepository;
|
||||
}
|
||||
|
||||
public RemoteRepositoryConfiguration getTargetRepository()
|
||||
public RemoteRepositoryContent getTargetRepository()
|
||||
{
|
||||
return targetRepository;
|
||||
}
|
||||
|
||||
public void setTargetRepository( RemoteRepositoryConfiguration targetRepository )
|
||||
public void setTargetRepository( RemoteRepositoryContent targetRepository )
|
||||
{
|
||||
this.targetRepository = targetRepository;
|
||||
}
|
||||
|
@ -115,8 +115,8 @@ public class ProxyConnector
|
|||
StringBuffer sb = new StringBuffer();
|
||||
|
||||
sb.append( "ProxyConnector[\n" );
|
||||
sb.append( " source:" ).append( this.sourceRepository ).append( "\n" );
|
||||
sb.append( " target:" ).append( this.targetRepository ).append( "\n" );
|
||||
sb.append( " source: [managed] " ).append( this.sourceRepository.getRepoRoot() ).append( "\n" );
|
||||
sb.append( " target: [remote] " ).append( this.targetRepository.getRepository().getUrl() ).append( "\n" );
|
||||
sb.append( " proxyId:" ).append( this.proxyId ).append( "\n" );
|
||||
|
||||
Iterator<String> keys = this.policies.keySet().iterator();
|
||||
|
|
|
@ -24,7 +24,7 @@ import java.util.Comparator;
|
|||
/**
|
||||
* ProxyConnectorOrderComparator
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ProxyConnectorOrderComparator
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
|||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
@ -47,7 +48,7 @@ public interface RepositoryProxyConnectors
|
|||
* @return true if the fetch operation succeeded in obtaining content, false if no content was obtained.
|
||||
* @throws ProxyException if there was a problem fetching the content from the target repositories.
|
||||
*/
|
||||
public File fetchFromProxies( ManagedRepositoryConfiguration repository, ArtifactReference artifact )
|
||||
public File fetchFromProxies( ManagedRepositoryContent repository, ArtifactReference artifact )
|
||||
throws ProxyException;
|
||||
|
||||
/**
|
||||
|
@ -62,7 +63,7 @@ public interface RepositoryProxyConnectors
|
|||
* @return true if the fetch operation succeeded in obtaining content, false if no content was obtained.
|
||||
* @throws ProxyException if there was a problem fetching the content from the target repositories.
|
||||
*/
|
||||
public File fetchFromProxies( ManagedRepositoryConfiguration repository, VersionedReference metadata )
|
||||
public File fetchFromProxies( ManagedRepositoryContent repository, VersionedReference metadata )
|
||||
throws ProxyException;
|
||||
|
||||
/**
|
||||
|
@ -77,7 +78,7 @@ public interface RepositoryProxyConnectors
|
|||
* @return true if the fetch operation succeeded in obtaining content, false if no content was obtained.
|
||||
* @throws ProxyException if there was a problem fetching the content from the target repositories.
|
||||
*/
|
||||
public File fetchFromProxies( ManagedRepositoryConfiguration repository, ProjectReference metadata )
|
||||
public File fetchFromProxies( ManagedRepositoryContent repository, ProjectReference metadata )
|
||||
throws ProxyException;
|
||||
|
||||
/**
|
||||
|
@ -86,7 +87,7 @@ public interface RepositoryProxyConnectors
|
|||
* @param repository the source repository to look for.
|
||||
* @return the List of {@link ProxyConnector} objects.
|
||||
*/
|
||||
public List<ProxyConnector> getProxyConnectors( ManagedRepositoryConfiguration repository );
|
||||
public List<ProxyConnector> getProxyConnectors( ManagedRepositoryContent repository );
|
||||
|
||||
/**
|
||||
* Tests to see if the provided repository is a source repository for
|
||||
|
@ -96,5 +97,5 @@ public interface RepositoryProxyConnectors
|
|||
* @return true if there are proxy connectors that use the provided
|
||||
* repository as a source repository.
|
||||
*/
|
||||
public boolean hasProxies( ManagedRepositoryConfiguration repository );
|
||||
public boolean hasProxies( ManagedRepositoryContent repository );
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.apache.maven.archiva.policies.ChecksumPolicy;
|
|||
import org.apache.maven.archiva.policies.ReleasesPolicy;
|
||||
import org.apache.maven.archiva.policies.SnapshotsPolicy;
|
||||
import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
import org.apache.maven.wagon.Wagon;
|
||||
|
@ -95,16 +96,14 @@ public abstract class AbstractProxyTestCase
|
|||
|
||||
protected RepositoryProxyConnectors proxyHandler;
|
||||
|
||||
protected ManagedRepositoryConfiguration managedDefaultRepository;
|
||||
protected ManagedRepositoryContent managedDefaultRepository;
|
||||
|
||||
protected File managedDefaultDir;
|
||||
|
||||
protected ManagedRepositoryConfiguration managedLegacyRepository;
|
||||
protected ManagedRepositoryContent managedLegacyRepository;
|
||||
|
||||
protected File managedLegacyDir;
|
||||
|
||||
protected BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||
|
||||
protected MockConfiguration config;
|
||||
|
||||
protected void assertChecksums( File expectedFile, String expectedSha1Contents, String expectedMd5Contents )
|
||||
|
@ -163,12 +162,12 @@ public abstract class AbstractProxyTestCase
|
|||
return;
|
||||
}
|
||||
|
||||
Collection<File> tmpFiles = FileUtils.listFiles( workingDir, new String[]{"tmp"}, false );
|
||||
Collection<File> tmpFiles = FileUtils.listFiles( workingDir, new String[] { "tmp" }, false );
|
||||
if ( !tmpFiles.isEmpty() )
|
||||
{
|
||||
StringBuffer emsg = new StringBuffer();
|
||||
emsg.append( "Found Temp Files in dir: " ).append( workingDir.getPath() );
|
||||
for( File tfile: tmpFiles )
|
||||
for ( File tfile : tmpFiles )
|
||||
{
|
||||
emsg.append( "\n " ).append( tfile.getName() );
|
||||
}
|
||||
|
@ -220,8 +219,8 @@ public abstract class AbstractProxyTestCase
|
|||
{
|
||||
if ( !destination.exists() && !destination.mkdirs() )
|
||||
{
|
||||
throw new IOException(
|
||||
"Could not create destination directory '" + destination.getAbsolutePath() + "'." );
|
||||
throw new IOException( "Could not create destination directory '"
|
||||
+ destination.getAbsolutePath() + "'." );
|
||||
}
|
||||
|
||||
copyDirectoryStructure( file, destination );
|
||||
|
@ -234,33 +233,22 @@ public abstract class AbstractProxyTestCase
|
|||
}
|
||||
}
|
||||
|
||||
protected ArtifactReference createArtifactReference( String layoutType, String path )
|
||||
protected ManagedRepositoryContent createManagedLegacyRepository()
|
||||
throws Exception
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( layoutType );
|
||||
ArchivaArtifact artifact = layout.toArtifact( path );
|
||||
ArtifactReference ref = new ArtifactReference();
|
||||
ref.setGroupId( artifact.getGroupId() );
|
||||
ref.setArtifactId( artifact.getArtifactId() );
|
||||
ref.setVersion( artifact.getVersion() );
|
||||
ref.setClassifier( artifact.getClassifier() );
|
||||
ref.setType( artifact.getType() );
|
||||
return ref;
|
||||
}
|
||||
|
||||
protected ManagedRepositoryConfiguration createManagedLegacyRepository()
|
||||
{
|
||||
return createRepository( "testManagedLegacyRepo", "Test Managed (Legacy) Repository",
|
||||
"src/test/repositories/legacy-managed", "legacy" );
|
||||
}
|
||||
|
||||
protected ManagedRepositoryConfiguration createProxiedLegacyRepository()
|
||||
protected ManagedRepositoryContent createProxiedLegacyRepository()
|
||||
throws Exception
|
||||
{
|
||||
return createRepository( "testProxiedLegacyRepo", "Test Proxied (Legacy) Repository",
|
||||
"src/test/repositories/legacy-proxied", "legacy" );
|
||||
}
|
||||
|
||||
protected ManagedRepositoryConfiguration createRepository( String id, String name, String path, String layout )
|
||||
protected ManagedRepositoryContent createRepository( String id, String name, String path, String layout )
|
||||
throws Exception
|
||||
{
|
||||
ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration();
|
||||
repo.setId( id );
|
||||
|
@ -268,7 +256,10 @@ public abstract class AbstractProxyTestCase
|
|||
repo.setLocation( path );
|
||||
repo.setLayout( layout );
|
||||
|
||||
return repo;
|
||||
ManagedRepositoryContent repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class,
|
||||
layout );
|
||||
repoContent.setRepository( repo );
|
||||
return repoContent;
|
||||
}
|
||||
|
||||
protected UrlFailureCache lookupUrlFailureCache()
|
||||
|
@ -307,15 +298,15 @@ public abstract class AbstractProxyTestCase
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected void saveConnector( String sourceRepoId, String targetRepoId )
|
||||
{
|
||||
saveConnector( sourceRepoId, targetRepoId, ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
|
||||
SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
|
||||
}
|
||||
|
||||
protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy, String releasePolicy,
|
||||
String snapshotPolicy, String cacheFailuresPolicy )
|
||||
protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy,
|
||||
String releasePolicy, String snapshotPolicy, String cacheFailuresPolicy )
|
||||
{
|
||||
ProxyConnectorConfiguration connectorConfig = new ProxyConnectorConfiguration();
|
||||
connectorConfig.setSourceRepoId( sourceRepoId );
|
||||
|
@ -396,21 +387,18 @@ public abstract class AbstractProxyTestCase
|
|||
{
|
||||
super.setUp();
|
||||
|
||||
layoutFactory = (BidirectionalRepositoryLayoutFactory) lookup( BidirectionalRepositoryLayoutFactory.class
|
||||
.getName() );
|
||||
|
||||
config = (MockConfiguration) lookup( ArchivaConfiguration.class.getName(), "mock" );
|
||||
|
||||
// Setup source repository (using default layout)
|
||||
String repoPath = "target/test-repository/managed/" + getName();
|
||||
File repoLocation = getTestFile( repoPath );
|
||||
|
||||
managedDefaultRepository =
|
||||
createRepository( ID_DEFAULT_MANAGED, "Default Managed Repository", repoPath, "default" );
|
||||
managedDefaultRepository = createRepository( ID_DEFAULT_MANAGED, "Default Managed Repository", repoPath,
|
||||
"default" );
|
||||
|
||||
managedDefaultDir = new File( managedDefaultRepository.getLocation() );
|
||||
managedDefaultDir = new File( managedDefaultRepository.getRepoRoot() );
|
||||
|
||||
ManagedRepositoryConfiguration repoConfig = managedDefaultRepository;
|
||||
ManagedRepositoryConfiguration repoConfig = managedDefaultRepository.getRepository();
|
||||
|
||||
config.getConfiguration().addManagedRepository( repoConfig );
|
||||
|
||||
|
@ -422,23 +410,23 @@ public abstract class AbstractProxyTestCase
|
|||
managedLegacyRepository = createRepository( ID_LEGACY_MANAGED, "Legacy Managed Repository",
|
||||
REPOPATH_LEGACY_MANAGED_TARGET, "legacy" );
|
||||
|
||||
managedLegacyDir = new File( managedLegacyRepository.getLocation() );
|
||||
managedLegacyDir = new File( managedLegacyRepository.getRepoRoot() );
|
||||
|
||||
repoConfig = managedLegacyRepository;
|
||||
repoConfig = managedLegacyRepository.getRepository();
|
||||
|
||||
config.getConfiguration().addManagedRepository( repoConfig );
|
||||
|
||||
// Setup target (proxied to) repository.
|
||||
saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1",
|
||||
new File( REPOPATH_PROXIED1 ).toURL().toExternalForm(), "default" );
|
||||
saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1", new File( REPOPATH_PROXIED1 ).toURL()
|
||||
.toExternalForm(), "default" );
|
||||
|
||||
// Setup target (proxied to) repository.
|
||||
saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2",
|
||||
new File( REPOPATH_PROXIED2 ).toURL().toExternalForm(), "default" );
|
||||
saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2", new File( REPOPATH_PROXIED2 ).toURL()
|
||||
.toExternalForm(), "default" );
|
||||
|
||||
// Setup target (proxied to) repository using legacy layout.
|
||||
saveRemoteRepositoryConfig( ID_LEGACY_PROXIED, "Proxied Legacy Repository",
|
||||
new File( REPOPATH_PROXIED_LEGACY ).toURL().toExternalForm(), "legacy" );
|
||||
saveRemoteRepositoryConfig( ID_LEGACY_PROXIED, "Proxied Legacy Repository", new File( REPOPATH_PROXIED_LEGACY )
|
||||
.toURL().toExternalForm(), "legacy" );
|
||||
|
||||
// Setup the proxy handler.
|
||||
proxyHandler = (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
|
||||
|
@ -486,8 +474,8 @@ public abstract class AbstractProxyTestCase
|
|||
if ( !sourceDir.exists() )
|
||||
{
|
||||
// This is just a warning.
|
||||
System.err.println(
|
||||
"[WARN] Skipping setup of testable managed repository, source dir does not exist: " + sourceDir );
|
||||
System.err.println( "[WARN] Skipping setup of testable managed repository, source dir does not exist: "
|
||||
+ sourceDir );
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ public class CacheFailuresTransferTest
|
|||
{
|
||||
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
|
||||
File expectedFile = new File( managedDefaultDir.getAbsoluteFile(), path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -79,7 +79,7 @@ public class CacheFailuresTransferTest
|
|||
{
|
||||
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
|
||||
File expectedFile = new File( managedDefaultDir.getAbsoluteFile(), path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -113,7 +113,7 @@ public class CacheFailuresTransferTest
|
|||
{
|
||||
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
|
|
@ -46,7 +46,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -71,7 +71,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -96,7 +96,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -120,7 +120,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -144,7 +144,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -168,7 +168,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -190,7 +190,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -215,7 +215,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -237,7 +237,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -262,7 +262,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -284,7 +284,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -309,7 +309,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -334,7 +334,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -359,7 +359,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -384,7 +384,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
FileUtils.deleteDirectory( expectedFile.getParentFile() );
|
||||
assertFalse( expectedFile.getParentFile().exists() );
|
||||
|
@ -429,7 +429,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -453,7 +453,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -477,7 +477,7 @@ public class ChecksumTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
// Ensure file isn't present first.
|
||||
expectedFile.delete();
|
||||
|
@ -80,7 +80,7 @@ public class ManagedDefaultTransferTest
|
|||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -111,7 +111,7 @@ public class ManagedDefaultTransferTest
|
|||
File expectedFile = new File( managedDefaultDir, path );
|
||||
|
||||
long originalModificationTime = expectedFile.lastModified();
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -163,7 +163,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
expectedFile.setLastModified( getPastDate().getTime() );
|
||||
|
@ -187,7 +187,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -220,7 +220,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -246,7 +246,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
||||
|
@ -273,7 +273,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -306,7 +306,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir.getAbsoluteFile(), path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -346,7 +346,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -373,7 +373,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", legacyPath );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -389,6 +389,7 @@ public class ManagedDefaultTransferTest
|
|||
assertNoTempFiles( expectedFile );
|
||||
}
|
||||
|
||||
/* FIXME
|
||||
public void testLegacyRequestPluginConvertedToDefaultPathInManagedRepo()
|
||||
throws Exception
|
||||
{
|
||||
|
@ -400,7 +401,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", legacyPath );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -415,6 +416,7 @@ public class ManagedDefaultTransferTest
|
|||
assertFileEquals( expectedFile, downloadedFile, proxiedFile );
|
||||
assertNoTempFiles( expectedFile );
|
||||
}
|
||||
*/
|
||||
|
||||
public void testLegacyProxyRepoGetNotPresent()
|
||||
throws Exception
|
||||
|
@ -423,7 +425,7 @@ public class ManagedDefaultTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
|
|
@ -42,7 +42,7 @@ public class ManagedLegacyTransferTest
|
|||
{
|
||||
String path = "org.apache.maven.test/jars/get-default-layout-1.0.jar";
|
||||
File expectedFile = new File( managedLegacyDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", path );
|
||||
ArtifactReference artifact = managedLegacyRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -67,7 +67,7 @@ public class ManagedLegacyTransferTest
|
|||
{
|
||||
String path = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
|
||||
File expectedFile = new File( managedLegacyDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", path );
|
||||
ArtifactReference artifact = managedLegacyRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -88,7 +88,7 @@ public class ManagedLegacyTransferTest
|
|||
{
|
||||
String path = "org.apache.maven.test/jars/get-default-layout-1.0.jar";
|
||||
File expectedFile = new File( managedLegacyDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", path );
|
||||
ArtifactReference artifact = managedLegacyRepository.toArtifactReference( path );
|
||||
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
||||
|
@ -111,7 +111,7 @@ public class ManagedLegacyTransferTest
|
|||
{
|
||||
String path = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
|
||||
File expectedFile = new File( managedLegacyDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", path );
|
||||
ArtifactReference artifact = managedLegacyRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -126,6 +126,7 @@ public class ManagedLegacyTransferTest
|
|||
assertNoTempFiles( expectedFile );
|
||||
}
|
||||
|
||||
/* FIXME
|
||||
public void testDefaultRequestConvertedToLegacyPathInManagedRepo()
|
||||
throws Exception
|
||||
{
|
||||
|
@ -135,7 +136,7 @@ public class ManagedLegacyTransferTest
|
|||
String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
|
||||
String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
|
||||
File expectedFile = new File( managedLegacyDir, legacyPath );
|
||||
ArtifactReference artifact = createArtifactReference( "legacy", legacyPath );
|
||||
ArtifactReference artifact = managedLegacyRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -150,4 +151,5 @@ public class ManagedLegacyTransferTest
|
|||
assertFileEquals( expectedFile, downloadedFile, proxiedFile );
|
||||
assertNoTempFiles( expectedFile );
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ public class MetadataTransferTest
|
|||
assertFetchProject( requestedResource );
|
||||
|
||||
// Nothing fetched. Should only contain contents of what is in the repository.
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0", "1.1", "2.0" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0", "1.1", "2.0" }, "2.0", "2.0" );
|
||||
}
|
||||
|
||||
public void testGetProjectMetadataProxiedNotLocalMultipleRemotes()
|
||||
|
@ -155,7 +155,7 @@ public class MetadataTransferTest
|
|||
assertFetchProject( requestedResource );
|
||||
|
||||
// Nothing fetched. Should only contain contents of what is in the repository.
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0", "1.0.1" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0", "1.0.1" }, "1.0.1", "1.0.1" );
|
||||
assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[] { "1.0" } );
|
||||
assertRepoProjectMetadata( ID_PROXIED2, requestedResource, new String[] { "1.0.1" } );
|
||||
}
|
||||
|
@ -206,7 +206,7 @@ public class MetadataTransferTest
|
|||
assertFetchProject( requestedResource );
|
||||
|
||||
// Remote fetched. Local created/updated.
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0.5" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0.5" }, "1.0.5", "1.0.5" );
|
||||
assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[] { "1.0.5" } );
|
||||
}
|
||||
|
||||
|
@ -223,7 +223,7 @@ public class MetadataTransferTest
|
|||
saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
|
||||
SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
|
||||
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0" }, null, null );
|
||||
assertNoRepoMetadata( ID_PROXIED1, requestedResource );
|
||||
assertNoRepoMetadata( ID_PROXIED2, requestedResource );
|
||||
|
||||
|
@ -231,7 +231,7 @@ public class MetadataTransferTest
|
|||
assertFetchProject( requestedResource );
|
||||
|
||||
// metadata fetched from both repos, and merged with local version.
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0", "1.0.1", "2.0" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0", "1.0.1", "2.0" }, "2.0", "2.0" );
|
||||
assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[] { "1.0", "2.0" } );
|
||||
assertRepoProjectMetadata( ID_PROXIED2, requestedResource, new String[] { "1.0", "1.0.1" } );
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ public class MetadataTransferTest
|
|||
saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
|
||||
SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
|
||||
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0-beta-2" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0-beta-2" }, null, null );
|
||||
assertNoRepoMetadata( ID_PROXIED1, requestedResource );
|
||||
assertNoRepoMetadata( ID_PROXIED2, requestedResource );
|
||||
|
||||
|
@ -257,7 +257,7 @@ public class MetadataTransferTest
|
|||
assertFetchProject( requestedResource );
|
||||
|
||||
// metadata not fetched from both repos, and local version exists.
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0-beta-2" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0-beta-2" }, "1.0-beta-2", "1.0-beta-2" );
|
||||
assertNoRepoMetadata( ID_PROXIED1, requestedResource );
|
||||
assertNoRepoMetadata( ID_PROXIED2, requestedResource );
|
||||
}
|
||||
|
@ -273,14 +273,14 @@ public class MetadataTransferTest
|
|||
saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
|
||||
SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
|
||||
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0.8", "1.0.22" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0.8", "1.0.22" }, null, null );
|
||||
assertNoRepoMetadata( ID_PROXIED1, requestedResource );
|
||||
|
||||
// One proxy setup, metadata fetched from remote, local exists.
|
||||
assertFetchProject( requestedResource );
|
||||
|
||||
// Remote fetched. Local updated.
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0.8", "1.0.22", "2.0" } );
|
||||
assertProjectMetadataContents( requestedResource, new String[] { "1.0.8", "1.0.22", "2.0" }, "2.0", "2.0" );
|
||||
assertRepoProjectMetadata( ID_PROXIED1, requestedResource, new String[] { "1.0.22", "2.0" } );
|
||||
}
|
||||
|
||||
|
@ -819,7 +819,8 @@ public class MetadataTransferTest
|
|||
* @param requestedResource the requested resource
|
||||
* @throws Exception
|
||||
*/
|
||||
private void assertProjectMetadataContents( String requestedResource, String expectedVersions[] )
|
||||
private void assertProjectMetadataContents( String requestedResource, String expectedVersions[],
|
||||
String latestVersion, String releaseVersion )
|
||||
throws Exception
|
||||
{
|
||||
File actualFile = new File( managedDefaultDir, requestedResource );
|
||||
|
@ -832,6 +833,8 @@ public class MetadataTransferTest
|
|||
ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata();
|
||||
m.setGroupId( metadata.getGroupId() );
|
||||
m.setArtifactId( metadata.getArtifactId() );
|
||||
m.setLatestVersion( latestVersion );
|
||||
m.setReleasedVersion( releaseVersion );
|
||||
|
||||
if ( expectedVersions != null )
|
||||
{
|
||||
|
|
|
@ -44,7 +44,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -65,7 +65,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -88,7 +88,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
expectedFile.setLastModified( getPastDate().getTime() );
|
||||
|
@ -111,7 +111,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
expectedFile.setLastModified( getFutureDate().getTime() );
|
||||
|
@ -201,7 +201,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -225,7 +225,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
@ -249,7 +249,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -274,7 +274,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
expectedFile.delete();
|
||||
assertFalse( expectedFile.exists() );
|
||||
|
@ -300,7 +300,7 @@ public class SnapshotTransferTest
|
|||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
|
||||
|
||||
assertTrue( expectedFile.exists() );
|
||||
|
||||
|
|
|
@ -29,6 +29,19 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -45,8 +58,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -29,6 +29,19 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -45,8 +58,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -29,6 +29,19 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -45,8 +58,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -29,6 +29,19 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -45,8 +58,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -29,16 +29,26 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
<implementation>org.apache.maven.archiva.repository.metadata.MetadataTools</implementation>
|
||||
<description>MetadataTools</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||
<field-name>filetypes</field-name>
|
||||
|
@ -67,12 +77,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
<field-name>metadataTools</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -29,6 +29,19 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -45,12 +58,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
<field-name>metadataTools</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -29,6 +29,19 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
<implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
|
||||
<description>RepositoryContentRequest</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>archivaConfiguration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -45,8 +58,11 @@
|
|||
<field-name>wagons</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
<role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
|
||||
<role-hint>mocked</role-hint>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.metadata.MetadataTools</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package org.apache.maven.archiva.repository.project.filters;
|
||||
package org.apache.maven.archiva.repository;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
|
@ -19,26 +19,33 @@ package org.apache.maven.archiva.repository.project.filters;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests
|
||||
* ContentNotFoundException is thrown in response for requests for content that is not the repository.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
public class ContentNotFoundException
|
||||
extends RepositoryException
|
||||
{
|
||||
|
||||
public static Test suite()
|
||||
public ContentNotFoundException()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.project.filters" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite( ProjectModelExpressionExpanderTest.class );
|
||||
suite.addTestSuite( EffectiveProjectModelFilterTest.class );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
super();
|
||||
}
|
||||
|
||||
public ContentNotFoundException( String message, Throwable cause )
|
||||
{
|
||||
super( message, cause );
|
||||
}
|
||||
|
||||
public ContentNotFoundException( String message )
|
||||
{
|
||||
super( message );
|
||||
}
|
||||
|
||||
public ContentNotFoundException( Throwable cause )
|
||||
{
|
||||
super( cause );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,209 @@
|
|||
package org.apache.maven.archiva.repository;
|
||||
|
||||
/*
|
||||
* 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.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* ManagedRepositoryContent interface for interacting with a managed repository in an abstract way,
|
||||
* without the need for processing based on filesystem paths, or working with the database.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public interface ManagedRepositoryContent
|
||||
{
|
||||
/**
|
||||
* Delete from the managed repository all files / directories associated with the
|
||||
* provided version reference.
|
||||
*
|
||||
* @param reference the version reference to delete.
|
||||
* @throws ContentNotFoundException
|
||||
*/
|
||||
public void deleteVersion( VersionedReference reference )
|
||||
throws ContentNotFoundException;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Convenience method to get the repository id.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Equivalent to calling <code>.getRepository().getId()</code>
|
||||
* </p>
|
||||
*
|
||||
* @return the repository id.
|
||||
*/
|
||||
public String getId();
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Gather up the list of related artifacts to the ArtifactReference provided.
|
||||
* This typically inclues the pom files, and those things with
|
||||
* classifiers (such as doc, source code, test libs, etc...)
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* <strong>NOTE:</strong> Some layouts (such as maven 1 "legacy") are not compatible with this query.
|
||||
* </p>
|
||||
*
|
||||
* @param reference the reference to work off of.
|
||||
* @return the set of ArtifactReferences for related artifacts.
|
||||
* @throws ContentNotFoundException if the initial artifact reference does not exist within the repository.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
|
||||
throws ContentNotFoundException, LayoutException;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Convenience method to get the repository (on disk) root directory.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Equivalent to calling <code>.getRepository().getLocation()</code>
|
||||
* </p>
|
||||
*
|
||||
* @return the repository (on disk) root directory.
|
||||
*/
|
||||
public String getRepoRoot();
|
||||
|
||||
/**
|
||||
* Get the repository configuration associated with this
|
||||
* repository content.
|
||||
*
|
||||
* @return the repository that is associated with this repository content.
|
||||
*/
|
||||
public ManagedRepositoryConfiguration getRepository();
|
||||
|
||||
/**
|
||||
* Given a specific ProjectReference, return the list of available versions for
|
||||
* that project reference.
|
||||
*
|
||||
* @param reference the project reference to work off of.
|
||||
* @return the list of versions found for that project reference.
|
||||
* @throws ContentNotFoundException if the project reference does nto exist within the repository.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public Set<String> getVersions( ProjectReference reference )
|
||||
throws ContentNotFoundException, LayoutException;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Given a specific VersionedReference, return the list of available versions for that
|
||||
* versioned reference.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* <strong>NOTE:</strong> This is really only useful when working with SNAPSHOTs.
|
||||
* </p>
|
||||
*
|
||||
* @param reference the versioned reference to work off of.
|
||||
* @return the set of versions found.
|
||||
* @throws ContentNotFoundException if the versioned reference does not exist within the repository.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public Set<String> getVersions( VersionedReference reference )
|
||||
throws ContentNotFoundException, LayoutException;
|
||||
|
||||
/**
|
||||
* Determines if the artifact referenced exists in the repository.
|
||||
*
|
||||
* @param reference the artifact reference to check for.
|
||||
* @return true if the artifact referenced exists.
|
||||
*/
|
||||
public boolean hasContent( ArtifactReference reference );
|
||||
|
||||
/**
|
||||
* Determines if the project referenced exists in the repository.
|
||||
*
|
||||
* @param reference the project reference to check for.
|
||||
* @return true it the project referenced exists.
|
||||
*/
|
||||
public boolean hasContent( ProjectReference reference );
|
||||
|
||||
/**
|
||||
* Determines if the version reference exists in the repository.
|
||||
*
|
||||
* @param reference the version reference to check for.
|
||||
* @return true if the version referenced exists.
|
||||
*/
|
||||
public boolean hasContent( VersionedReference reference );
|
||||
|
||||
/**
|
||||
* Set the repository configuration to associate with this
|
||||
* repository content.
|
||||
*
|
||||
* @param repo the repository to associate with this repository content.
|
||||
*/
|
||||
public void setRepository( ManagedRepositoryConfiguration repo );
|
||||
|
||||
/**
|
||||
* Given a repository relative path to a filename, return the {@link VersionedReference} object suitable for the path.
|
||||
*
|
||||
* @param path the path relative to the repository base dir for the artifact.
|
||||
* @return the {@link ArtifactReference} representing the path. (or null if path cannot be converted to
|
||||
* a {@link ArtifactReference})
|
||||
* @throws LayoutException if there was a problem converting the path to an artifact.
|
||||
*/
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException;
|
||||
|
||||
/**
|
||||
* Given an ArtifactReference, return the file reference to the artifact.
|
||||
*
|
||||
* @param reference the artifact reference to use.
|
||||
* @return the relative path to the artifact.
|
||||
*/
|
||||
public File toFile( ArtifactReference reference );
|
||||
|
||||
/**
|
||||
* Given a project reference, return the path to the metadata for
|
||||
* the project.
|
||||
*
|
||||
* @param reference the reference to use.
|
||||
* @return the path to the metadata file, or null if no metadata is appropriate.
|
||||
*/
|
||||
public String toMetadataPath( ProjectReference reference );
|
||||
|
||||
/**
|
||||
* Given a versioned reference, return the path to the metadata for
|
||||
* the specific version of the project.
|
||||
*
|
||||
* @param reference the reference to use.
|
||||
* @return the path to the metadata file, or null if no metadata is appropriate.
|
||||
*/
|
||||
public String toMetadataPath( VersionedReference reference );
|
||||
|
||||
/**
|
||||
* Given an ArtifactReference, return the relative path to the artifact.
|
||||
*
|
||||
* @param reference the artifact reference to use.
|
||||
* @return the relative path to the artifact.
|
||||
*/
|
||||
public String toPath( ArtifactReference reference );
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
package org.apache.maven.archiva.repository;
|
||||
|
||||
/*
|
||||
* 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.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.RepositoryURL;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* RemoteRepositoryContent interface for interacting with a remote repository in an abstract way,
|
||||
* without the need for processing based on URLs, or working with the database.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public interface RemoteRepositoryContent
|
||||
{
|
||||
/**
|
||||
* <p>
|
||||
* Convenience method to get the repository id.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Equivalent to calling <code>.getRepository().getId()</code>
|
||||
* </p>
|
||||
*
|
||||
* @return the repository id.
|
||||
*/
|
||||
public String getId();
|
||||
|
||||
/**
|
||||
* Get the repository configuration associated with this
|
||||
* repository content.
|
||||
*
|
||||
* @return the repository that is associated with this repository content.
|
||||
*/
|
||||
public RemoteRepositoryConfiguration getRepository();
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Convenience method to get the repository url.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Equivalent to calling <code>new RepositoryURL( this.getRepository().getUrl() )</code>
|
||||
* </p>
|
||||
*
|
||||
* @return the repository url.
|
||||
*/
|
||||
public RepositoryURL getURL();
|
||||
|
||||
/**
|
||||
* Set the repository configuration to associate with this
|
||||
* repository content.
|
||||
*
|
||||
* @param repo the repository to associate with this repository content.
|
||||
*/
|
||||
public void setRepository( RemoteRepositoryConfiguration repo );
|
||||
|
||||
/**
|
||||
* Given a repository relative path to a filename, return the {@link VersionedReference} object suitable for the path.
|
||||
*
|
||||
* @param path the path relative to the repository base dir for the artifact.
|
||||
* @return the {@link ArtifactReference} representing the path. (or null if path cannot be converted to
|
||||
* a {@link ArtifactReference})
|
||||
* @throws LayoutException if there was a problem converting the path to an artifact.
|
||||
*/
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException;
|
||||
|
||||
/**
|
||||
* Given an ArtifactReference, return the relative path to the artifact.
|
||||
*
|
||||
* @param reference the artifact reference to use.
|
||||
* @return the relative path to the artifact.
|
||||
*/
|
||||
public String toPath( ArtifactReference reference );
|
||||
|
||||
/**
|
||||
* Given an ArtifactReference, return the url to the artifact.
|
||||
*
|
||||
* @param reference the artifact reference to use.
|
||||
* @return the relative path to the artifact.
|
||||
*/
|
||||
public RepositoryURL toURL( ArtifactReference reference );
|
||||
}
|
|
@ -0,0 +1,204 @@
|
|||
package org.apache.maven.archiva.repository;
|
||||
|
||||
/*
|
||||
* 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.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.codehaus.plexus.PlexusContainer;
|
||||
import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
|
||||
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
|
||||
import org.codehaus.plexus.context.Context;
|
||||
import org.codehaus.plexus.context.ContextException;
|
||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
|
||||
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 java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* RepositoryContentRequest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.repository.RepositoryContentFactory"
|
||||
*/
|
||||
public class RepositoryContentFactory
|
||||
implements Contextualizable, RegistryListener, Initializable
|
||||
{
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private ArchivaConfiguration archivaConfiguration;
|
||||
|
||||
private Map<String, ManagedRepositoryContent> managedContentMap;
|
||||
|
||||
private Map<String, RemoteRepositoryContent> remoteContentMap;
|
||||
|
||||
private PlexusContainer container;
|
||||
|
||||
/**
|
||||
* Get the ManagedRepositoryContent object for the repository Id specified.
|
||||
*
|
||||
* @param repoId the repository id to fetch.
|
||||
* @return the ManagedRepositoryContent object associated with the repository id.
|
||||
* @throws RepositoryNotFoundException if the repository id does not exist within the configuration.
|
||||
* @throws RepositoryException the repository content object cannot be loaded due to configuration issue.
|
||||
*/
|
||||
public ManagedRepositoryContent getManagedRepositoryContent( String repoId )
|
||||
throws RepositoryNotFoundException, RepositoryException
|
||||
{
|
||||
ManagedRepositoryContent repo = managedContentMap.get( repoId );
|
||||
|
||||
if ( repo != null )
|
||||
{
|
||||
return repo;
|
||||
}
|
||||
|
||||
ManagedRepositoryConfiguration repoConfig = archivaConfiguration.getConfiguration()
|
||||
.findManagedRepositoryById( repoId );
|
||||
if ( repoConfig == null )
|
||||
{
|
||||
throw new RepositoryNotFoundException( "Unable to find managed repository configuration for id:" + repoId );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
repo = (ManagedRepositoryContent) container.lookup( ManagedRepositoryContent.class, repoConfig.getLayout() );
|
||||
repo.setRepository( repoConfig );
|
||||
managedContentMap.put( repoId, repo );
|
||||
}
|
||||
catch ( ComponentLookupException e )
|
||||
{
|
||||
throw new RepositoryException( "Specified layout [" + repoConfig.getLayout()
|
||||
+ "] on managed repository id [" + repoId + "] is not valid.", e );
|
||||
}
|
||||
|
||||
return repo;
|
||||
}
|
||||
|
||||
public RemoteRepositoryContent getRemoteRepositoryContent( String repoId )
|
||||
throws RepositoryNotFoundException, RepositoryException
|
||||
{
|
||||
RemoteRepositoryContent repo = remoteContentMap.get( repoId );
|
||||
|
||||
if ( repo != null )
|
||||
{
|
||||
return repo;
|
||||
}
|
||||
|
||||
RemoteRepositoryConfiguration repoConfig = archivaConfiguration.getConfiguration()
|
||||
.findRemoteRepositoryById( repoId );
|
||||
if ( repoConfig == null )
|
||||
{
|
||||
throw new RepositoryNotFoundException( "Unable to find remote repository configuration for id:" + repoId );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
repo = (RemoteRepositoryContent) container.lookup( RemoteRepositoryContent.class, repoConfig.getLayout() );
|
||||
repo.setRepository( repoConfig );
|
||||
remoteContentMap.put( repoId, repo );
|
||||
}
|
||||
catch ( ComponentLookupException e )
|
||||
{
|
||||
throw new RepositoryException( "Specified layout [" + repoConfig.getLayout()
|
||||
+ "] on remote repository id [" + repoId + "] is not valid.", e );
|
||||
}
|
||||
|
||||
return repo;
|
||||
}
|
||||
|
||||
public void contextualize( Context context )
|
||||
throws ContextException
|
||||
{
|
||||
container = (PlexusContainer) context.get( "plexus" );
|
||||
}
|
||||
|
||||
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||
{
|
||||
if ( ConfigurationNames.isManagedRepositories( propertyName )
|
||||
|| ConfigurationNames.isRemoteRepositories( propertyName ) )
|
||||
{
|
||||
initMaps();
|
||||
}
|
||||
}
|
||||
|
||||
public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
throws InitializationException
|
||||
{
|
||||
managedContentMap = new HashMap<String, ManagedRepositoryContent>();
|
||||
remoteContentMap = new HashMap<String, RemoteRepositoryContent>();
|
||||
|
||||
archivaConfiguration.addChangeListener( this );
|
||||
}
|
||||
|
||||
private void initMaps()
|
||||
{
|
||||
synchronized ( managedContentMap )
|
||||
{
|
||||
// First, return any references to the container.
|
||||
for ( ManagedRepositoryContent repo : managedContentMap.values() )
|
||||
{
|
||||
try
|
||||
{
|
||||
container.release( repo );
|
||||
}
|
||||
catch ( ComponentLifecycleException e )
|
||||
{
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
|
||||
// Next clear the map.
|
||||
managedContentMap.clear();
|
||||
}
|
||||
|
||||
synchronized ( remoteContentMap )
|
||||
{
|
||||
// First, return any references to the container.
|
||||
for ( RemoteRepositoryContent repo : remoteContentMap.values() )
|
||||
{
|
||||
try
|
||||
{
|
||||
container.release( repo );
|
||||
}
|
||||
catch ( ComponentLifecycleException e )
|
||||
{
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
|
||||
// Next clear the map.
|
||||
remoteContentMap.clear();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package org.apache.maven.archiva.repository.metadata;
|
||||
package org.apache.maven.archiva.repository;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
|
@ -19,26 +19,32 @@ package org.apache.maven.archiva.repository.metadata;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests
|
||||
* RepositoryNotFoundException
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
public class RepositoryNotFoundException
|
||||
extends RepositoryException
|
||||
{
|
||||
|
||||
public static Test suite()
|
||||
public RepositoryNotFoundException()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.metadata" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite( RepositoryMetadataWriterTest.class );
|
||||
suite.addTestSuite( RepositoryMetadataReaderTest.class );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
|
||||
public RepositoryNotFoundException( String message, Throwable cause )
|
||||
{
|
||||
super( message, cause );
|
||||
}
|
||||
|
||||
public RepositoryNotFoundException( String message )
|
||||
{
|
||||
super( message );
|
||||
}
|
||||
|
||||
public RepositoryNotFoundException( Throwable cause )
|
||||
{
|
||||
super( cause );
|
||||
}
|
||||
}
|
|
@ -19,8 +19,8 @@ package org.apache.maven.archiva.repository.connector;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -32,9 +32,9 @@ import java.util.List;
|
|||
*/
|
||||
public interface RepositoryConnector
|
||||
{
|
||||
public ManagedRepositoryConfiguration getSourceRepository();
|
||||
public ManagedRepositoryContent getSourceRepository();
|
||||
|
||||
public RemoteRepositoryConfiguration getTargetRepository();
|
||||
public RemoteRepositoryContent getTargetRepository();
|
||||
|
||||
public List<String> getBlacklist();
|
||||
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* AbstractDefaultRepositoryContent - common methods for working with default (maven 2) layout.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractDefaultRepositoryContent
|
||||
{
|
||||
public static final String MAVEN_METADATA = "maven-metadata.xml";
|
||||
|
||||
protected static final char PATH_SEPARATOR = '/';
|
||||
|
||||
protected static final char GROUP_SEPARATOR = '.';
|
||||
|
||||
protected static final char ARTIFACT_SEPARATOR = '-';
|
||||
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
return DefaultPathParser.toArtifactReference( path );
|
||||
}
|
||||
|
||||
public String toMetadataPath( ProjectReference reference )
|
||||
{
|
||||
StringBuffer path = new StringBuffer();
|
||||
|
||||
path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
|
||||
path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
|
||||
path.append( MAVEN_METADATA );
|
||||
|
||||
return path.toString();
|
||||
}
|
||||
|
||||
public String toMetadataPath( VersionedReference reference )
|
||||
{
|
||||
StringBuffer path = new StringBuffer();
|
||||
|
||||
path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
|
||||
path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
|
||||
if ( reference.getVersion() != null )
|
||||
{
|
||||
// add the version only if it is present
|
||||
path.append( VersionUtil.getBaseVersion( reference.getVersion() ) ).append( PATH_SEPARATOR );
|
||||
}
|
||||
path.append( MAVEN_METADATA );
|
||||
|
||||
return path.toString();
|
||||
}
|
||||
|
||||
public String toPath( ArtifactReference reference )
|
||||
{
|
||||
if ( reference == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "Artifact reference cannot be null" );
|
||||
}
|
||||
|
||||
String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
|
||||
return toPath( reference.getGroupId(), reference.getArtifactId(), baseVersion, reference.getVersion(),
|
||||
reference.getClassifier(), reference.getType() );
|
||||
}
|
||||
|
||||
private String formatAsDirectory( String directory )
|
||||
{
|
||||
return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
|
||||
}
|
||||
|
||||
private String toPath( String groupId, String artifactId, String baseVersion, String version, String classifier,
|
||||
String type )
|
||||
{
|
||||
StringBuffer path = new StringBuffer();
|
||||
|
||||
path.append( formatAsDirectory( groupId ) ).append( PATH_SEPARATOR );
|
||||
path.append( artifactId ).append( PATH_SEPARATOR );
|
||||
|
||||
if ( baseVersion != null )
|
||||
{
|
||||
path.append( baseVersion ).append( PATH_SEPARATOR );
|
||||
if ( ( version != null ) && ( type != null ) )
|
||||
{
|
||||
path.append( artifactId ).append( ARTIFACT_SEPARATOR ).append( version );
|
||||
|
||||
if ( StringUtils.isNotBlank( classifier ) )
|
||||
{
|
||||
path.append( ARTIFACT_SEPARATOR ).append( classifier );
|
||||
}
|
||||
|
||||
path.append( GROUP_SEPARATOR ).append( ArtifactExtensionMapping.getExtension( type ) );
|
||||
}
|
||||
}
|
||||
|
||||
return path.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* AbstractLegacyRepositoryContent
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractLegacyRepositoryContent
|
||||
{
|
||||
private static final String DIR_JAVADOC = "javadoc.jars";
|
||||
|
||||
private static final String DIR_JAVA_SOURCE = "java-sources";
|
||||
|
||||
private static final String PATH_SEPARATOR = "/";
|
||||
|
||||
private static final Map<String, String> typeToDirectoryMap;
|
||||
|
||||
static
|
||||
{
|
||||
typeToDirectoryMap = new HashMap<String, String>();
|
||||
typeToDirectoryMap.put( "ejb-client", "ejb" );
|
||||
typeToDirectoryMap.put( "distribution-tgz", "distribution" );
|
||||
typeToDirectoryMap.put( "distribution-zip", "distribution" );
|
||||
}
|
||||
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
return LegacyPathParser.toArtifactReference( path );
|
||||
}
|
||||
|
||||
public String toPath( ArtifactReference reference )
|
||||
{
|
||||
if ( reference == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "Artifact reference cannot be null" );
|
||||
}
|
||||
|
||||
return toPath( reference.getGroupId(), reference.getArtifactId(), reference.getVersion(), reference
|
||||
.getClassifier(), reference.getType() );
|
||||
}
|
||||
|
||||
private String toPath( String groupId, String artifactId, String version, String classifier, String type )
|
||||
{
|
||||
StringBuffer path = new StringBuffer();
|
||||
|
||||
path.append( groupId ).append( PATH_SEPARATOR );
|
||||
path.append( getDirectory( classifier, type ) ).append( PATH_SEPARATOR );
|
||||
|
||||
if ( version != null )
|
||||
{
|
||||
path.append( artifactId ).append( '-' ).append( version );
|
||||
|
||||
if ( StringUtils.isNotBlank( classifier ) )
|
||||
{
|
||||
path.append( '-' ).append( classifier );
|
||||
}
|
||||
|
||||
path.append( '.' ).append( ArtifactExtensionMapping.getExtension( type ) );
|
||||
}
|
||||
|
||||
return path.toString();
|
||||
}
|
||||
|
||||
private String getDirectory( String classifier, String type )
|
||||
{
|
||||
// Special Cases involving type + classifier
|
||||
if ( "jar".equals( type ) && StringUtils.isNotBlank( classifier ) )
|
||||
{
|
||||
if ( "sources".equals( classifier ) )
|
||||
{
|
||||
return DIR_JAVA_SOURCE;
|
||||
}
|
||||
|
||||
if ( "javadoc".equals( classifier ) )
|
||||
{
|
||||
return DIR_JAVADOC;
|
||||
}
|
||||
}
|
||||
|
||||
// Special Cases involving only type.
|
||||
String dirname = (String) typeToDirectoryMap.get( type );
|
||||
|
||||
if ( dirname != null )
|
||||
{
|
||||
return dirname + "s";
|
||||
}
|
||||
|
||||
// Default process.
|
||||
return type + "s";
|
||||
}
|
||||
}
|
|
@ -19,22 +19,25 @@ package org.apache.maven.archiva.repository.content;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* AbstractArtifactExtensionMapping
|
||||
* ArtifactExtensionMapping
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractArtifactExtensionMapping
|
||||
public class ArtifactExtensionMapping
|
||||
{
|
||||
protected final Map typeToExtensionMap;
|
||||
protected static final Map<String, String> typeToExtensionMap;
|
||||
|
||||
public AbstractArtifactExtensionMapping()
|
||||
static
|
||||
{
|
||||
typeToExtensionMap = new HashMap();
|
||||
typeToExtensionMap = new HashMap<String, String>();
|
||||
typeToExtensionMap.put( "ejb-client", "jar" );
|
||||
typeToExtensionMap.put( "ejb", "jar" );
|
||||
typeToExtensionMap.put( "distribution-tgz", "tar.gz" );
|
||||
|
@ -49,7 +52,7 @@ public abstract class AbstractArtifactExtensionMapping
|
|||
typeToExtensionMap.put( "maven-archetype", "jar" );
|
||||
}
|
||||
|
||||
public String getExtension( String type )
|
||||
public static String getExtension( String type )
|
||||
{
|
||||
// Try specialized types first.
|
||||
if ( typeToExtensionMap.containsKey( type ) )
|
||||
|
@ -60,4 +63,50 @@ public abstract class AbstractArtifactExtensionMapping
|
|||
// Return type
|
||||
return type;
|
||||
}
|
||||
|
||||
public static String guessTypeFromFilename( File file )
|
||||
{
|
||||
return guessTypeFromFilename( file.getName() );
|
||||
}
|
||||
|
||||
public static String guessTypeFromFilename( String filename )
|
||||
{
|
||||
if ( StringUtils.isBlank( filename ) )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String normalizedName = filename.toLowerCase().trim();
|
||||
int idx = normalizedName.lastIndexOf( '.' );
|
||||
|
||||
if ( idx == ( -1 ) )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if ( normalizedName.endsWith( ".tar.gz" ) )
|
||||
{
|
||||
return "distribution-tgz";
|
||||
}
|
||||
if ( normalizedName.endsWith( ".tar.bz2" ) )
|
||||
{
|
||||
return "distribution-bzip";
|
||||
}
|
||||
else if ( normalizedName.endsWith( ".zip" ) )
|
||||
{
|
||||
return "distribution-zip";
|
||||
}
|
||||
else if ( normalizedName.endsWith( "-sources.jar" ) )
|
||||
{
|
||||
return "java-source";
|
||||
}
|
||||
else if ( normalizedName.endsWith( "-javadoc.jar" ) )
|
||||
{
|
||||
return "javadoc";
|
||||
}
|
||||
else
|
||||
{
|
||||
return normalizedName.substring( idx + 1 );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
|
||||
/**
|
||||
* DefaultArtifactExtensionMapping - extension mapping for Maven 2.x projects.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class DefaultArtifactExtensionMapping extends AbstractArtifactExtensionMapping
|
||||
{
|
||||
public DefaultArtifactExtensionMapping()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public String getType( String filename )
|
||||
{
|
||||
if ( StringUtils.isBlank( filename ) )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String normalizedName = filename.toLowerCase().trim();
|
||||
|
||||
if ( normalizedName.endsWith( ".tar.gz" ) )
|
||||
{
|
||||
return "distribution-tgz";
|
||||
}
|
||||
else if ( normalizedName.endsWith( ".zip" ) )
|
||||
{
|
||||
return "distribution-zip";
|
||||
}
|
||||
else if ( normalizedName.endsWith( "-sources.jar" ) )
|
||||
{
|
||||
return "java-source";
|
||||
}
|
||||
// TODO: handle type for -javadoc.jar ?
|
||||
else
|
||||
{
|
||||
int index = normalizedName.lastIndexOf( '.' );
|
||||
if ( index >= 0 )
|
||||
{
|
||||
return normalizedName.substring( index + 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IllegalArgumentException( "Filename " + filename + " does not have an extension." );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,184 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* DefaultPathParser is a parser for maven 2 (default layout) paths to ArtifactReference.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component role="org.apache.maven.archiva.repository.content.DefaultPathParser"
|
||||
*/
|
||||
public class DefaultPathParser
|
||||
{
|
||||
private static final String INVALID_ARTIFACT_PATH = "Invalid path to Artifact: ";
|
||||
|
||||
/**
|
||||
* Convert a path to an ArtifactReference.
|
||||
*
|
||||
* @param path
|
||||
* @return
|
||||
* @throws LayoutException
|
||||
*/
|
||||
protected static ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
if ( StringUtils.isBlank( path ) )
|
||||
{
|
||||
throw new LayoutException( "Unable to convert blank path." );
|
||||
}
|
||||
|
||||
ArtifactReference artifact = new ArtifactReference();
|
||||
|
||||
String normalizedPath = StringUtils.replace( path, "\\", "/" );
|
||||
String pathParts[] = StringUtils.split( normalizedPath, '/' );
|
||||
|
||||
/* Minimum parts.
|
||||
*
|
||||
* path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar"
|
||||
* path[0] = "commons-lang"; // The Group ID
|
||||
* path[1] = "commons-lang"; // The Artifact ID
|
||||
* path[2] = "2.1"; // The Version
|
||||
* path[3] = "commons-lang-2.1.jar" // The filename.
|
||||
*/
|
||||
|
||||
if ( pathParts.length < 4 )
|
||||
{
|
||||
// Illegal Path Parts Length.
|
||||
throw new LayoutException( "Not enough parts to the path [" + path
|
||||
+ "] to construct an ArchivaArtifact from. (Requires at least 4 parts)" );
|
||||
}
|
||||
|
||||
// Maven 2.x path.
|
||||
int partCount = pathParts.length;
|
||||
int filenamePos = partCount - 1;
|
||||
int baseVersionPos = partCount - 2;
|
||||
int artifactIdPos = partCount - 3;
|
||||
int groupIdPos = partCount - 4;
|
||||
|
||||
// Second to last is the baseVersion (the directory version)
|
||||
String baseVersion = pathParts[baseVersionPos];
|
||||
|
||||
// Third to last is the artifact Id.
|
||||
artifact.setArtifactId( pathParts[artifactIdPos] );
|
||||
|
||||
// Remaining pieces are the groupId.
|
||||
for ( int i = 0; i <= groupIdPos; i++ )
|
||||
{
|
||||
if ( i == 0 )
|
||||
{
|
||||
artifact.setGroupId( pathParts[i] );
|
||||
}
|
||||
else
|
||||
{
|
||||
artifact.setGroupId( artifact.getGroupId() + "." + pathParts[i] );
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Last part is the filename
|
||||
String filename = pathParts[filenamePos];
|
||||
|
||||
// Now we need to parse the filename to get the artifact version Id.
|
||||
if ( StringUtils.isBlank( filename ) )
|
||||
{
|
||||
throw new IllegalArgumentException( INVALID_ARTIFACT_PATH + "Unable to split blank filename." );
|
||||
}
|
||||
|
||||
FilenameParser parser = new FilenameParser( filename );
|
||||
|
||||
// Expect the filename to start with the artifactId.
|
||||
artifact.setArtifactId( parser.expect( artifact.getArtifactId() ) );
|
||||
|
||||
if ( artifact.getArtifactId() == null )
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "filename format is invalid, "
|
||||
+ "should start with artifactId as stated in path." );
|
||||
}
|
||||
|
||||
// Process the version.
|
||||
artifact.setVersion( parser.expect( baseVersion ) );
|
||||
|
||||
if ( artifact.getVersion() == null )
|
||||
{
|
||||
// We working with a snapshot?
|
||||
if ( VersionUtil.isSnapshot( baseVersion ) )
|
||||
{
|
||||
artifact.setVersion( parser.nextVersion() );
|
||||
if ( !VersionUtil.isUniqueSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "filename format is invalid,"
|
||||
+ "expected timestamp format in filename." );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "filename format is invalid, "
|
||||
+ "expected version as stated in path." );
|
||||
}
|
||||
}
|
||||
|
||||
// Do we have a classifier?
|
||||
artifact.setClassifier( parser.remaining() );
|
||||
|
||||
// Set the type.
|
||||
artifact.setType( ArtifactExtensionMapping.guessTypeFromFilename( filename ) );
|
||||
|
||||
artifact.setType( ArtifactExtensionMapping.guessTypeFromFilename( filename ) );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Sanity Checks.
|
||||
|
||||
// Do we have a snapshot version?
|
||||
if ( VersionUtil.isSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
// Rules are different for SNAPSHOTS
|
||||
if ( !VersionUtil.isGenericSnapshot( baseVersion ) )
|
||||
{
|
||||
String filenameBaseVersion = VersionUtil.getBaseVersion( artifact.getVersion() );
|
||||
throw new LayoutException( "Invalid snapshot artifact location, version directory should be "
|
||||
+ filenameBaseVersion );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non SNAPSHOT rules.
|
||||
// Do we pass the simple test?
|
||||
if ( !StringUtils.equals( baseVersion, artifact.getVersion() ) )
|
||||
{
|
||||
throw new LayoutException( "Invalid artifact: version declared in directory path does"
|
||||
+ " not match what was found in the artifact filename." );
|
||||
}
|
||||
}
|
||||
|
||||
return artifact;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,210 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.VersionUtil;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Generic Filename Parser for use with layout routines.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class FilenameParser
|
||||
{
|
||||
private String name;
|
||||
|
||||
private String extension;
|
||||
|
||||
private int offset;
|
||||
|
||||
private static final Pattern specialCases = Pattern.compile( "(maven-.*-plugin)|(maven-plugin)" );
|
||||
|
||||
private static final Pattern extensionPattern = Pattern.compile( "(.tar.gz$)|(.tar.bz2$)|(.[a-z0-9]{1,4}$)",
|
||||
Pattern.CASE_INSENSITIVE );
|
||||
|
||||
private static final Pattern section = Pattern.compile( "([^-]*)" );
|
||||
|
||||
private Matcher matcher;
|
||||
|
||||
protected FilenameParser( String filename )
|
||||
{
|
||||
this.name = filename;
|
||||
|
||||
Matcher mat = extensionPattern.matcher( name );
|
||||
if ( mat.find() )
|
||||
{
|
||||
extension = filename.substring( mat.start() + 1 );
|
||||
name = name.substring( 0, name.length() - extension.length() - 1 );
|
||||
}
|
||||
|
||||
matcher = section.matcher( name );
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
protected void reset()
|
||||
{
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
protected String next()
|
||||
{
|
||||
// Past the end of the string.
|
||||
if ( offset > name.length() )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Return the next section.
|
||||
if ( matcher.find( offset ) )
|
||||
{
|
||||
// Return found section.
|
||||
offset = matcher.end() + 1;
|
||||
return matcher.group();
|
||||
}
|
||||
|
||||
// Nothing to return.
|
||||
return null;
|
||||
}
|
||||
|
||||
protected String expect( String expected )
|
||||
{
|
||||
if ( name.startsWith( expected, offset ) )
|
||||
{
|
||||
// Potential hit. check for '.' or '-' at end of expected.
|
||||
int seperatorOffset = offset + expected.length();
|
||||
|
||||
// Test for "out of bounds" first.
|
||||
if ( seperatorOffset >= name.length() )
|
||||
{
|
||||
offset = name.length();
|
||||
return expected;
|
||||
}
|
||||
|
||||
// Test for seperator char.
|
||||
char seperatorChar = name.charAt( seperatorOffset );
|
||||
if ( ( seperatorChar == '-' ) || ( seperatorChar == '.' ) )
|
||||
{
|
||||
offset = seperatorOffset + 1;
|
||||
return expected;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
protected String getExtension()
|
||||
{
|
||||
return extension;
|
||||
}
|
||||
|
||||
protected String remaining()
|
||||
{
|
||||
if ( offset >= name.length() )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String end = name.substring( offset );
|
||||
offset = name.length();
|
||||
return end;
|
||||
}
|
||||
|
||||
protected String nextNonVersion()
|
||||
{
|
||||
boolean done = false;
|
||||
|
||||
StringBuffer ver = new StringBuffer();
|
||||
|
||||
// Any text upto the end of a special case is considered non-version.
|
||||
Matcher specialMat = specialCases.matcher( name );
|
||||
if ( specialMat.find() )
|
||||
{
|
||||
ver.append( name.substring( offset, specialMat.end() ) );
|
||||
offset = specialMat.end() + 1;
|
||||
}
|
||||
|
||||
while ( !done )
|
||||
{
|
||||
int initialOffset = offset;
|
||||
String section = next();
|
||||
if ( section == null )
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
else if ( !VersionUtil.isVersion( section ) )
|
||||
{
|
||||
if ( ver.length() > 0 )
|
||||
{
|
||||
ver.append( '-' );
|
||||
}
|
||||
ver.append( section );
|
||||
}
|
||||
else
|
||||
{
|
||||
offset = initialOffset;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
return ver.toString();
|
||||
}
|
||||
|
||||
protected String nextVersion()
|
||||
{
|
||||
boolean done = false;
|
||||
|
||||
StringBuffer ver = new StringBuffer();
|
||||
|
||||
while ( !done )
|
||||
{
|
||||
int initialOffset = offset;
|
||||
String section = next();
|
||||
if ( section == null )
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
else if ( VersionUtil.isVersion( section ) )
|
||||
{
|
||||
if ( ver.length() > 0 )
|
||||
{
|
||||
ver.append( '-' );
|
||||
}
|
||||
ver.append( section );
|
||||
}
|
||||
else
|
||||
{
|
||||
offset = initialOffset;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
return ver.toString();
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* LegacyArtifactExtensionMapping
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class LegacyArtifactExtensionMapping
|
||||
extends AbstractArtifactExtensionMapping
|
||||
{
|
||||
public LegacyArtifactExtensionMapping()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public String getType( String pathType, String filename )
|
||||
{
|
||||
if ( StringUtils.isBlank( filename ) )
|
||||
{
|
||||
return pathType;
|
||||
}
|
||||
|
||||
String normalizedName = filename.toLowerCase().trim();
|
||||
|
||||
if ( normalizedName.endsWith( ".tar.gz" ) )
|
||||
{
|
||||
return "distribution-tgz";
|
||||
}
|
||||
else if ( normalizedName.endsWith( ".zip" ) )
|
||||
{
|
||||
return "distribution-zip";
|
||||
}
|
||||
else if ( normalizedName.endsWith( "-sources.jar" ) )
|
||||
{
|
||||
return "java-source";
|
||||
}
|
||||
else if ( normalizedName.endsWith( "-javadoc.jar" ) )
|
||||
{
|
||||
return "javadoc.jar";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( pathType.endsWith( "s" ) )
|
||||
{
|
||||
return pathType.substring( 0, pathType.length() - 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
return pathType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,153 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* LegacyPathParser is a parser for maven 1 (legacy layout) paths to ArtifactReference.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class LegacyPathParser
|
||||
{
|
||||
private static final String INVALID_ARTIFACT_PATH = "Invalid path to Artifact: ";
|
||||
|
||||
protected static ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
ArtifactReference artifact = new ArtifactReference();
|
||||
|
||||
String normalizedPath = StringUtils.replace( path, "\\", "/" );
|
||||
|
||||
String pathParts[] = StringUtils.split( normalizedPath, '/' );
|
||||
|
||||
/* Always 3 parts. (Never more or less)
|
||||
*
|
||||
* path = "commons-lang/jars/commons-lang-2.1.jar"
|
||||
* path[0] = "commons-lang"; // The Group ID
|
||||
* path[1] = "jars"; // The Directory Type
|
||||
* path[2] = "commons-lang-2.1.jar"; // The Filename.
|
||||
*/
|
||||
|
||||
if ( pathParts.length != 3 )
|
||||
{
|
||||
// Illegal Path Parts Length.
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH
|
||||
+ "legacy paths should only have 3 parts [groupId]/[type]s/[artifactId]-[version].[type], found "
|
||||
+ pathParts.length + " instead." );
|
||||
}
|
||||
|
||||
// The Group ID.
|
||||
artifact.setGroupId( pathParts[0] );
|
||||
|
||||
// The Expected Type.
|
||||
String expectedType = pathParts[1];
|
||||
|
||||
// Sanity Check: expectedType should end in "s".
|
||||
if ( !expectedType.endsWith( "s" ) )
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH
|
||||
+ "legacy paths should have an expected type ending in [s] in the second part of the path." );
|
||||
}
|
||||
|
||||
// The Filename.
|
||||
String filename = pathParts[2];
|
||||
|
||||
FilenameParser parser = new FilenameParser( filename );
|
||||
|
||||
artifact.setArtifactId( parser.nextNonVersion() );
|
||||
|
||||
// Sanity Check: does it have an artifact id?
|
||||
if ( StringUtils.isEmpty( artifact.getArtifactId() ) )
|
||||
{
|
||||
// Special Case: The filename might start with a version id (like "test-arch-1.0.jar").
|
||||
int idx = filename.indexOf( '-' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
parser.reset();
|
||||
// Take the first section regardless of content.
|
||||
String artifactId = parser.next();
|
||||
|
||||
// Is there anything more that is considered not a version id?
|
||||
String moreArtifactId = parser.nextNonVersion();
|
||||
if ( StringUtils.isNotBlank( moreArtifactId ) )
|
||||
{
|
||||
artifact.setArtifactId( artifactId + "-" + moreArtifactId );
|
||||
}
|
||||
else
|
||||
{
|
||||
artifact.setArtifactId( artifactId );
|
||||
}
|
||||
}
|
||||
|
||||
// Sanity Check: still no artifact id?
|
||||
if ( StringUtils.isEmpty( artifact.getArtifactId() ) )
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "no artifact id present." );
|
||||
}
|
||||
}
|
||||
|
||||
artifact.setVersion( parser.remaining() );
|
||||
|
||||
// Sanity Check: does it have a version?
|
||||
if ( StringUtils.isEmpty( artifact.getVersion() ) )
|
||||
{
|
||||
// Special Case: use last section of artifactId as version.
|
||||
String artifactId = artifact.getArtifactId();
|
||||
int idx = artifactId.lastIndexOf( '-' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
artifact.setVersion( artifactId.substring( idx + 1 ) );
|
||||
artifact.setArtifactId( artifactId.substring( 0, idx ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "no version found." );
|
||||
}
|
||||
}
|
||||
|
||||
artifact.setType( ArtifactExtensionMapping.guessTypeFromFilename( filename ) );
|
||||
|
||||
// Sanity Check: does it have an extension?
|
||||
if ( StringUtils.isEmpty( artifact.getType() ) )
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "no extension found." );
|
||||
}
|
||||
|
||||
String trimPathType = expectedType.substring( 0, expectedType.length() - 1 );
|
||||
|
||||
// Sanity Check: does extension match pathType on path?
|
||||
String expectedExtension = ArtifactExtensionMapping.getExtension( trimPathType );
|
||||
String actualExtension = parser.getExtension();
|
||||
|
||||
if ( !expectedExtension.equals( actualExtension ) )
|
||||
{
|
||||
throw new LayoutException( INVALID_ARTIFACT_PATH + "mismatch on extension [" + actualExtension
|
||||
+ "] and layout specified type [" + expectedType + "] (which maps to extension: [" + expectedExtension
|
||||
+ "]) on path [" + path + "]" );
|
||||
}
|
||||
|
||||
return artifact;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,438 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.io.FileUtils;
|
||||
import org.apache.maven.archiva.common.utils.PathUtil;
|
||||
import org.apache.maven.archiva.configuration.FileTypes;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
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;
|
||||
|
||||
/**
|
||||
* ManagedDefaultRepositoryContent
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.repository.ManagedRepositoryContent"
|
||||
* role-hint="default"
|
||||
* instantiation-strategy="per-lookup"
|
||||
*/
|
||||
public class ManagedDefaultRepositoryContent
|
||||
extends AbstractDefaultRepositoryContent
|
||||
implements ManagedRepositoryContent, Initializable
|
||||
{
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private FileTypes filetypes;
|
||||
|
||||
private ManagedRepositoryConfiguration repository;
|
||||
|
||||
private List<String> artifactPatterns;
|
||||
|
||||
public void deleteVersion( VersionedReference reference )
|
||||
throws ContentNotFoundException
|
||||
{
|
||||
String path = toMetadataPath( reference );
|
||||
File projectPath = new File( getRepoRoot(), path );
|
||||
|
||||
File projectDir = projectPath.getParentFile();
|
||||
if( projectDir.exists() && projectDir.isDirectory() )
|
||||
{
|
||||
try
|
||||
{
|
||||
FileUtils.deleteDirectory( projectDir );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
// TODO: log this somewhere?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return repository.getId();
|
||||
}
|
||||
|
||||
public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
|
||||
throws ContentNotFoundException, LayoutException
|
||||
{
|
||||
File artifactFile = toFile( reference );
|
||||
File repoDir = artifactFile.getParentFile();
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get related artifacts using a non-existant directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get related artifacts using a non-directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<ArtifactReference> foundArtifacts = new HashSet<ArtifactReference>();
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
|
||||
// Test for related, groupId / artifactId / version must match.
|
||||
if ( artifact.getGroupId().equals( reference.getGroupId() )
|
||||
&& artifact.getArtifactId().equals( reference.getArtifactId() )
|
||||
&& artifact.getVersion().equals( reference.getVersion() ) )
|
||||
{
|
||||
foundArtifacts.add( artifact );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return foundArtifacts;
|
||||
}
|
||||
|
||||
public String getRepoRoot()
|
||||
{
|
||||
return repository.getLocation();
|
||||
}
|
||||
|
||||
public ManagedRepositoryConfiguration getRepository()
|
||||
{
|
||||
return repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gather the Available Versions (on disk) for a specific Project Reference, based on filesystem
|
||||
* information.
|
||||
*
|
||||
* @return the Set of available versions, based on the project reference.
|
||||
* @throws LayoutException
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public Set<String> getVersions( ProjectReference reference )
|
||||
throws ContentNotFoundException, LayoutException
|
||||
{
|
||||
String path = toMetadataPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( repository.getLocation(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get Versions on a non-existant directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get Versions on a non-directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
VersionedReference versionRef = new VersionedReference();
|
||||
versionRef.setGroupId( reference.getGroupId() );
|
||||
versionRef.setArtifactId( reference.getArtifactId() );
|
||||
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( !repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. not a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Test if dir has an artifact, which proves to us that it is a valid version directory.
|
||||
String version = repoFiles[i].getName();
|
||||
versionRef.setVersion( version );
|
||||
|
||||
if ( hasArtifact( versionRef ) )
|
||||
{
|
||||
// Found an artifact, must be a valid version.
|
||||
foundVersions.add( version );
|
||||
}
|
||||
}
|
||||
|
||||
return foundVersions;
|
||||
}
|
||||
|
||||
public Set<String> getVersions( VersionedReference reference )
|
||||
throws ContentNotFoundException, LayoutException
|
||||
{
|
||||
String path = toMetadataPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( repository.getLocation(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions on a non-existant directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions on a non-directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
|
||||
foundVersions.add( artifact.getVersion() );
|
||||
}
|
||||
}
|
||||
|
||||
return foundVersions;
|
||||
}
|
||||
|
||||
public boolean hasContent( ArtifactReference reference )
|
||||
{
|
||||
File artifactFile = toFile( reference );
|
||||
return artifactFile.exists() && artifactFile.isFile();
|
||||
}
|
||||
|
||||
public boolean hasContent( ProjectReference reference )
|
||||
{
|
||||
try
|
||||
{
|
||||
Set<String> versions = getVersions( reference );
|
||||
return !versions.isEmpty();
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasContent( VersionedReference reference )
|
||||
{
|
||||
try
|
||||
{
|
||||
return ( getFirstArtifact( reference ) != null );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
throws InitializationException
|
||||
{
|
||||
this.artifactPatterns = new ArrayList<String>();
|
||||
initVariables();
|
||||
}
|
||||
|
||||
public void setRepository( ManagedRepositoryConfiguration repository )
|
||||
{
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a path to an artifact reference.
|
||||
*
|
||||
* @param path the path to convert. (relative or full location path)
|
||||
* @throws LayoutException if the path cannot be converted to an artifact reference.
|
||||
*/
|
||||
@Override
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
if ( ( path != null ) && path.startsWith( repository.getLocation() ) )
|
||||
{
|
||||
return super.toArtifactReference( path.substring( repository.getLocation().length() ) );
|
||||
}
|
||||
|
||||
return super.toArtifactReference( path );
|
||||
}
|
||||
|
||||
public File toFile( ArtifactReference reference )
|
||||
{
|
||||
return new File( repository.getLocation(), toPath( reference ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first Artifact found in the provided VersionedReference location.
|
||||
*
|
||||
* @param managedRepository the repository to search within.
|
||||
* @param reference the reference to the versioned reference to search within
|
||||
* @return the ArtifactReference to the first artifact located within the versioned reference. or null if
|
||||
* no artifact was found within the versioned reference.
|
||||
* @throws IOException if the versioned reference is invalid (example: doesn't exist, or isn't a directory)
|
||||
* @throws LayoutException
|
||||
*/
|
||||
private ArtifactReference getFirstArtifact( VersionedReference reference )
|
||||
throws LayoutException, IOException
|
||||
{
|
||||
String path = toMetadataPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( repository.getLocation(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new IOException( "Unable to gather the list of snapshot versions on a non-existant directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new IOException( "Unable to gather the list of snapshot versions on a non-directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
|
||||
return artifact;
|
||||
}
|
||||
}
|
||||
|
||||
// No artifact was found.
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean hasArtifact( VersionedReference reference )
|
||||
throws LayoutException
|
||||
{
|
||||
try
|
||||
{
|
||||
return ( getFirstArtifact( reference ) != null );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,495 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.common.utils.PathUtil;
|
||||
import org.apache.maven.archiva.configuration.FileTypes;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
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;
|
||||
|
||||
/**
|
||||
* ManagedLegacyRepositoryContent
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.repository.ManagedRepositoryContent"
|
||||
* role-hint="legacy"
|
||||
* instantiation-strategy="per-lookup"
|
||||
*/
|
||||
public class ManagedLegacyRepositoryContent
|
||||
extends AbstractLegacyRepositoryContent
|
||||
implements ManagedRepositoryContent, Initializable
|
||||
{
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private FileTypes filetypes;
|
||||
|
||||
private ManagedRepositoryConfiguration repository;
|
||||
|
||||
private List<String> artifactPatterns;
|
||||
|
||||
public void deleteVersion( VersionedReference reference )
|
||||
throws ContentNotFoundException
|
||||
{
|
||||
File groupDir = new File( repository.getLocation(), reference.getGroupId() );
|
||||
|
||||
if ( !groupDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: "
|
||||
+ groupDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !groupDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions using a non-directory: "
|
||||
+ groupDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File typeDirs[] = groupDir.listFiles();
|
||||
for ( File typeDir : typeDirs )
|
||||
{
|
||||
if ( !typeDir.isDirectory() )
|
||||
{
|
||||
// Skip it, we only care about directories.
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !typeDir.getName().endsWith( "s" ) )
|
||||
{
|
||||
// Skip it, we only care about directories that end in "s".
|
||||
}
|
||||
|
||||
deleteVersions( typeDir, reference );
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteVersions( File typeDir, VersionedReference reference )
|
||||
{
|
||||
File repoFiles[] = typeDir.listFiles();
|
||||
for ( File repoFile : repoFiles )
|
||||
{
|
||||
if ( repoFile.isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
if ( StringUtils.equals( artifact.getArtifactId(), reference.getArtifactId() )
|
||||
&& StringUtils.equals( artifact.getVersion(), reference.getVersion() ) )
|
||||
{
|
||||
repoFile.delete();
|
||||
deleteSupportFiles( repoFile );
|
||||
}
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* don't fail the process if there is a bad artifact within the directory. */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteSupportFiles( File repoFile )
|
||||
{
|
||||
deleteSupportFile( repoFile, ".sha1" );
|
||||
deleteSupportFile( repoFile, ".md5" );
|
||||
deleteSupportFile( repoFile, ".asc" );
|
||||
deleteSupportFile( repoFile, ".gpg" );
|
||||
}
|
||||
|
||||
private void deleteSupportFile( File repoFile, String supportExtension )
|
||||
{
|
||||
File supportFile = new File( repoFile.getAbsolutePath() + supportExtension );
|
||||
if ( supportFile.exists() && supportFile.isFile() )
|
||||
{
|
||||
supportFile.delete();
|
||||
}
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return repository.getId();
|
||||
}
|
||||
|
||||
public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
|
||||
throws ContentNotFoundException, LayoutException
|
||||
{
|
||||
File artifactFile = toFile( reference );
|
||||
File repoDir = artifactFile.getParentFile();
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get related artifacts using a non-existant directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get related artifacts using a non-directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<ArtifactReference> foundArtifacts = new HashSet<ArtifactReference>();
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File projectParentDir = repoDir.getParentFile();
|
||||
File typeDirs[] = projectParentDir.listFiles();
|
||||
for ( File typeDir : typeDirs )
|
||||
{
|
||||
if ( !typeDir.isDirectory() )
|
||||
{
|
||||
// Skip it, we only care about directories.
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !typeDir.getName().endsWith( "s" ) )
|
||||
{
|
||||
// Skip it, we only care about directories that end in "s".
|
||||
}
|
||||
|
||||
getRelatedArtifacts( typeDir, reference, foundArtifacts );
|
||||
}
|
||||
|
||||
return foundArtifacts;
|
||||
}
|
||||
|
||||
public String getRepoRoot()
|
||||
{
|
||||
return repository.getLocation();
|
||||
}
|
||||
|
||||
public ManagedRepositoryConfiguration getRepository()
|
||||
{
|
||||
return repository;
|
||||
}
|
||||
|
||||
public Set<String> getVersions( ProjectReference reference )
|
||||
throws ContentNotFoundException
|
||||
{
|
||||
File groupDir = new File( repository.getLocation(), reference.getGroupId() );
|
||||
|
||||
if ( !groupDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: "
|
||||
+ groupDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !groupDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions using a non-directory: "
|
||||
+ groupDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File typeDirs[] = groupDir.listFiles();
|
||||
for ( File typeDir : typeDirs )
|
||||
{
|
||||
if ( !typeDir.isDirectory() )
|
||||
{
|
||||
// Skip it, we only care about directories.
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !typeDir.getName().endsWith( "s" ) )
|
||||
{
|
||||
// Skip it, we only care about directories that end in "s".
|
||||
}
|
||||
|
||||
getProjectVersions( typeDir, reference, foundVersions );
|
||||
}
|
||||
|
||||
return foundVersions;
|
||||
}
|
||||
|
||||
public Set<String> getVersions( VersionedReference reference )
|
||||
throws ContentNotFoundException
|
||||
{
|
||||
File groupDir = new File( repository.getLocation(), reference.getGroupId() );
|
||||
|
||||
if ( !groupDir.exists() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: "
|
||||
+ groupDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !groupDir.isDirectory() )
|
||||
{
|
||||
throw new ContentNotFoundException( "Unable to get versions using a non-directory: "
|
||||
+ groupDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File typeDirs[] = groupDir.listFiles();
|
||||
for ( File typeDir : typeDirs )
|
||||
{
|
||||
if ( !typeDir.isDirectory() )
|
||||
{
|
||||
// Skip it, we only care about directories.
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !typeDir.getName().endsWith( "s" ) )
|
||||
{
|
||||
// Skip it, we only care about directories that end in "s".
|
||||
}
|
||||
|
||||
getVersionedVersions( typeDir, reference, foundVersions );
|
||||
}
|
||||
|
||||
return foundVersions;
|
||||
}
|
||||
|
||||
public boolean hasContent( ArtifactReference reference )
|
||||
{
|
||||
File artifactFile = toFile( reference );
|
||||
return artifactFile.exists() && artifactFile.isFile();
|
||||
}
|
||||
|
||||
public boolean hasContent( ProjectReference reference )
|
||||
{
|
||||
try
|
||||
{
|
||||
Set<String> versions = getVersions( reference );
|
||||
return CollectionUtils.isNotEmpty( versions );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasContent( VersionedReference reference )
|
||||
{
|
||||
try
|
||||
{
|
||||
Set<String> versions = getVersions( reference );
|
||||
return CollectionUtils.isNotEmpty( versions );
|
||||
}
|
||||
catch ( ContentNotFoundException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
throws InitializationException
|
||||
{
|
||||
this.artifactPatterns = new ArrayList<String>();
|
||||
initVariables();
|
||||
}
|
||||
|
||||
public void setRepository( ManagedRepositoryConfiguration repository )
|
||||
{
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a path to an artifact reference.
|
||||
*
|
||||
* @param path the path to convert. (relative or full location path)
|
||||
* @throws LayoutException if the path cannot be converted to an artifact reference.
|
||||
*/
|
||||
@Override
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
if ( ( path != null ) && path.startsWith( repository.getLocation() ) )
|
||||
{
|
||||
return super.toArtifactReference( path.substring( repository.getLocation().length() ) );
|
||||
}
|
||||
|
||||
return super.toArtifactReference( path );
|
||||
}
|
||||
|
||||
public File toFile( ArtifactReference reference )
|
||||
{
|
||||
return new File( repository.getLocation(), toPath( reference ) );
|
||||
}
|
||||
|
||||
public String toMetadataPath( ProjectReference reference )
|
||||
{
|
||||
// No metadata present in legacy repository.
|
||||
return null;
|
||||
}
|
||||
|
||||
public String toMetadataPath( VersionedReference reference )
|
||||
{
|
||||
// No metadata present in legacy repository.
|
||||
return null;
|
||||
}
|
||||
|
||||
private void getProjectVersions( File typeDir, ProjectReference reference, Set<String> foundVersions )
|
||||
{
|
||||
File repoFiles[] = typeDir.listFiles();
|
||||
for ( File repoFile : repoFiles )
|
||||
{
|
||||
if ( repoFile.isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFile );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
if ( StringUtils.equals( artifact.getArtifactId(), reference.getArtifactId() ) )
|
||||
{
|
||||
foundVersions.add( artifact.getVersion() );
|
||||
}
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* don't fail the process if there is a bad artifact within the directory. */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getRelatedArtifacts( File typeDir, ArtifactReference reference, Set<ArtifactReference> foundArtifacts )
|
||||
{
|
||||
File repoFiles[] = typeDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
if ( StringUtils.equals( artifact.getArtifactId(), reference.getArtifactId() )
|
||||
&& artifact.getVersion().startsWith( reference.getVersion() ) )
|
||||
{
|
||||
foundArtifacts.add( artifact );
|
||||
}
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* don't fail the process if there is a bad artifact within the directory. */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getVersionedVersions( File typeDir, VersionedReference reference, Set<String> foundVersions )
|
||||
{
|
||||
File repoFiles[] = typeDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( repository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
ArtifactReference artifact = toArtifactReference( relativePath );
|
||||
if ( StringUtils.equals( artifact.getArtifactId(), reference.getArtifactId() )
|
||||
&& artifact.getVersion().startsWith( reference.getVersion() ) )
|
||||
{
|
||||
foundVersions.add( artifact.getVersion() );
|
||||
}
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* don't fail the process if there is a bad artifact within the directory. */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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,0 +1,88 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.RepositoryURL;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* RemoteDefaultRepositoryContent
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.repository.RemoteRepositoryContent"
|
||||
* role-hint="default"
|
||||
* instantiation-strategy="per-lookup"
|
||||
*/
|
||||
public class RemoteDefaultRepositoryContent
|
||||
extends AbstractDefaultRepositoryContent
|
||||
implements RemoteRepositoryContent
|
||||
{
|
||||
private RemoteRepositoryConfiguration repository;
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return repository.getId();
|
||||
}
|
||||
|
||||
public RemoteRepositoryConfiguration getRepository()
|
||||
{
|
||||
return repository;
|
||||
}
|
||||
|
||||
public RepositoryURL getURL()
|
||||
{
|
||||
return new RepositoryURL( repository.getUrl() );
|
||||
}
|
||||
|
||||
public void setRepository( RemoteRepositoryConfiguration repository )
|
||||
{
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a path to an artifact reference.
|
||||
*
|
||||
* @param path the path to convert. (relative or full url path)
|
||||
* @throws LayoutException if the path cannot be converted to an artifact reference.
|
||||
*/
|
||||
@Override
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
if ( ( path != null ) && path.startsWith( repository.getUrl() ) )
|
||||
{
|
||||
return super.toArtifactReference( path.substring( repository.getUrl().length() ) );
|
||||
}
|
||||
|
||||
return super.toArtifactReference( path );
|
||||
}
|
||||
|
||||
public RepositoryURL toURL( ArtifactReference reference )
|
||||
{
|
||||
String url = repository.getUrl() + toPath( reference );
|
||||
return new RepositoryURL( url );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.RepositoryURL;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* RemoteLegacyRepositoryContent
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.repository.RemoteRepositoryContent"
|
||||
* role-hint="legacy"
|
||||
* instantiation-strategy="per-lookup"
|
||||
*/
|
||||
public class RemoteLegacyRepositoryContent
|
||||
extends AbstractLegacyRepositoryContent
|
||||
implements RemoteRepositoryContent
|
||||
{
|
||||
private RemoteRepositoryConfiguration repository;
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return repository.getId();
|
||||
}
|
||||
|
||||
public RemoteRepositoryConfiguration getRepository()
|
||||
{
|
||||
return repository;
|
||||
}
|
||||
|
||||
public RepositoryURL getURL()
|
||||
{
|
||||
return new RepositoryURL( repository.getUrl() );
|
||||
}
|
||||
|
||||
public void setRepository( RemoteRepositoryConfiguration repository )
|
||||
{
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a path to an artifact reference.
|
||||
*
|
||||
* @param path the path to convert. (relative or full url path)
|
||||
* @throws LayoutException if the path cannot be converted to an artifact reference.
|
||||
*/
|
||||
@Override
|
||||
public ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
if ( path.startsWith( repository.getUrl() ) )
|
||||
{
|
||||
return super.toArtifactReference( path.substring( repository.getUrl().length() ) );
|
||||
}
|
||||
|
||||
return super.toArtifactReference( path );
|
||||
}
|
||||
|
||||
public RepositoryURL toURL( ArtifactReference reference )
|
||||
{
|
||||
String url = repository.getUrl() + toPath( reference );
|
||||
return new RepositoryURL( url );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,146 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.FileTypes;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
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.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
|
||||
* ArtifactReference.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
* role="org.apache.maven.archiva.repository.content.RepositoryRequest"
|
||||
*/
|
||||
public class RepositoryRequest
|
||||
implements RegistryListener, Initializable
|
||||
{
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private FileTypes filetypes;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private ArchivaConfiguration archivaConfiguration;
|
||||
|
||||
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.
|
||||
*
|
||||
* @param requestedPath the relative path to the content.
|
||||
* @return the ArtifactReference for the requestedPath.
|
||||
* @throws LayoutException if the request path is not layout valid.
|
||||
*/
|
||||
public ArtifactReference toArtifactReference( String requestedPath )
|
||||
throws LayoutException
|
||||
{
|
||||
String pathParts[] = StringUtils.splitPreserveAllTokens( requestedPath, '/' );
|
||||
|
||||
if ( pathParts.length > 3 )
|
||||
{
|
||||
return DefaultPathParser.toArtifactReference( requestedPath );
|
||||
}
|
||||
else if ( pathParts.length == 3 )
|
||||
{
|
||||
return LegacyPathParser.toArtifactReference( requestedPath );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new LayoutException( "Not a valid request path layout, too short." );
|
||||
}
|
||||
}
|
||||
|
||||
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 */
|
||||
|
||||
}
|
||||
}
|
|
@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
|
|||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.content.DefaultArtifactExtensionMapping;
|
||||
import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
|
||||
|
||||
/**
|
||||
* DefaultBidirectionalRepositoryLayout - the layout mechanism for use by Maven 2.x repositories.
|
||||
|
@ -65,8 +65,6 @@ public class DefaultBidirectionalRepositoryLayout
|
|||
|
||||
private static final char ARTIFACT_SEPARATOR = '-';
|
||||
|
||||
private DefaultArtifactExtensionMapping extensionMapper = new DefaultArtifactExtensionMapping();
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return "default";
|
||||
|
@ -147,7 +145,7 @@ public class DefaultBidirectionalRepositoryLayout
|
|||
path.append( ARTIFACT_SEPARATOR ).append( classifier );
|
||||
}
|
||||
|
||||
path.append( GROUP_SEPARATOR ).append( extensionMapper.getExtension( type ) );
|
||||
path.append( GROUP_SEPARATOR ).append( ArtifactExtensionMapping.getExtension( type ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -244,7 +242,7 @@ public class DefaultBidirectionalRepositoryLayout
|
|||
}
|
||||
}
|
||||
|
||||
prefs.type = extensionMapper.getType( filename );
|
||||
prefs.type = ArtifactExtensionMapping.guessTypeFromFilename( filename );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ package org.apache.maven.archiva.repository.layout;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.content.LegacyArtifactExtensionMapping;
|
||||
import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
@ -43,8 +43,6 @@ public class LegacyBidirectionalRepositoryLayout
|
|||
|
||||
private static final String PATH_SEPARATOR = "/";
|
||||
|
||||
private LegacyArtifactExtensionMapping extensionMapper = new LegacyArtifactExtensionMapping();
|
||||
|
||||
private Map typeToDirectoryMap;
|
||||
|
||||
public LegacyBidirectionalRepositoryLayout()
|
||||
|
@ -88,7 +86,7 @@ public class LegacyBidirectionalRepositoryLayout
|
|||
path.append( '-' ).append( classifier );
|
||||
}
|
||||
|
||||
path.append( '.' ).append( extensionMapper.getExtension( type ) );
|
||||
path.append( '.' ).append( ArtifactExtensionMapping.getExtension( type ) );
|
||||
}
|
||||
|
||||
return path.toString();
|
||||
|
@ -169,7 +167,7 @@ public class LegacyBidirectionalRepositoryLayout
|
|||
prefs.fileParts = RepositoryLayoutUtils.splitFilename( filename, null );
|
||||
|
||||
String trimPathType = prefs.pathType.substring( 0, prefs.pathType.length() - 1 );
|
||||
prefs.type = extensionMapper.getType( trimPathType, filename );
|
||||
prefs.type = ArtifactExtensionMapping.guessTypeFromFilename( filename );
|
||||
|
||||
// Sanity Check: does it have an extension?
|
||||
if ( StringUtils.isEmpty( prefs.fileParts.extension ) )
|
||||
|
@ -185,7 +183,7 @@ public class LegacyBidirectionalRepositoryLayout
|
|||
}
|
||||
|
||||
// Sanity Check: does extension match pathType on path?
|
||||
String expectedExtension = extensionMapper.getExtension( trimPathType );
|
||||
String expectedExtension = ArtifactExtensionMapping.getExtension( trimPathType );
|
||||
String actualExtension = prefs.fileParts.extension;
|
||||
|
||||
if ( !expectedExtension.equals( actualExtension ) )
|
||||
|
|
|
@ -16,24 +16,25 @@ package org.apache.maven.archiva.repository.metadata;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.math.NumberUtils;
|
||||
import org.apache.commons.lang.time.DateUtils;
|
||||
import org.apache.maven.archiva.common.utils.PathUtil;
|
||||
import org.apache.maven.archiva.common.utils.VersionComparator;
|
||||
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||
import org.apache.maven.archiva.configuration.FileTypes;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
|
||||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.SnapshotVersion;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
import org.apache.maven.archiva.repository.ContentNotFoundException;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
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;
|
||||
|
@ -45,9 +46,11 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
@ -62,8 +65,8 @@ import java.util.regex.Matcher;
|
|||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component role="org.apache.maven.archiva.repository.metadata.MetadataTools"
|
||||
* @todo use the maven-repository-metadata classes instead for merging
|
||||
*/
|
||||
public class MetadataTools
|
||||
implements RegistryListener, Initializable
|
||||
|
@ -76,11 +79,6 @@ public class MetadataTools
|
|||
|
||||
private static final char GROUP_SEPARATOR = '.';
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
|
@ -95,7 +93,15 @@ public class MetadataTools
|
|||
|
||||
private Map<String, Set<String>> proxies;
|
||||
|
||||
private static final char NUMS[] = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
|
||||
private static final char NUMS[] = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||
|
||||
private static final SimpleDateFormat lastUpdatedFormat;
|
||||
|
||||
static
|
||||
{
|
||||
lastUpdatedFormat = new SimpleDateFormat( "yyyyMMddHHmmss" );
|
||||
lastUpdatedFormat.setTimeZone( DateUtils.UTC_TIME_ZONE );
|
||||
}
|
||||
|
||||
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||
{
|
||||
|
@ -110,202 +116,25 @@ public class MetadataTools
|
|||
/* nothing to do */
|
||||
}
|
||||
|
||||
/**
|
||||
* Gather the Available Versions (on disk) for a specific Project Reference, based on filesystem
|
||||
* information.
|
||||
*
|
||||
* @return the Set of available versions, based on the project reference.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public Set<String> gatherAvailableVersions( ManagedRepositoryConfiguration managedRepository, ProjectReference reference )
|
||||
throws LayoutException, IOException
|
||||
{
|
||||
String path = toPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( managedRepository.getLocation(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new IOException( "Unable to calculate Available Local Versions on a non-existant directory: " +
|
||||
repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new IOException(
|
||||
"Unable to calculate Available Local Versions on a non-directory: " + repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
VersionedReference versionRef = new VersionedReference();
|
||||
versionRef.setGroupId( reference.getGroupId() );
|
||||
versionRef.setArtifactId( reference.getArtifactId() );
|
||||
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( !repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. not a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Test if dir has an artifact, which proves to us that it is a valid version directory.
|
||||
String version = repoFiles[i].getName();
|
||||
versionRef.setVersion( version );
|
||||
|
||||
if ( hasArtifact( managedRepository, versionRef ) )
|
||||
{
|
||||
// Found an artifact, must be a valid version.
|
||||
foundVersions.add( version );
|
||||
}
|
||||
}
|
||||
|
||||
return foundVersions;
|
||||
}
|
||||
|
||||
private boolean hasArtifact( ManagedRepositoryConfiguration managedRepository, VersionedReference reference )
|
||||
throws LayoutException
|
||||
{
|
||||
try
|
||||
{
|
||||
return ( getFirstArtifact( managedRepository, reference ) != null );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first Artifact found in the provided VersionedReference location.
|
||||
*
|
||||
* @param managedRepository the repository to search within.
|
||||
* @param reference the reference to the versioned reference to search within
|
||||
* @return the ArtifactReference to the first artifact located within the versioned reference. or null if
|
||||
* no artifact was found within the versioned reference.
|
||||
* @throws IOException if the versioned reference is invalid (example: doesn't exist, or isn't a directory)
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public ArtifactReference getFirstArtifact( ManagedRepositoryConfiguration managedRepository, VersionedReference reference )
|
||||
throws LayoutException, IOException
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( managedRepository.getLayout() );
|
||||
String path = toPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( managedRepository.getLocation(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new IOException( "Unable to gather the list of snapshot versions on a non-existant directory: " +
|
||||
repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new IOException(
|
||||
"Unable to gather the list of snapshot versions on a non-directory: " + repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( managedRepository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
ArtifactReference artifact = layout.toArtifactReference( relativePath );
|
||||
|
||||
return artifact;
|
||||
}
|
||||
}
|
||||
|
||||
// No artifact was found.
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gather the set of snapshot versions found in a particular versioned reference.
|
||||
*
|
||||
* @return the Set of snapshot artifact versions found.
|
||||
* @throws LayoutException
|
||||
* @throws ContentNotFoundException
|
||||
*/
|
||||
public Set<String> gatherSnapshotVersions( ManagedRepositoryConfiguration managedRepository, VersionedReference reference )
|
||||
throws LayoutException, IOException
|
||||
public Set<String> gatherSnapshotVersions( ManagedRepositoryContent managedRepository, VersionedReference reference )
|
||||
throws LayoutException, IOException, ContentNotFoundException
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( managedRepository.getLayout() );
|
||||
String path = toPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( managedRepository.getLocation(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new IOException( "Unable to gather the list of snapshot versions on a non-existant directory: " +
|
||||
repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new IOException(
|
||||
"Unable to gather the list of snapshot versions on a non-directory: " + repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
|
||||
// First gather up the versions found as artifacts in the managed repository.
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( managedRepository.getLocation(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
ArtifactReference artifact = layout.toArtifactReference( relativePath );
|
||||
|
||||
if ( VersionUtil.isSnapshot( artifact.getVersion() ) )
|
||||
{
|
||||
foundVersions.add( artifact.getVersion() );
|
||||
}
|
||||
}
|
||||
}
|
||||
Set<String> foundVersions = managedRepository.getVersions( reference );
|
||||
|
||||
// Next gather up the referenced 'latest' versions found in any proxied repositories
|
||||
// maven-metadata-${proxyId}.xml files that may be present.
|
||||
|
||||
// Does this repository have a set of remote proxied repositories?
|
||||
Set proxiedRepoIds = this.proxies.get( managedRepository.getId() );
|
||||
Set<String> proxiedRepoIds = this.proxies.get( managedRepository.getId() );
|
||||
|
||||
if ( proxiedRepoIds != null )
|
||||
if ( CollectionUtils.isNotEmpty( proxiedRepoIds ) )
|
||||
{
|
||||
String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
|
||||
baseVersion = baseVersion.substring( 0, baseVersion.indexOf( VersionUtil.SNAPSHOT ) - 1 );
|
||||
|
@ -371,7 +200,7 @@ public class MetadataTools
|
|||
{
|
||||
// Scary check, but without it, all paths are version references;
|
||||
throw new RepositoryMetadataException(
|
||||
"Not a versioned reference, as version id on path has no number in it." );
|
||||
"Not a versioned reference, as version id on path has no number in it." );
|
||||
}
|
||||
|
||||
reference.setArtifactId( pathParts[artifactIdOffset] );
|
||||
|
@ -463,27 +292,6 @@ public class MetadataTools
|
|||
return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjusts a path for a metadata.xml file to its repository specific path.
|
||||
*
|
||||
|
@ -491,7 +299,7 @@ public class MetadataTools
|
|||
* @param path the path to the metadata.xml file to adjust the name of.
|
||||
* @return the newly adjusted path reference to the repository specific metadata path.
|
||||
*/
|
||||
public String getRepositorySpecificName( RemoteRepositoryConfiguration repository, String path )
|
||||
public String getRepositorySpecificName( RemoteRepositoryContent repository, String path )
|
||||
{
|
||||
return getRepositorySpecificName( repository.getId(), path );
|
||||
}
|
||||
|
@ -529,11 +337,11 @@ public class MetadataTools
|
|||
configuration.addChangeListener( this );
|
||||
}
|
||||
|
||||
public ArchivaRepositoryMetadata readProxyMetadata( ManagedRepositoryConfiguration managedRepository, ProjectReference reference,
|
||||
String proxyId )
|
||||
public ArchivaRepositoryMetadata readProxyMetadata( ManagedRepositoryContent managedRepository,
|
||||
ProjectReference reference, String proxyId )
|
||||
{
|
||||
String metadataPath = getRepositorySpecificName( proxyId, toPath( reference ) );
|
||||
File metadataFile = new File( managedRepository.getLocation(), metadataPath );
|
||||
File metadataFile = new File( managedRepository.getRepoRoot(), metadataPath );
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -548,11 +356,11 @@ public class MetadataTools
|
|||
}
|
||||
}
|
||||
|
||||
public ArchivaRepositoryMetadata readProxyMetadata( ManagedRepositoryConfiguration managedRepository,
|
||||
public ArchivaRepositoryMetadata readProxyMetadata( ManagedRepositoryContent managedRepository,
|
||||
VersionedReference reference, String proxyId )
|
||||
{
|
||||
String metadataPath = getRepositorySpecificName( proxyId, toPath( reference ) );
|
||||
File metadataFile = new File( managedRepository.getLocation(), metadataPath );
|
||||
File metadataFile = new File( managedRepository.getRepoRoot(), metadataPath );
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -579,27 +387,26 @@ public class MetadataTools
|
|||
* @throws LayoutException
|
||||
* @throws RepositoryMetadataException
|
||||
* @throws IOException
|
||||
* @throws ContentNotFoundException
|
||||
*/
|
||||
public void updateMetadata( ManagedRepositoryConfiguration managedRepository, ProjectReference reference )
|
||||
throws LayoutException, RepositoryMetadataException, IOException
|
||||
public void updateMetadata( ManagedRepositoryContent managedRepository, ProjectReference reference )
|
||||
throws LayoutException, RepositoryMetadataException, IOException, ContentNotFoundException
|
||||
{
|
||||
Comparator<String> comparator = VersionComparator.getInstance();
|
||||
File metadataFile = new File( managedRepository.getRepoRoot(), toPath( reference ) );
|
||||
|
||||
File metadataFile = new File( managedRepository.getLocation(), toPath( reference ) );
|
||||
long lastUpdated = getExistingLastUpdated( metadataFile );
|
||||
|
||||
ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
|
||||
metadata.setGroupId( reference.getGroupId() );
|
||||
metadata.setArtifactId( reference.getArtifactId() );
|
||||
|
||||
// Gather up the versions found in the managed repository.
|
||||
Set<String> availableVersions = gatherAvailableVersions( managedRepository, reference );
|
||||
// Gather up all versions found in the managed repository.
|
||||
Set<String> allVersions = managedRepository.getVersions( reference );
|
||||
|
||||
// Does this repository have a set of remote proxied repositories?
|
||||
Set proxiedRepoIds = this.proxies.get( managedRepository.getId() );
|
||||
Set<String> proxiedRepoIds = this.proxies.get( managedRepository.getId() );
|
||||
|
||||
String latestVersion = null;
|
||||
String releaseVersion = null;
|
||||
if ( proxiedRepoIds != null )
|
||||
if ( CollectionUtils.isNotEmpty( proxiedRepoIds ) )
|
||||
{
|
||||
// Add in the proxied repo version ids too.
|
||||
Iterator<String> it = proxiedRepoIds.iterator();
|
||||
|
@ -610,43 +417,120 @@ public class MetadataTools
|
|||
ArchivaRepositoryMetadata proxyMetadata = readProxyMetadata( managedRepository, reference, proxyId );
|
||||
if ( proxyMetadata != null )
|
||||
{
|
||||
availableVersions.addAll( proxyMetadata.getAvailableVersions() );
|
||||
allVersions.addAll( proxyMetadata.getAvailableVersions() );
|
||||
long proxyLastUpdated = getLastUpdated( proxyMetadata );
|
||||
|
||||
if ( latestVersion == null ||
|
||||
comparator.compare( proxyMetadata.getLatestVersion(), latestVersion ) > 0 )
|
||||
{
|
||||
latestVersion = proxyMetadata.getLatestVersion();
|
||||
}
|
||||
|
||||
if ( releaseVersion == null ||
|
||||
comparator.compare( proxyMetadata.getReleasedVersion(), releaseVersion ) > 0 )
|
||||
{
|
||||
releaseVersion = proxyMetadata.getReleasedVersion();
|
||||
}
|
||||
lastUpdated = Math.max( lastUpdated, proxyLastUpdated );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( availableVersions.size() == 0 )
|
||||
if ( allVersions.size() == 0 )
|
||||
{
|
||||
throw new IOException( "No versions found for reference." );
|
||||
}
|
||||
|
||||
// Sort the versions
|
||||
List<String> sortedVersions = new ArrayList<String>();
|
||||
sortedVersions.addAll( availableVersions );
|
||||
Collections.sort( sortedVersions, new VersionComparator() );
|
||||
List<String> sortedVersions = new ArrayList<String>( allVersions );
|
||||
Collections.sort( sortedVersions, VersionComparator.getInstance() );
|
||||
|
||||
// Split the versions into released and snapshots.
|
||||
List<String> releasedVersions = new ArrayList<String>();
|
||||
List<String> snapshotVersions = new ArrayList<String>();
|
||||
|
||||
for ( String version : sortedVersions )
|
||||
{
|
||||
if ( VersionUtil.isSnapshot( version ) )
|
||||
{
|
||||
snapshotVersions.add( version );
|
||||
}
|
||||
else
|
||||
{
|
||||
releasedVersions.add( version );
|
||||
}
|
||||
}
|
||||
|
||||
Collections.sort( releasedVersions, VersionComparator.getInstance() );
|
||||
Collections.sort( snapshotVersions, VersionComparator.getInstance() );
|
||||
|
||||
String latestVersion = sortedVersions.get( sortedVersions.size() - 1 );
|
||||
String releaseVersion = null;
|
||||
|
||||
if ( CollectionUtils.isNotEmpty( releasedVersions ) )
|
||||
{
|
||||
releaseVersion = releasedVersions.get( releasedVersions.size() - 1 );
|
||||
}
|
||||
|
||||
// Add the versions to the metadata model.
|
||||
metadata.setAvailableVersions( sortedVersions );
|
||||
|
||||
metadata.setLatestVersion( latestVersion );
|
||||
metadata.setReleasedVersion( releaseVersion );
|
||||
if ( lastUpdated > 0 )
|
||||
{
|
||||
metadata.setLastUpdatedTimestamp( toLastUpdatedDate( lastUpdated ) );
|
||||
}
|
||||
|
||||
// Save the metadata model to disk.
|
||||
RepositoryMetadataWriter.write( metadata, metadataFile );
|
||||
}
|
||||
|
||||
private Date toLastUpdatedDate( long lastUpdated )
|
||||
{
|
||||
Calendar cal = Calendar.getInstance( DateUtils.UTC_TIME_ZONE );
|
||||
cal.setTimeInMillis( lastUpdated );
|
||||
|
||||
return cal.getTime();
|
||||
}
|
||||
|
||||
private long getLastUpdated( ArchivaRepositoryMetadata metadata )
|
||||
{
|
||||
if ( metadata == null )
|
||||
{
|
||||
// Doesn't exist.
|
||||
return 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
String lastUpdated = metadata.getLastUpdated();
|
||||
if ( StringUtils.isBlank( lastUpdated ) )
|
||||
{
|
||||
// Not set.
|
||||
return 0;
|
||||
}
|
||||
|
||||
Date lastUpdatedDate = lastUpdatedFormat.parse( lastUpdated );
|
||||
return lastUpdatedDate.getTime();
|
||||
}
|
||||
catch ( ParseException e )
|
||||
{
|
||||
// Bad format on the last updated string.
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private long getExistingLastUpdated( File metadataFile )
|
||||
{
|
||||
if ( !metadataFile.exists() )
|
||||
{
|
||||
// Doesn't exist.
|
||||
return 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ArchivaRepositoryMetadata metadata = RepositoryMetadataReader.read( metadataFile );
|
||||
|
||||
return getLastUpdated( metadata );
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
// Error.
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the metadata based on the following rules.
|
||||
* <p/>
|
||||
|
@ -660,16 +544,22 @@ public class MetadataTools
|
|||
* @throws LayoutException
|
||||
* @throws RepositoryMetadataException
|
||||
* @throws IOException
|
||||
* @throws ContentNotFoundException
|
||||
*/
|
||||
public void updateMetadata( ManagedRepositoryConfiguration managedRepository, VersionedReference reference )
|
||||
throws LayoutException, RepositoryMetadataException, IOException
|
||||
public void updateMetadata( ManagedRepositoryContent managedRepository, VersionedReference reference )
|
||||
throws LayoutException, RepositoryMetadataException, IOException, ContentNotFoundException
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( managedRepository.getLayout() );
|
||||
File metadataFile = new File( managedRepository.getLocation(), toPath( reference ) );
|
||||
File metadataFile = new File( managedRepository.getRepoRoot(), toPath( reference ) );
|
||||
|
||||
long originalLastUpdated = getExistingLastUpdated( metadataFile );
|
||||
|
||||
ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
|
||||
metadata.setGroupId( reference.getGroupId() );
|
||||
metadata.setArtifactId( reference.getArtifactId() );
|
||||
if ( originalLastUpdated > 0 )
|
||||
{
|
||||
metadata.setLastUpdatedTimestamp( toLastUpdatedDate( originalLastUpdated ) );
|
||||
}
|
||||
|
||||
if ( VersionUtil.isSnapshot( reference.getVersion() ) )
|
||||
{
|
||||
|
@ -678,11 +568,12 @@ public class MetadataTools
|
|||
|
||||
// Gather up all of the versions found in the reference dir, and any
|
||||
// proxied maven-metadata.xml files.
|
||||
Set snapshotVersions = gatherSnapshotVersions( managedRepository, reference );
|
||||
Set<String> snapshotVersions = gatherSnapshotVersions( managedRepository, reference );
|
||||
|
||||
if ( snapshotVersions.isEmpty() )
|
||||
{
|
||||
throw new IOException( "Not snapshot versions found to reference." );
|
||||
throw new ContentNotFoundException( "No snapshot versions found on reference ["
|
||||
+ VersionedReference.toKey( reference ) + "]." );
|
||||
}
|
||||
|
||||
// sort the list to determine to aide in determining the Latest version.
|
||||
|
@ -731,7 +622,7 @@ public class MetadataTools
|
|||
throw new IOException( "Not snapshot artifact found to reference in " + reference );
|
||||
}
|
||||
|
||||
File artifactFile = new File( managedRepository.getLocation(), layout.toPath( artifact ) );
|
||||
File artifactFile = managedRepository.toFile( artifact );
|
||||
|
||||
if ( artifactFile.exists() )
|
||||
{
|
||||
|
@ -741,8 +632,8 @@ public class MetadataTools
|
|||
}
|
||||
else
|
||||
{
|
||||
throw new RepositoryMetadataException(
|
||||
"Unable to process snapshot version <" + latestVersion + "> reference <" + reference + ">" );
|
||||
throw new RepositoryMetadataException( "Unable to process snapshot version <" + latestVersion
|
||||
+ "> reference <" + reference + ">" );
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -788,4 +679,83 @@ public class MetadataTools
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first Artifact found in the provided VersionedReference location.
|
||||
*
|
||||
* @param managedRepository the repository to search within.
|
||||
* @param reference the reference to the versioned reference to search within
|
||||
* @return the ArtifactReference to the first artifact located within the versioned reference. or null if
|
||||
* no artifact was found within the versioned reference.
|
||||
* @throws IOException if the versioned reference is invalid (example: doesn't exist, or isn't a directory)
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public ArtifactReference getFirstArtifact( ManagedRepositoryContent managedRepository, VersionedReference reference )
|
||||
throws LayoutException, IOException
|
||||
{
|
||||
String path = toPath( reference );
|
||||
|
||||
int idx = path.lastIndexOf( '/' );
|
||||
if ( idx > 0 )
|
||||
{
|
||||
path = path.substring( 0, idx );
|
||||
}
|
||||
|
||||
File repoDir = new File( managedRepository.getRepoRoot(), path );
|
||||
|
||||
if ( !repoDir.exists() )
|
||||
{
|
||||
throw new IOException( "Unable to gather the list of snapshot versions on a non-existant directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
if ( !repoDir.isDirectory() )
|
||||
{
|
||||
throw new IOException( "Unable to gather the list of snapshot versions on a non-directory: "
|
||||
+ repoDir.getAbsolutePath() );
|
||||
}
|
||||
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
{
|
||||
if ( repoFiles[i].isDirectory() )
|
||||
{
|
||||
// Skip it. it's a directory.
|
||||
continue;
|
||||
}
|
||||
|
||||
String relativePath = PathUtil.getRelative( managedRepository.getRepoRoot(), repoFiles[i] );
|
||||
|
||||
if ( matchesArtifactPattern( relativePath ) )
|
||||
{
|
||||
ArtifactReference artifact = managedRepository.toArtifactReference( relativePath );
|
||||
|
||||
return artifact;
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.io.Writer;
|
|||
/**
|
||||
* ProjectModelWriter
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public interface ProjectModelWriter
|
||||
|
|
|
@ -56,7 +56,7 @@ import java.util.List;
|
|||
/**
|
||||
* ProjectModel400Writer for Maven 2 project model v4.0.0 pom files.
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.util.List;
|
|||
/**
|
||||
* RepositoryScanStatistics - extension to the RepositoryContentStatistics model.
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class RepositoryScanStatistics
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.io.File;
|
|||
/**
|
||||
* AbstractRepositoryLayerTestCase
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractRepositoryLayerTestCase
|
||||
|
@ -51,4 +51,18 @@ public abstract class AbstractRepositoryLayerTestCase
|
|||
repo.setUrl( url );
|
||||
return repo;
|
||||
}
|
||||
|
||||
protected RemoteRepositoryContent createRemoteRepositoryContent( String id, String name, String url, String layout )
|
||||
throws Exception
|
||||
{
|
||||
RemoteRepositoryConfiguration repo = new RemoteRepositoryConfiguration();
|
||||
repo.setId( id );
|
||||
repo.setName( name );
|
||||
repo.setUrl( url );
|
||||
|
||||
RemoteRepositoryContent repoContent = (RemoteRepositoryContent) lookup( RemoteRepositoryContent.class, layout );
|
||||
repoContent.setRepository( repo );
|
||||
|
||||
return repoContent;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
package org.apache.maven.archiva.repository;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
{
|
||||
|
||||
public static Test suite()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite( RepositoryURLTest.class );
|
||||
suite.addTest( org.apache.maven.archiva.repository.metadata.AllTests.suite() );
|
||||
suite.addTest( org.apache.maven.archiva.repository.project.AllTests.suite() );
|
||||
suite.addTest( org.apache.maven.archiva.repository.scanner.AllTests.suite() );
|
||||
suite.addTest( org.apache.maven.archiva.repository.layout.AllTests.suite() );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,400 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* AbstractDefaultRepositoryContentTestCase
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractDefaultRepositoryContentTestCase
|
||||
extends AbstractRepositoryLayerTestCase
|
||||
{
|
||||
public void testBadPathMissingType()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
|
||||
}
|
||||
|
||||
public void testBadPathReleaseInSnapshotDir()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", "non snapshot artifact inside of a snapshot dir" );
|
||||
}
|
||||
|
||||
public void testBadPathTimestampedSnapshotNotInSnapshotDir()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar",
|
||||
"Timestamped Snapshot artifact not inside of an Snapshot dir" );
|
||||
}
|
||||
|
||||
public void testBadPathTooShort()
|
||||
{
|
||||
assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
|
||||
}
|
||||
|
||||
public void testBadPathVersionMismatchA()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0/invalid-2.0.jar", "version mismatch between path and artifact" );
|
||||
}
|
||||
|
||||
public void testBadPathVersionMismatchB()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0/invalid-1.0b.jar", "version mismatch between path and artifact" );
|
||||
}
|
||||
|
||||
public void testBadPathWrongArtifactId()
|
||||
{
|
||||
assertBadPath( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar",
|
||||
"wrong artifact id" );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecGanymedSsh2()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "ch.ethz.ganymed";
|
||||
String artifactId = "ganymed-ssh2";
|
||||
String version = "build210";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxComm()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax";
|
||||
String artifactId = "comm";
|
||||
String version = "3.0-u1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "javax/comm/3.0-u1/comm-3.0-u1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the ejb-client type spec.
|
||||
* Type specs are not a 1 to 1 map to the extension.
|
||||
* This tests that effect.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
public void testGoodFooEjbClient()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-client";
|
||||
String version = "1.0";
|
||||
String classifier = null;
|
||||
String type = "ejb-client"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxPersistence()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax.persistence";
|
||||
String artifactId = "ejb";
|
||||
String version = "3.0-public_review";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar";
|
||||
|
||||
/*
|
||||
* The version id of "public_review" can cause problems. is it part of
|
||||
* the version spec? or the classifier?
|
||||
* Since the path spec below shows it in the path, then it is really
|
||||
* part of the version spec.
|
||||
*/
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
public void testGoodComFooTool()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-tool";
|
||||
String version = "1.0";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
public void testGoodCommonsLang()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "commons-lang";
|
||||
String artifactId = "commons-lang";
|
||||
String version = "2.1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
|
||||
*/
|
||||
public void testGoodDashedArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "test.maven-arch";
|
||||
String artifactId = "test-arch";
|
||||
String version = "2.0.3-SNAPSHOT";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* It may seem odd, but this is a valid artifact.
|
||||
*/
|
||||
public void testGoodDotNotationArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.company.department";
|
||||
String artifactId = "com.company.department";
|
||||
String version = "0.2";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* It may seem odd, but this is a valid artifact.
|
||||
*/
|
||||
public void testGoodDotNotationSameGroupIdAndArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.company.department";
|
||||
String artifactId = "com.company.department.project";
|
||||
String version = "0.3";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the classifier, and java-source type spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodFooLibSources()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1";
|
||||
String classifier = "sources";
|
||||
String type = "java-source"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodSnapshotMavenTest()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.archiva.test";
|
||||
String artifactId = "redonkulous";
|
||||
String version = "3.1-beta-1-20050831.101112-42";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-519] version identifiers within filename cause misidentification of version.
|
||||
* Example uses "test" in artifact Id, which is also part of the versionKeyword list.
|
||||
*/
|
||||
public void testGoodVersionKeywordInArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "maven";
|
||||
String artifactId = "maven-test-plugin";
|
||||
String version = "1.8.2";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
public void testToArtifactOnEmptyPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
toArtifactReference( "" );
|
||||
fail( "Should have failed due to empty path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToArtifactOnNullPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
toArtifactReference( null );
|
||||
fail( "Should have failed due to null path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToArtifactReferenceOnEmptyPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
toArtifactReference( "" );
|
||||
fail( "Should have failed due to empty path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToArtifactReferenceOnNullPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
toArtifactReference( null );
|
||||
fail( "Should have failed due to null path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToPathOnNullArtifactReference()
|
||||
|
||||
{
|
||||
try
|
||||
{
|
||||
ArtifactReference reference = null;
|
||||
toPath( reference );
|
||||
fail( "Should have failed due to null artifact reference." );
|
||||
}
|
||||
catch ( IllegalArgumentException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
|
||||
String version, String classifier, String type )
|
||||
{
|
||||
String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + classifier
|
||||
+ ":" + type;
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", actualReference );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
|
||||
if ( StringUtils.isNotBlank( classifier ) )
|
||||
{
|
||||
assertEquals( expectedId + " - Classifier", classifier, actualReference.getClassifier() );
|
||||
}
|
||||
assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, actualReference.getType() );
|
||||
}
|
||||
|
||||
private void assertBadPath( String path, String reason )
|
||||
{
|
||||
try
|
||||
{
|
||||
toArtifactReference( path );
|
||||
fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a roundtrip through the layout routines to determine success.
|
||||
*/
|
||||
private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
|
||||
String type )
|
||||
throws LayoutException
|
||||
{
|
||||
ArtifactReference expectedArtifact = createArtifact( groupId, artifactId, version, classifier, type );
|
||||
|
||||
// --- Artifact Tests.
|
||||
|
||||
// Artifact to Path
|
||||
assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( expectedArtifact ) );
|
||||
|
||||
// --- Artifact Reference Tests
|
||||
|
||||
// Path to Artifact Reference.
|
||||
ArtifactReference testReference = toArtifactReference( path );
|
||||
assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
|
||||
|
||||
// And back again, using test Reference from previous step.
|
||||
assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( testReference ) );
|
||||
}
|
||||
|
||||
private ArtifactReference createArtifact( String groupId, String artifactId, String version, String classifier,
|
||||
String type )
|
||||
{
|
||||
ArtifactReference artifact = new ArtifactReference();
|
||||
artifact.setGroupId( groupId );
|
||||
artifact.setArtifactId( artifactId );
|
||||
artifact.setVersion( version );
|
||||
artifact.setClassifier( classifier );
|
||||
artifact.setType( type );
|
||||
assertNotNull( artifact );
|
||||
return artifact;
|
||||
}
|
||||
|
||||
protected abstract ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException;
|
||||
|
||||
protected abstract String toPath( ArtifactReference reference );
|
||||
}
|
|
@ -0,0 +1,329 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* AbstractLegacyRepositoryContentTestCase
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractLegacyRepositoryContentTestCase
|
||||
extends AbstractRepositoryLayerTestCase
|
||||
{
|
||||
public void testBadPathArtifactIdMissingA()
|
||||
{
|
||||
assertBadPath( "groupId/jars/-1.0.jar", "artifactId is missing" );
|
||||
}
|
||||
|
||||
public void testBadPathArtifactIdMissingB()
|
||||
{
|
||||
assertBadPath( "groupId/jars/1.0.jar", "artifactId is missing" );
|
||||
}
|
||||
|
||||
public void testBadPathMissingType()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
|
||||
}
|
||||
|
||||
public void testBadPathTooShort()
|
||||
{
|
||||
// NEW
|
||||
assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
|
||||
}
|
||||
|
||||
public void testBadPathWrongPackageExtension()
|
||||
{
|
||||
assertBadPath( "org.apache.maven.test/jars/artifactId-1.0.war", "wrong package extension" );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecGanymedSsh2()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "ch.ethz.ganymed";
|
||||
String artifactId = "ganymed-ssh2";
|
||||
String version = "build210";
|
||||
String type = "jar";
|
||||
String path = "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxComm()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax";
|
||||
String artifactId = "comm";
|
||||
String version = "3.0-u1";
|
||||
String type = "jar";
|
||||
String path = "javax/jars/comm-3.0-u1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxPersistence()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax.persistence";
|
||||
String artifactId = "ejb";
|
||||
String version = "3.0-public_review";
|
||||
String type = "jar";
|
||||
String path = "javax.persistence/jars/ejb-3.0-public_review.jar";
|
||||
|
||||
/*
|
||||
* The version id of "public_review" can cause problems. is it part of
|
||||
* the version spec? or the classifier?
|
||||
*/
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodCommonsLang()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "commons-lang";
|
||||
String artifactId = "commons-lang";
|
||||
String version = "2.1";
|
||||
String type = "jar";
|
||||
String path = "commons-lang/jars/commons-lang-2.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodDerby()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.derby";
|
||||
String artifactId = "derby";
|
||||
String version = "10.2.2.0";
|
||||
String type = "jar";
|
||||
String path = "org.apache.derby/jars/derby-10.2.2.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the ejb-client type spec.
|
||||
* Type specs are not a 1 to 1 map to the extension.
|
||||
* This tests that effect.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
public void testGoodFooEjbClient()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-client";
|
||||
String version = "1.0";
|
||||
String type = "ejb"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com.foo/ejbs/foo-client-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test the classifier.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodFooLibJavadoc()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1-javadoc";
|
||||
String type = "javadoc";
|
||||
String path = "com.foo.lib/javadocs/foo-lib-2.1-alpha-1-javadoc.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the classifier, and java-source type spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodFooLibSources()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1-sources";
|
||||
String type = "java-source"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com.foo.lib/java-sources/foo-lib-2.1-alpha-1-sources.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodFooTool()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-tool";
|
||||
String version = "1.0";
|
||||
String type = "jar";
|
||||
String path = "com.foo/jars/foo-tool-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodGeronimoEjbSpec()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.geronimo.specs";
|
||||
String artifactId = "geronimo-ejb_2.1_spec";
|
||||
String version = "1.0.1";
|
||||
String type = "jar";
|
||||
String path = "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodLdapClientsPom()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "directory-clients";
|
||||
String artifactId = "ldap-clients";
|
||||
String version = "0.9.1-SNAPSHOT";
|
||||
String type = "pom";
|
||||
String path = "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodSnapshotMavenTest()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.archiva.test";
|
||||
String artifactId = "redonkulous";
|
||||
String version = "3.1-beta-1-20050831.101112-42";
|
||||
String type = "jar";
|
||||
String path = "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-519] version identifiers within filename cause misidentification of version.
|
||||
* Example uses "test" in artifact Id, which is also part of the versionKeyword list.
|
||||
*/
|
||||
public void testGoodVersionKeywordInArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "maven";
|
||||
String artifactId = "maven-test-plugin";
|
||||
String version = "1.8.2";
|
||||
String type = "jar";
|
||||
|
||||
String path = "maven/jars/maven-test-plugin-1.8.2.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a roundtrip through the layout routines to determine success.
|
||||
*/
|
||||
private void assertLayout( String path, String groupId, String artifactId, String version, String type )
|
||||
throws LayoutException
|
||||
{
|
||||
ArtifactReference expectedArtifact = createArtifact( groupId, artifactId, version, type );
|
||||
|
||||
// --- Artifact Tests.
|
||||
// Artifact to Path
|
||||
assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( expectedArtifact ) );
|
||||
|
||||
// --- Artifact Reference Tests
|
||||
|
||||
// Path to Artifact Reference.
|
||||
ArtifactReference testReference = toArtifactReference( path );
|
||||
assertArtifactReference( testReference, groupId, artifactId, version, type );
|
||||
|
||||
// And back again, using test Reference from previous step.
|
||||
assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, toPath( testReference ) );
|
||||
}
|
||||
|
||||
private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
|
||||
String version, String type )
|
||||
{
|
||||
String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + type;
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", actualReference );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
|
||||
assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, actualReference.getType() );
|
||||
// legacy has no classifier.
|
||||
assertNull( expectedId + " - classifier", actualReference.getClassifier() );
|
||||
}
|
||||
|
||||
protected ArtifactReference createArtifact( String groupId, String artifactId, String version, String type )
|
||||
{
|
||||
ArtifactReference artifact = new ArtifactReference();
|
||||
artifact.setGroupId( groupId );
|
||||
artifact.setArtifactId( artifactId );
|
||||
artifact.setVersion( version );
|
||||
artifact.setType( type );
|
||||
assertNotNull( artifact );
|
||||
return artifact;
|
||||
}
|
||||
|
||||
private void assertBadPath( String path, String reason )
|
||||
{
|
||||
try
|
||||
{
|
||||
toArtifactReference( path );
|
||||
fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected abstract ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException;
|
||||
|
||||
protected abstract String toPath( ArtifactReference reference );
|
||||
|
||||
}
|
|
@ -0,0 +1,355 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* DefaultPathParserTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class DefaultPathParserTest
|
||||
extends AbstractRepositoryLayerTestCase
|
||||
{
|
||||
public void testBadPathMissingType()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
|
||||
}
|
||||
|
||||
public void testBadPathReleaseInSnapshotDir()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", "non snapshot artifact inside of a snapshot dir" );
|
||||
}
|
||||
|
||||
public void testBadPathTimestampedSnapshotNotInSnapshotDir()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar",
|
||||
"Timestamped Snapshot artifact not inside of an Snapshot dir" );
|
||||
}
|
||||
|
||||
public void testBadPathTooShort()
|
||||
{
|
||||
assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
|
||||
}
|
||||
|
||||
public void testBadPathVersionMismatchA()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0/invalid-2.0.jar", "version mismatch between path and artifact" );
|
||||
}
|
||||
|
||||
public void testBadPathVersionMismatchB()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1.0/invalid-1.0b.jar", "version mismatch between path and artifact" );
|
||||
}
|
||||
|
||||
public void testBadPathWrongArtifactId()
|
||||
{
|
||||
assertBadPath( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar",
|
||||
"wrong artifact id" );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecGanymedSsh2()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "ch.ethz.ganymed";
|
||||
String artifactId = "ganymed-ssh2";
|
||||
String version = "build210";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxComm()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax";
|
||||
String artifactId = "comm";
|
||||
String version = "3.0-u1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "javax/comm/3.0-u1/comm-3.0-u1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the ejb-client type spec.
|
||||
* Type specs are not a 1 to 1 map to the extension.
|
||||
* This tests that effect.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
public void testGoodFooEjbClient()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-client";
|
||||
String version = "1.0";
|
||||
String classifier = null;
|
||||
String type = "ejb-client"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxPersistence()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax.persistence";
|
||||
String artifactId = "ejb";
|
||||
String version = "3.0-public_review";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar";
|
||||
|
||||
/*
|
||||
* The version id of "public_review" can cause problems. is it part of
|
||||
* the version spec? or the classifier?
|
||||
* Since the path spec below shows it in the path, then it is really
|
||||
* part of the version spec.
|
||||
*/
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
public void testGoodComFooTool()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-tool";
|
||||
String version = "1.0";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
public void testGoodCommonsLang()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "commons-lang";
|
||||
String artifactId = "commons-lang";
|
||||
String version = "2.1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
|
||||
*/
|
||||
public void testGoodDashedArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "test.maven-arch";
|
||||
String artifactId = "test-arch";
|
||||
String version = "2.0.3-SNAPSHOT";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* It may seem odd, but this is a valid artifact.
|
||||
*/
|
||||
public void testGoodDotNotationArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.company.department";
|
||||
String artifactId = "com.company.department";
|
||||
String version = "0.2";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* It may seem odd, but this is a valid artifact.
|
||||
*/
|
||||
public void testGoodDotNotationSameGroupIdAndArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.company.department";
|
||||
String artifactId = "com.company.department.project";
|
||||
String version = "0.3";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the classifier, and java-source type spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodFooLibSources()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1";
|
||||
String classifier = "sources";
|
||||
String type = "java-source"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodSnapshotMavenTest()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.archiva.test";
|
||||
String artifactId = "redonkulous";
|
||||
String version = "3.1-beta-1-20050831.101112-42";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-519] version identifiers within filename cause misidentification of version.
|
||||
* Example uses "test" in artifact Id, which is also part of the versionKeyword list.
|
||||
*/
|
||||
public void testGoodVersionKeywordInArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "maven";
|
||||
String artifactId = "maven-test-plugin";
|
||||
String version = "1.8.2";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
public void testToArtifactOnEmptyPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
DefaultPathParser.toArtifactReference( "" );
|
||||
fail( "Should have failed due to empty path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToArtifactOnNullPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
DefaultPathParser.toArtifactReference( null );
|
||||
fail( "Should have failed due to null path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToArtifactReferenceOnEmptyPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
DefaultPathParser.toArtifactReference( "" );
|
||||
fail( "Should have failed due to empty path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testToArtifactReferenceOnNullPath()
|
||||
{
|
||||
try
|
||||
{
|
||||
DefaultPathParser.toArtifactReference( null );
|
||||
fail( "Should have failed due to null path." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a path to artifact reference lookup, and verify the results.
|
||||
*/
|
||||
private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
|
||||
String type )
|
||||
throws LayoutException
|
||||
{
|
||||
// Path to Artifact Reference.
|
||||
ArtifactReference testReference = DefaultPathParser.toArtifactReference( path );
|
||||
assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
|
||||
String version, String classifier, String type )
|
||||
{
|
||||
String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + classifier
|
||||
+ ":" + type;
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", actualReference );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
|
||||
if ( StringUtils.isNotBlank( classifier ) )
|
||||
{
|
||||
assertEquals( expectedId + " - Classifier", classifier, actualReference.getClassifier() );
|
||||
}
|
||||
assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, actualReference.getType() );
|
||||
}
|
||||
|
||||
private void assertBadPath( String path, String reason )
|
||||
{
|
||||
try
|
||||
{
|
||||
DefaultPathParser.toArtifactReference( path );
|
||||
fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* FilenameParserTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class FilenameParserTest
|
||||
extends TestCase
|
||||
{
|
||||
public void testNameExtensionJar()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
|
||||
|
||||
assertEquals( "maven-test-plugin-1.8.3", parser.getName() );
|
||||
assertEquals( "jar", parser.getExtension() );
|
||||
}
|
||||
|
||||
public void testNameExtensionTarGz()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "archiva-1.0-beta-2-bin.tar.gz" );
|
||||
|
||||
assertEquals( "archiva-1.0-beta-2-bin", parser.getName() );
|
||||
assertEquals( "tar.gz", parser.getExtension() );
|
||||
}
|
||||
|
||||
public void testNameExtensionTarBz2()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "archiva-1.0-SNAPSHOT-src.tar.bz2" );
|
||||
|
||||
assertEquals( "archiva-1.0-SNAPSHOT-src", parser.getName() );
|
||||
assertEquals( "tar.bz2", parser.getExtension() );
|
||||
}
|
||||
|
||||
public void testNameExtensionCapitolizedTarGz()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "ARCHIVA-1.0-BETA-2-BIN.TAR.GZ" );
|
||||
|
||||
assertEquals( "ARCHIVA-1.0-BETA-2-BIN", parser.getName() );
|
||||
assertEquals( "TAR.GZ", parser.getExtension() );
|
||||
}
|
||||
|
||||
public void testNext()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
|
||||
|
||||
assertEquals( "maven-test-plugin-1.8.3", parser.getName() );
|
||||
assertEquals( "jar", parser.getExtension() );
|
||||
|
||||
assertEquals( "maven", parser.next() );
|
||||
assertEquals( "test", parser.next() );
|
||||
assertEquals( "plugin", parser.next() );
|
||||
assertEquals( "1.8.3", parser.next() );
|
||||
assertNull( parser.next() );
|
||||
}
|
||||
|
||||
public void testExpect()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
|
||||
|
||||
assertEquals( "maven-test-plugin-1.8.3", parser.getName() );
|
||||
assertEquals( "jar", parser.getExtension() );
|
||||
|
||||
assertEquals( "maven-test-plugin", parser.expect( "maven-test-plugin" ) );
|
||||
assertEquals( "1.8.3", parser.expect( "1.8.3" ) );
|
||||
assertNull( parser.expect( "jar" ) );
|
||||
}
|
||||
|
||||
public void testExpectWithRemaining()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "ganymede-ssh2-build250-sources.jar" );
|
||||
|
||||
assertEquals( "ganymede-ssh2-build250-sources", parser.getName() );
|
||||
assertEquals( "jar", parser.getExtension() );
|
||||
|
||||
assertEquals( "ganymede-ssh2", parser.expect( "ganymede-ssh2" ) );
|
||||
assertEquals( "build250", parser.expect( "build250" ) );
|
||||
assertEquals( "sources", parser.remaining() );
|
||||
|
||||
assertNull( parser.expect( "jar" ) );
|
||||
}
|
||||
|
||||
public void testNextNonVersion()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "maven-test-plugin-1.8.3.jar" );
|
||||
|
||||
assertEquals("maven-test-plugin", parser.nextNonVersion() );
|
||||
assertEquals("1.8.3", parser.remaining() );
|
||||
}
|
||||
|
||||
public void testNextArbitraryNonVersion()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "maven-jdk-1.4-plugin-1.0-20070828.123456-42.jar" );
|
||||
|
||||
assertEquals("maven-jdk-1.4-plugin", parser.nextNonVersion() );
|
||||
assertEquals("1.0-20070828.123456-42", parser.remaining() );
|
||||
}
|
||||
|
||||
public void testNextJython()
|
||||
{
|
||||
FilenameParser parser = new FilenameParser( "jython-20020827-no-oro.jar" );
|
||||
|
||||
assertEquals("jython", parser.nextNonVersion() );
|
||||
assertEquals("20020827", parser.nextVersion() );
|
||||
assertEquals("no-oro", parser.remaining() );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,301 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* LegacyPathParserTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class LegacyPathParserTest
|
||||
extends AbstractRepositoryLayerTestCase
|
||||
{
|
||||
public void testBadPathArtifactIdMissingA()
|
||||
{
|
||||
assertBadPath( "groupId/jars/-1.0.jar", "artifactId is missing" );
|
||||
}
|
||||
|
||||
public void testBadPathArtifactIdMissingB()
|
||||
{
|
||||
assertBadPath( "groupId/jars/1.0.jar", "artifactId is missing" );
|
||||
}
|
||||
|
||||
public void testBadPathMissingType()
|
||||
{
|
||||
assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
|
||||
}
|
||||
|
||||
public void testBadPathTooShort()
|
||||
{
|
||||
// NEW
|
||||
assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
|
||||
}
|
||||
|
||||
public void testBadPathWrongPackageExtension()
|
||||
{
|
||||
assertBadPath( "org.apache.maven.test/jars/artifactId-1.0.war", "wrong package extension" );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecGanymedSsh2()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "ch.ethz.ganymed";
|
||||
String artifactId = "ganymed-ssh2";
|
||||
String version = "build210";
|
||||
String type = "jar";
|
||||
String path = "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxComm()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax";
|
||||
String artifactId = "comm";
|
||||
String version = "3.0-u1";
|
||||
String type = "jar";
|
||||
String path = "javax/jars/comm-3.0-u1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-432] Oddball version spec.
|
||||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodButOddVersionSpecJavaxPersistence()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax.persistence";
|
||||
String artifactId = "ejb";
|
||||
String version = "3.0-public_review";
|
||||
String type = "jar";
|
||||
String path = "javax.persistence/jars/ejb-3.0-public_review.jar";
|
||||
|
||||
/*
|
||||
* The version id of "public_review" can cause problems. is it part of
|
||||
* the version spec? or the classifier?
|
||||
*/
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodCommonsLang()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "commons-lang";
|
||||
String artifactId = "commons-lang";
|
||||
String version = "2.1";
|
||||
String type = "jar";
|
||||
String path = "commons-lang/jars/commons-lang-2.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodDerby()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.derby";
|
||||
String artifactId = "derby";
|
||||
String version = "10.2.2.0";
|
||||
String type = "jar";
|
||||
String path = "org.apache.derby/jars/derby-10.2.2.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the ejb-client type spec.
|
||||
* Type specs are not a 1 to 1 map to the extension.
|
||||
* This tests that effect.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
public void testGoodFooEjbClient()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-client";
|
||||
String version = "1.0";
|
||||
String type = "ejb"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com.foo/ejbs/foo-client-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test the classifier.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodFooLibJavadoc()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1-javadoc";
|
||||
String type = "javadoc";
|
||||
String path = "com.foo.lib/javadocs/foo-lib-2.1-alpha-1-javadoc.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the classifier, and java-source type spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodFooLibSources()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1-sources";
|
||||
String type = "java-source"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com.foo.lib/java-sources/foo-lib-2.1-alpha-1-sources.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodFooTool()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-tool";
|
||||
String version = "1.0";
|
||||
String type = "jar";
|
||||
String path = "com.foo/jars/foo-tool-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodGeronimoEjbSpec()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.geronimo.specs";
|
||||
String artifactId = "geronimo-ejb_2.1_spec";
|
||||
String version = "1.0.1";
|
||||
String type = "jar";
|
||||
String path = "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodLdapClientsPom()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "directory-clients";
|
||||
String artifactId = "ldap-clients";
|
||||
String version = "0.9.1-SNAPSHOT";
|
||||
String type = "pom";
|
||||
String path = "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
public void testGoodSnapshotMavenTest()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "org.apache.archiva.test";
|
||||
String artifactId = "redonkulous";
|
||||
String version = "3.1-beta-1-20050831.101112-42";
|
||||
String type = "jar";
|
||||
String path = "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-519] version identifiers within filename cause misidentification of version.
|
||||
* Example uses "test" in artifact Id, which is also part of the versionKeyword list.
|
||||
*/
|
||||
public void testGoodVersionKeywordInArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "maven";
|
||||
String artifactId = "maven-test-plugin";
|
||||
String version = "1.8.2";
|
||||
String type = "jar";
|
||||
|
||||
String path = "maven/jars/maven-test-plugin-1.8.2.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a path to artifact reference lookup, and verify the results.
|
||||
*/
|
||||
private void assertLayout( String path, String groupId, String artifactId, String version, String type )
|
||||
throws LayoutException
|
||||
{
|
||||
// Path to Artifact Reference.
|
||||
ArtifactReference testReference = LegacyPathParser.toArtifactReference( path );
|
||||
assertArtifactReference( testReference, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
private void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
|
||||
String version, String type )
|
||||
{
|
||||
String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + type;
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", actualReference );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
|
||||
assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, actualReference.getType() );
|
||||
// legacy has no classifier.
|
||||
assertNull( expectedId + " - classifier", actualReference.getClassifier() );
|
||||
}
|
||||
|
||||
protected void assertBadPath( String path, String reason )
|
||||
{
|
||||
try
|
||||
{
|
||||
LegacyPathParser.toArtifactReference( path );
|
||||
fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,206 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.VersionComparator;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* ManagedDefaultRepositoryContentTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ManagedDefaultRepositoryContentTest
|
||||
extends AbstractDefaultRepositoryContentTestCase
|
||||
{
|
||||
private ManagedRepositoryContent repoContent;
|
||||
|
||||
public void testGetVersionsBadArtifact()
|
||||
throws Exception
|
||||
{
|
||||
assertGetVersions( "bad_artifact", Collections.EMPTY_LIST );
|
||||
}
|
||||
|
||||
public void testGetVersionsMissingMultipleVersions()
|
||||
throws Exception
|
||||
{
|
||||
assertGetVersions( "missing_metadata_b", Arrays.asList( "1.0", "1.0.1", "2.0", "2.0.1", "2.0-20070821-dev" ) );
|
||||
}
|
||||
|
||||
public void testGetVersionsSimple()
|
||||
throws Exception
|
||||
{
|
||||
assertVersions( "proxied_multi", "2.1", new String[] { "2.1" } );
|
||||
}
|
||||
|
||||
public void testGetVersionsSimpleYetIncomplete()
|
||||
throws Exception
|
||||
{
|
||||
assertGetVersions( "incomplete_metadata_a", Collections.singletonList( "1.0" ) );
|
||||
}
|
||||
|
||||
public void testGetVersionsSimpleYetMissing()
|
||||
throws Exception
|
||||
{
|
||||
assertGetVersions( "missing_metadata_a", Collections.singletonList( "1.0" ) );
|
||||
}
|
||||
|
||||
public void testGetVersionsSnapshotA()
|
||||
throws Exception
|
||||
{
|
||||
assertVersions( "snap_shots_a", "1.0-alpha-11-SNAPSHOT", new String[] {
|
||||
"1.0-alpha-11-SNAPSHOT",
|
||||
"1.0-alpha-11-20070221.194724-2",
|
||||
"1.0-alpha-11-20070302.212723-3",
|
||||
"1.0-alpha-11-20070303.152828-4",
|
||||
"1.0-alpha-11-20070305.215149-5",
|
||||
"1.0-alpha-11-20070307.170909-6",
|
||||
"1.0-alpha-11-20070314.211405-9",
|
||||
"1.0-alpha-11-20070316.175232-11" } );
|
||||
}
|
||||
|
||||
public void testToMetadataPathFromProjectReference()
|
||||
{
|
||||
ProjectReference reference = new ProjectReference();
|
||||
reference.setGroupId( "com.foo" );
|
||||
reference.setArtifactId( "foo-tool" );
|
||||
|
||||
assertEquals( "com/foo/foo-tool/maven-metadata.xml", repoContent.toMetadataPath( reference ) );
|
||||
}
|
||||
|
||||
public void testToMetadataPathFromVersionReference()
|
||||
{
|
||||
VersionedReference reference = new VersionedReference();
|
||||
reference.setGroupId( "com.foo" );
|
||||
reference.setArtifactId( "foo-tool" );
|
||||
reference.setVersion( "1.0" );
|
||||
|
||||
assertEquals( "com/foo/foo-tool/1.0/maven-metadata.xml", repoContent.toMetadataPath( reference ) );
|
||||
}
|
||||
|
||||
public void testToPathOnNullArtifactReference()
|
||||
{
|
||||
try
|
||||
{
|
||||
ArtifactReference reference = null;
|
||||
repoContent.toPath( reference );
|
||||
fail( "Should have failed due to null artifact reference." );
|
||||
}
|
||||
catch ( IllegalArgumentException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
private void assertGetVersions( String artifactId, List<String> expectedVersions )
|
||||
throws Exception
|
||||
{
|
||||
ProjectReference reference = new ProjectReference();
|
||||
reference.setGroupId( "org.apache.archiva.metadata.tests" );
|
||||
reference.setArtifactId( artifactId );
|
||||
|
||||
// Use the test metadata-repository, which is already setup for
|
||||
// These kind of version tests.
|
||||
File repoDir = getTestFile( "src/test/repositories/metadata-repository" );
|
||||
repoContent.getRepository().setLocation( repoDir.getAbsolutePath() );
|
||||
|
||||
// Request the versions.
|
||||
Set<String> testedVersionSet = repoContent.getVersions( reference );
|
||||
|
||||
// Sort the list (for asserts)
|
||||
List<String> testedVersions = new ArrayList<String>();
|
||||
testedVersions.addAll( testedVersionSet );
|
||||
Collections.sort( testedVersions, new VersionComparator() );
|
||||
|
||||
// Test the expected array of versions, to the actual tested versions
|
||||
assertEquals( "available versions", expectedVersions, testedVersions );
|
||||
}
|
||||
|
||||
private void assertVersions( String artifactId, String version, String[] expectedVersions )
|
||||
throws Exception
|
||||
{
|
||||
VersionedReference reference = new VersionedReference();
|
||||
reference.setGroupId( "org.apache.archiva.metadata.tests" );
|
||||
reference.setArtifactId( artifactId );
|
||||
reference.setVersion( version );
|
||||
|
||||
// Use the test metadata-repository, which is already setup for
|
||||
// These kind of version tests.
|
||||
File repoDir = getTestFile( "src/test/repositories/metadata-repository" );
|
||||
repoContent.getRepository().setLocation( repoDir.getAbsolutePath() );
|
||||
|
||||
// Request the versions.
|
||||
Set<String> testedVersionSet = repoContent.getVersions( reference );
|
||||
|
||||
// Sort the list (for asserts later)
|
||||
List<String> testedVersions = new ArrayList<String>();
|
||||
testedVersions.addAll( testedVersionSet );
|
||||
Collections.sort( testedVersions, new VersionComparator() );
|
||||
|
||||
// Test the expected array of versions, to the actual tested versions
|
||||
assertEquals( "Assert Versions: length/size", expectedVersions.length, testedVersions.size() );
|
||||
|
||||
for ( int i = 0; i < expectedVersions.length; i++ )
|
||||
{
|
||||
String actualVersion = testedVersions.get( i );
|
||||
assertEquals( "Versions[" + i + "]", expectedVersions[i], actualVersion );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
File repoDir = getTestFile( "src/test/repositories/default-repository" );
|
||||
|
||||
ManagedRepositoryConfiguration repository = createRepository( "testRepo", "Unit Test Repo", repoDir );
|
||||
|
||||
repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
|
||||
repoContent.setRepository( repository );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
return repoContent.toArtifactReference( path );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String toPath( ArtifactReference reference )
|
||||
{
|
||||
return repoContent.toPath( reference );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,192 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.VersionComparator;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* ManagedLegacyRepositoryContentTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ManagedLegacyRepositoryContentTest
|
||||
extends AbstractLegacyRepositoryContentTestCase
|
||||
{
|
||||
private ManagedRepositoryContent repoContent;
|
||||
|
||||
public void testGetVersionsFromProjectReference()
|
||||
throws Exception
|
||||
{
|
||||
assertVersions( "org.apache.maven", "testing", new String[] {
|
||||
"UNKNOWN",
|
||||
"1.0-javadoc",
|
||||
"1.0-sources",
|
||||
"1.0",
|
||||
"1.0-20050611.112233-1" } );
|
||||
}
|
||||
|
||||
public void testGetVersionsFromVersionedReference()
|
||||
throws Exception
|
||||
{
|
||||
assertVersions( "org.apache.maven", "testing", "1.0", new String[] {
|
||||
"1.0-javadoc",
|
||||
"1.0-sources",
|
||||
"1.0",
|
||||
"1.0-20050611.112233-1" } );
|
||||
}
|
||||
|
||||
private void assertVersions( String groupId, String artifactId, String[] expectedVersions )
|
||||
throws Exception
|
||||
{
|
||||
ProjectReference reference = new ProjectReference();
|
||||
reference.setGroupId( groupId );
|
||||
reference.setArtifactId( artifactId );
|
||||
|
||||
// Request the versions.
|
||||
Set<String> testedVersionSet = repoContent.getVersions( reference );
|
||||
|
||||
// Sort the list (for asserts later)
|
||||
List<String> testedVersions = new ArrayList<String>();
|
||||
testedVersions.addAll( testedVersionSet );
|
||||
Collections.sort( testedVersions, new VersionComparator() );
|
||||
|
||||
// Test the expected array of versions, to the actual tested versions
|
||||
assertEquals( "Assert (Project) Versions: length/size", expectedVersions.length, testedVersions.size() );
|
||||
|
||||
for ( int i = 0; i < expectedVersions.length; i++ )
|
||||
{
|
||||
String actualVersion = testedVersions.get( i );
|
||||
assertEquals( "(Project) Versions[" + i + "]", expectedVersions[i], actualVersion );
|
||||
}
|
||||
}
|
||||
|
||||
private void assertVersions( String groupId, String artifactId, String version, String[] expectedVersions )
|
||||
throws Exception
|
||||
{
|
||||
VersionedReference reference = new VersionedReference();
|
||||
reference.setGroupId( groupId );
|
||||
reference.setArtifactId( artifactId );
|
||||
reference.setVersion( version );
|
||||
|
||||
// Request the versions.
|
||||
Set<String> testedVersionSet = repoContent.getVersions( reference );
|
||||
|
||||
// Sort the list (for asserts later)
|
||||
List<String> testedVersions = new ArrayList<String>();
|
||||
testedVersions.addAll( testedVersionSet );
|
||||
Collections.sort( testedVersions, new VersionComparator() );
|
||||
|
||||
// Test the expected array of versions, to the actual tested versions
|
||||
assertEquals( "Assert (Project) Versions: length/size", expectedVersions.length, testedVersions.size() );
|
||||
|
||||
for ( int i = 0; i < expectedVersions.length; i++ )
|
||||
{
|
||||
String actualVersion = testedVersions.get( i );
|
||||
assertEquals( "(Project) Versions[" + i + "]", expectedVersions[i], actualVersion );
|
||||
}
|
||||
}
|
||||
|
||||
public void testGetRelatedArtifacts()
|
||||
throws Exception
|
||||
{
|
||||
ArtifactReference reference = createArtifact( "org.apache.maven", "testing", "1.0", "jar" );
|
||||
|
||||
Set<ArtifactReference> related = repoContent.getRelatedArtifacts( reference );
|
||||
assertNotNull( related );
|
||||
|
||||
String expected[] = new String[] {
|
||||
"org.apache.maven/jars/testing-1.0.jar",
|
||||
"org.apache.maven/java-sources/testing-1.0-sources.jar",
|
||||
"org.apache.maven/jars/testing-1.0-20050611.112233-1.jar",
|
||||
"org.apache.maven/poms/testing-1.0.pom",
|
||||
"org.apache.maven/javadocs/testing-1.0-javadoc.jar" };
|
||||
|
||||
StringBuffer relatedDebugString = new StringBuffer();
|
||||
relatedDebugString.append( "[" );
|
||||
for ( ArtifactReference ref : related )
|
||||
{
|
||||
String actualPath = repoContent.toPath( ref );
|
||||
relatedDebugString.append( actualPath ).append( ":" );
|
||||
}
|
||||
relatedDebugString.append( "]" );
|
||||
|
||||
assertEquals( "Related <" + relatedDebugString + ">:", expected.length, related.size() );
|
||||
|
||||
for ( String expectedPath : expected )
|
||||
{
|
||||
boolean found = false;
|
||||
for ( ArtifactReference actualRef : related )
|
||||
{
|
||||
String actualPath = repoContent.toPath( actualRef );
|
||||
if ( actualPath.endsWith( expectedPath ) )
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( !found )
|
||||
{
|
||||
fail( "Unable to find expected artifact [" + expectedPath + "] in list of related artifacts. "
|
||||
+ "Related <" + relatedDebugString + ">" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
File repoDir = getTestFile( "src/test/repositories/legacy-repository" );
|
||||
|
||||
ManagedRepositoryConfiguration repository = createRepository( "testRepo", "Unit Test Repo", repoDir );
|
||||
repository.setLayout( "legacy" );
|
||||
|
||||
repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "legacy" );
|
||||
repoContent.setRepository( repository );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
return repoContent.toArtifactReference( path );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String toPath( ArtifactReference reference )
|
||||
{
|
||||
return repoContent.toPath( reference );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* RemoteDefaultRepositoryContentTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class RemoteDefaultRepositoryContentTest
|
||||
extends AbstractDefaultRepositoryContentTestCase
|
||||
{
|
||||
private RemoteRepositoryContent repoContent;
|
||||
|
||||
@Override
|
||||
protected void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
RemoteRepositoryConfiguration repository = createRemoteRepository( "testRemoteRepo", "Unit Test Remote Repo",
|
||||
"http://repo1.maven.org/maven2/" );
|
||||
|
||||
repoContent = (RemoteRepositoryContent) lookup( RemoteRepositoryContent.class, "default" );
|
||||
repoContent.setRepository( repository );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
return repoContent.toArtifactReference( path );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String toPath( ArtifactReference reference )
|
||||
{
|
||||
return repoContent.toPath( reference );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* RemoteLegacyRepositoryContentTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class RemoteLegacyRepositoryContentTest
|
||||
extends AbstractLegacyRepositoryContentTestCase
|
||||
{
|
||||
private RemoteRepositoryContent repoContent;
|
||||
|
||||
@Override
|
||||
protected void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
RemoteRepositoryConfiguration repository = createRemoteRepository( "testRemoteLegacyRepo",
|
||||
"Unit Test Remote Legacy Repo",
|
||||
"http://repo1.maven.org/maven/" );
|
||||
repository.setLayout( "legacy" );
|
||||
|
||||
repoContent = (RemoteRepositoryContent) lookup( RemoteRepositoryContent.class, "legacy" );
|
||||
repoContent.setRepository( repository );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactReference toArtifactReference( String path )
|
||||
throws LayoutException
|
||||
{
|
||||
return repoContent.toArtifactReference( path );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String toPath( ArtifactReference reference )
|
||||
{
|
||||
return repoContent.toPath( reference );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,266 @@
|
|||
package org.apache.maven.archiva.repository.content;
|
||||
|
||||
/*
|
||||
* 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.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
|
||||
/**
|
||||
* RepositoryRequestTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class RepositoryRequestTest
|
||||
extends AbstractRepositoryLayerTestCase
|
||||
{
|
||||
public void testInvalidRequestNoArtifactId()
|
||||
{
|
||||
assertInvalidRequest( "groupId/jars/-1.0.jar" );
|
||||
}
|
||||
|
||||
public void testInvalidLegacyRequestBadLocation()
|
||||
{
|
||||
assertInvalidRequest( "org.apache.maven.test/jars/artifactId-1.0.war" );
|
||||
}
|
||||
|
||||
public void testInvalidRequestTooShort()
|
||||
{
|
||||
assertInvalidRequest( "org.apache.maven.test/artifactId-2.0.jar" );
|
||||
}
|
||||
|
||||
public void testInvalidDefaultRequestBadLocation()
|
||||
{
|
||||
assertInvalidRequest( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
|
||||
}
|
||||
|
||||
public void testValidLegacyGanymed()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar", "ch.ethz.ganymed", "ganymed-ssh2", "build210",
|
||||
null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidDefaultGanymed()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar", "ch.ethz.ganymed",
|
||||
"ganymed-ssh2", "build210", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidLegacyJavaxComm()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "javax/jars/comm-3.0-u1.jar", "javax", "comm", "3.0-u1", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidDefaultJavaxComm()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "javax/comm/3.0-u1/comm-3.0-u1.jar", "javax", "comm", "3.0-u1", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidLegacyJavaxPersistence()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "javax.persistence/jars/ejb-3.0-public_review.jar", "javax.persistence", "ejb",
|
||||
"3.0-public_review", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidDefaultJavaxPersistence()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar", "javax.persistence", "ejb",
|
||||
"3.0-public_review", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidLegacyMavenTestPlugin()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "maven/jars/maven-test-plugin-1.8.2.jar", "maven", "maven-test-plugin", "1.8.2", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidDefaultMavenTestPlugin()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom", "maven", "maven-test-plugin",
|
||||
"1.8.2", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidLegacyCommonsLangJavadoc()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "commons-lang/jars/commons-lang-2.1-javadoc.jar", "commons-lang", "commons-lang", "2.1-javadoc",
|
||||
null, "javadoc" );
|
||||
}
|
||||
|
||||
public void testValidDefaultCommonsLangJavadoc()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "commons-lang/commons-lang/2.1/commons-lang-2.1-javadoc.jar", "commons-lang", "commons-lang",
|
||||
"2.1", "javadoc", "javadoc" );
|
||||
}
|
||||
|
||||
public void testValidLegacyDerbyPom()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "org.apache.derby/poms/derby-10.2.2.0.pom", "org.apache.derby", "derby", "10.2.2.0", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidDefaultDerbyPom()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "org/apache/derby/derby/10.2.2.0/derby-10.2.2.0.pom", "org.apache.derby", "derby", "10.2.2.0",
|
||||
null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidLegacyGeronimoEjbSpec()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar", "org.apache.geronimo.specs",
|
||||
"geronimo-ejb_2.1_spec", "1.0.1", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidDefaultGeronimoEjbSpec()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "org/apache/geronimo/specs/geronimo-ejb_2.1_spec/1.0.1/geronimo-ejb_2.1_spec-1.0.1.jar",
|
||||
"org.apache.geronimo.specs", "geronimo-ejb_2.1_spec", "1.0.1", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidLegacyLdapSnapshot()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom", "directory-clients", "ldap-clients",
|
||||
"0.9.1-SNAPSHOT", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidDefaultLdapSnapshot()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "directory-clients/ldap-clients/0.9.1-SNAPSHOT/ldap-clients-0.9.1-SNAPSHOT.pom",
|
||||
"directory-clients", "ldap-clients", "0.9.1-SNAPSHOT", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidLegacyTestArchSnapshot()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "test.maven-arch/poms/test-arch-2.0.3-SNAPSHOT.pom", "test.maven-arch", "test-arch",
|
||||
"2.0.3-SNAPSHOT", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidDefaultTestArchSnapshot()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom", "test.maven-arch",
|
||||
"test-arch", "2.0.3-SNAPSHOT", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidLegacyOddDottedArtifactId()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "com.company.department/poms/com.company.department.project-0.2.pom", "com.company.department",
|
||||
"com.company.department.project", "0.2", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidDefaultOddDottedArtifactId()
|
||||
throws Exception
|
||||
{
|
||||
assertValid(
|
||||
"com/company/department/com.company.department.project/0.2/com.company.department.project-0.2.pom",
|
||||
"com.company.department", "com.company.department.project", "0.2", null, "pom" );
|
||||
}
|
||||
|
||||
public void testValidLegacyTimestampedSnapshot()
|
||||
throws Exception
|
||||
{
|
||||
assertValid( "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar",
|
||||
"org.apache.archiva.test", "redonkulous", "3.1-beta-1-20050831.101112-42", null, "jar" );
|
||||
}
|
||||
|
||||
public void testValidDefaultTimestampedSnapshot()
|
||||
throws Exception
|
||||
{
|
||||
assertValid(
|
||||
"org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.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" ));
|
||||
}
|
||||
|
||||
private void assertValid( String path, String groupId, String artifactId, String version, String classifier,
|
||||
String type )
|
||||
throws Exception
|
||||
{
|
||||
String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":"
|
||||
+ ( classifier != null ? classifier + ":" : "" ) + type;
|
||||
|
||||
ArtifactReference reference = repoRequest.toArtifactReference( path );
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", reference );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, reference.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, reference.getArtifactId() );
|
||||
if ( StringUtils.isNotBlank( classifier ) )
|
||||
{
|
||||
assertEquals( expectedId + " - Classifier", classifier, reference.getClassifier() );
|
||||
}
|
||||
assertEquals( expectedId + " - Version ID", version, reference.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, reference.getType() );
|
||||
}
|
||||
|
||||
private void assertInvalidRequest( String path )
|
||||
{
|
||||
try
|
||||
{
|
||||
repoRequest.toArtifactReference( path );
|
||||
fail( "Expected a LayoutException on an invalid path [" + path + "]" );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
}
|
||||
|
||||
private RepositoryRequest repoRequest;
|
||||
|
||||
@Override
|
||||
protected void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
repoRequest = (RepositoryRequest) lookup( RepositoryRequest.class );
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.layout;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests - Useful for developers using IDEs.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
{
|
||||
public static Test suite()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.layout" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite( BidirectionalRepositoryLayoutFactoryTest.class );
|
||||
suite.addTestSuite( LegacyBidirectionalRepositoryLayoutTest.class );
|
||||
suite.addTestSuite( DefaultBidirectionalRepositoryLayoutTest.class );
|
||||
suite.addTestSuite( RepositoryLayoutUtilsTest.class );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
|
||||
}
|
|
@ -130,7 +130,24 @@ public class DefaultBidirectionalRepositoryLayoutTest
|
|||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* [MRM-519] version identifiers within filename cause misidentification of version.
|
||||
* Example uses "test" in artifact Id, which is also part of the versionKeyword list.
|
||||
*/
|
||||
public void testGoodVersionKeywordInArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "maven";
|
||||
String artifactId = "maven-test-plugin";
|
||||
String version = "1.8.2";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
|
||||
*/
|
||||
|
@ -143,10 +160,10 @@ public class DefaultBidirectionalRepositoryLayoutTest
|
|||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
|
||||
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* It may seem odd, but this is a valid artifact.
|
||||
*/
|
||||
|
@ -159,7 +176,7 @@ public class DefaultBidirectionalRepositoryLayoutTest
|
|||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
|
||||
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
|
@ -175,10 +192,10 @@ public class DefaultBidirectionalRepositoryLayoutTest
|
|||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
|
||||
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
|
||||
|
||||
public void testGoodComFooTool()
|
||||
throws LayoutException
|
||||
{
|
||||
|
|
|
@ -64,18 +64,17 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
/*
|
||||
public void testGoodButOddVersionSpecGanymedSsh2()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "ch.ethz.ganymed";
|
||||
String artifactId = "ganymed-ssh2";
|
||||
String version = "build210";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -84,18 +83,17 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
/*
|
||||
public void testGoodButOddVersionSpecJavaxComm()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax";
|
||||
String artifactId = "comm";
|
||||
String version = "3.0-u1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "javax/jars/comm-3.0-u1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -104,23 +102,36 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
* Example of an oddball / unusual version spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
/*
|
||||
public void testGoodButOddVersionSpecJavaxPersistence()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "javax.persistence";
|
||||
String artifactId = "ejb";
|
||||
String version = "3.0-public_review";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "javax.persistence/jars/ejb-3.0-public_review.jar";
|
||||
|
||||
/*
|
||||
* The version id of "public_review" can cause problems. is it part of
|
||||
* the version spec? or the classifier?
|
||||
* /
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
*/
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
/**
|
||||
* [MRM-519] version identifiers within filename cause misidentification of version.
|
||||
* Example uses "test" in artifact Id, which is also part of the versionKeyword list.
|
||||
*/
|
||||
/*
|
||||
public void testGoodVersionKeywordInArtifactId()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "maven";
|
||||
String artifactId = "maven-test-plugin";
|
||||
String version = "1.8.2";
|
||||
String type = "jar";
|
||||
|
||||
String path = "maven/jars/maven-test-plugin-1.8.2.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -130,11 +141,10 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
String groupId = "commons-lang";
|
||||
String artifactId = "commons-lang";
|
||||
String version = "2.1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "commons-lang/jars/commons-lang-2.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodDerby()
|
||||
|
@ -143,11 +153,10 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
String groupId = "org.apache.derby";
|
||||
String artifactId = "derby";
|
||||
String version = "10.2.2.0";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "org.apache.derby/jars/derby-10.2.2.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -156,52 +165,55 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
* This tests that effect.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/* TODO: Re-enabled in the future.
|
||||
public void testGoodFooEjbClient()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo";
|
||||
String artifactId = "foo-client";
|
||||
String version = "1.0";
|
||||
String classifier = null;
|
||||
String type = "ejb"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com.foo/ejbs/foo-client-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test the classifier.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/*
|
||||
public void testGoodFooLibJavadoc()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1";
|
||||
String classifier = "javadoc";
|
||||
String version = "2.1-alpha-1-javadoc";
|
||||
String type = "javadoc.jar";
|
||||
String path = "com.foo.lib/javadoc.jars/foo-lib-2.1-alpha-1-javadoc.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test the classifier, and java-source type spec.
|
||||
* @throws LayoutException
|
||||
*/
|
||||
/*
|
||||
public void testGoodFooLibSources()
|
||||
throws LayoutException
|
||||
{
|
||||
String groupId = "com.foo.lib";
|
||||
String artifactId = "foo-lib";
|
||||
String version = "2.1-alpha-1";
|
||||
String classifier = "sources";
|
||||
String version = "2.1-alpha-1-sources";
|
||||
String type = "java-source"; // oddball type-spec (should result in jar extension)
|
||||
String path = "com.foo.lib/java-sources/foo-lib-2.1-alpha-1-sources.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
*/
|
||||
|
||||
public void testGoodFooTool()
|
||||
throws LayoutException
|
||||
|
@ -209,11 +221,10 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
String groupId = "com.foo";
|
||||
String artifactId = "foo-tool";
|
||||
String version = "1.0";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "com.foo/jars/foo-tool-1.0.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodGeronimoEjbSpec()
|
||||
|
@ -222,11 +233,10 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
String groupId = "org.apache.geronimo.specs";
|
||||
String artifactId = "geronimo-ejb_2.1_spec";
|
||||
String version = "1.0.1";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
public void testGoodLdapClientsPom()
|
||||
|
@ -235,11 +245,10 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
String groupId = "directory-clients";
|
||||
String artifactId = "ldap-clients";
|
||||
String version = "0.9.1-SNAPSHOT";
|
||||
String classifier = null;
|
||||
String type = "pom";
|
||||
String path = "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -252,21 +261,19 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
String groupId = "org.apache.archiva.test";
|
||||
String artifactId = "redonkulous";
|
||||
String version = "3.1-beta-1-20050831.101112-42";
|
||||
String classifier = null;
|
||||
String type = "jar";
|
||||
String path = "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar";
|
||||
|
||||
assertLayout( path, groupId, artifactId, version, classifier, type );
|
||||
assertLayout( path, groupId, artifactId, version, type );
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a roundtrip through the layout routines to determine success.
|
||||
*/
|
||||
private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
|
||||
String type )
|
||||
private void assertLayout( String path, String groupId, String artifactId, String version, String type )
|
||||
throws LayoutException
|
||||
{
|
||||
ArchivaArtifact expectedArtifact = createArtifact( groupId, artifactId, version, classifier, type );
|
||||
ArchivaArtifact expectedArtifact = createArtifact( groupId, artifactId, version, type );
|
||||
|
||||
// --- Artifact Tests.
|
||||
// Artifact to Path
|
||||
|
@ -274,7 +281,7 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
|
||||
// Path to Artifact.
|
||||
ArchivaArtifact testArtifact = layout.toArtifact( path );
|
||||
assertArtifact( testArtifact, groupId, artifactId, version, classifier, type );
|
||||
assertArtifact( testArtifact, groupId, artifactId, version, type );
|
||||
|
||||
// And back again, using test Artifact from previous step.
|
||||
assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( testArtifact ) );
|
||||
|
@ -283,11 +290,45 @@ public class LegacyBidirectionalRepositoryLayoutTest
|
|||
|
||||
// Path to Artifact Reference.
|
||||
ArtifactReference testReference = layout.toArtifactReference( path );
|
||||
assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
|
||||
assertArtifactReference( testReference, groupId, artifactId, version, type );
|
||||
|
||||
// And back again, using test Reference from previous step.
|
||||
assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( testReference ) );
|
||||
}
|
||||
|
||||
protected ArchivaArtifact createArtifact( String groupId, String artifactId, String version, String type )
|
||||
{
|
||||
ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, version, null, type );
|
||||
assertNotNull( artifact );
|
||||
artifact.getModel().setRepositoryId( repository.getId() );
|
||||
return artifact;
|
||||
}
|
||||
|
||||
protected void assertArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version,
|
||||
String type )
|
||||
{
|
||||
String expectedId = groupId + ":" + artifactId + ":" + version + ":" + type;
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", actualArtifact );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, actualArtifact.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, actualArtifact.getArtifactId() );
|
||||
assertEquals( expectedId + " - Version ID", version, actualArtifact.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, actualArtifact.getType() );
|
||||
}
|
||||
|
||||
protected void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
|
||||
String version, String type )
|
||||
{
|
||||
String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + type;
|
||||
|
||||
assertNotNull( expectedId + " - Should not be null.", actualReference );
|
||||
|
||||
assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
|
||||
assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
|
||||
assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
|
||||
assertEquals( expectedId + " - Type", type, actualReference.getType() );
|
||||
}
|
||||
|
||||
protected void assertBadPath( String path, String reason )
|
||||
{
|
||||
|
|
|
@ -1,236 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.layout;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* RepositoryLayoutUtilsTest
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class RepositoryLayoutUtilsTest extends TestCase
|
||||
{
|
||||
public void testSplitFilenameBasic() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1.jar", "commons-lang" ),
|
||||
"commons-lang", "2.1", null, "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameMavenTestPlugin() throws LayoutException
|
||||
{
|
||||
// Using maven 2 logic (artifactId is present in full path)
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "maven-test-plugin-1.8.2.jar", "maven-test-plugin" ),
|
||||
"maven-test-plugin", "1.8.2", null, "jar" );
|
||||
|
||||
// Using maven 1 logic (artifactId is unknown)
|
||||
// [MRM-519] fail to resolve artifactId for libs that contain versionKeyword in artifactId, like "maven-test-plugin"
|
||||
/*
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "maven-test-plugin-1.8.2.jar", null ),
|
||||
"maven-test-plugin", "1.8.2", null, "jar" );
|
||||
*/
|
||||
}
|
||||
|
||||
public void testSplitFilenameAlphaVersion() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1.jar", "commons-lang" ),
|
||||
"commons-lang", "2.0-alpha-1", null, "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameSnapshot() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "foo-2.0-SNAPSHOT.jar", "foo" ), "foo",
|
||||
"2.0-SNAPSHOT", null, "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameUniqueSnapshot() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "fletch-2.0-20060822-123456-35.tar.gz", "fletch" ),
|
||||
"fletch", "2.0-20060822-123456-35", null, "tar.gz" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameBasicClassifier() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-sources.jar", "commons-lang" ),
|
||||
"commons-lang", "2.1", "sources", "jar" );
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-javadoc.jar", "commons-lang" ),
|
||||
"commons-lang", "2.1", "javadoc", "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameAlphaClassifier() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-sources.jar",
|
||||
"commons-lang" ), "commons-lang", "2.0-alpha-1",
|
||||
"sources", "jar" );
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-javadoc.jar",
|
||||
"commons-lang" ), "commons-lang", "2.0-alpha-1",
|
||||
"javadoc", "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameSnapshotClassifier() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar",
|
||||
"commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
|
||||
"sources", "jar" );
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar",
|
||||
"commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
|
||||
"javadoc", "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameUniqueSnapshotClassifier() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar",
|
||||
"commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
|
||||
"sources", "jar" );
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar",
|
||||
"commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
|
||||
"javadoc", "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameApacheIncubator() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "cxf-common-2.0-incubator-M1.pom", null ),
|
||||
"cxf-common", "2.0-incubator-M1", null, "pom" );
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commonj-api_r1.1-1.0-incubator-M2.jar", null ),
|
||||
"commonj-api_r1.1", "1.0-incubator-M2", null, "jar" );
|
||||
}
|
||||
|
||||
public void testSplitFilenameBlankInputs()
|
||||
{
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( null, null );
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
catch ( IllegalArgumentException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( "", null );
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
catch ( IllegalArgumentException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( " ", null );
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
catch ( IllegalArgumentException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( " \t \n ", null );
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
catch ( IllegalArgumentException e )
|
||||
{
|
||||
/* expected path */
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
fail( "Should have thrown an IllegalArgumentException." );
|
||||
}
|
||||
}
|
||||
|
||||
public void testSplitFilenameBadInputs()
|
||||
{
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( "commons-lang.jar", null );
|
||||
fail( "Should have thrown a LayoutException (No Version)." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* Expected Path */
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( "geronimo-store", null );
|
||||
fail( "Should have thrown a LayoutException (No Extension)." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* Expected Path */
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( "The Sixth Sick Sheiks Sixth Sheep is Sick.", null );
|
||||
fail( "Should have thrown a LayoutException (No Extension)." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* Expected Path */
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
RepositoryLayoutUtils.splitFilename( "1.0.jar", null );
|
||||
fail( "Should have thrown a LayoutException (No Artifact ID)." );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
/* Expected Path */
|
||||
}
|
||||
}
|
||||
|
||||
public void testSplitFilenameWithProposedVersion() throws LayoutException
|
||||
{
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "jtidy-r8-21122004.jar", "jtidy", "r8-21122004" ),
|
||||
"jtidy", "r8-21122004", null, "jar" );
|
||||
|
||||
assertFilenameParts( RepositoryLayoutUtils.splitFilename( "jtidy-r8-21122004-sources.jar", "jtidy", "r8-21122004" ),
|
||||
"jtidy", "r8-21122004", "sources", "jar" );
|
||||
}
|
||||
|
||||
|
||||
private void assertFilenameParts( FilenameParts actualParts, String artifactId, String version, String classifier,
|
||||
String extension )
|
||||
{
|
||||
assertEquals( "Split - artifactId", artifactId, actualParts.artifactId );
|
||||
assertEquals( "Split - version", version, actualParts.version );
|
||||
assertEquals( "Split - classifier", classifier, actualParts.classifier );
|
||||
assertEquals( "Split - extension", extension, actualParts.extension );
|
||||
}
|
||||
}
|
|
@ -22,22 +22,21 @@ import org.apache.maven.archiva.common.utils.VersionComparator;
|
|||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
|
||||
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.model.ProjectReference;
|
||||
import org.apache.maven.archiva.model.VersionedReference;
|
||||
import org.apache.maven.archiva.policies.DownloadPolicy;
|
||||
import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
|
||||
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.MockConfiguration;
|
||||
import org.apache.maven.archiva.repository.RemoteRepositoryContent;
|
||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||
import org.custommonkey.xmlunit.DetailedDiff;
|
||||
import org.custommonkey.xmlunit.Diff;
|
||||
import org.custommonkey.xmlunit.XMLAssert;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -57,31 +56,6 @@ public class MetadataToolsTest
|
|||
|
||||
protected MockConfiguration config;
|
||||
|
||||
public void testGatherAvailableVersionsBadArtifact()
|
||||
throws Exception
|
||||
{
|
||||
assertAvailableVersions( "bad_artifact", Collections.EMPTY_LIST );
|
||||
}
|
||||
|
||||
public void testGatherAvailableVersionsMissingMultipleVersions()
|
||||
throws Exception
|
||||
{
|
||||
assertAvailableVersions( "missing_metadata_b", Arrays.asList( "1.0", "1.0.1", "2.0", "2.0.1",
|
||||
"2.0-20070821-dev" ) );
|
||||
}
|
||||
|
||||
public void testGatherAvailableVersionsSimpleYetIncomplete()
|
||||
throws Exception
|
||||
{
|
||||
assertAvailableVersions( "incomplete_metadata_a", Collections.singletonList( "1.0" ) );
|
||||
}
|
||||
|
||||
public void testGatherAvailableVersionsSimpleYetMissing()
|
||||
throws Exception
|
||||
{
|
||||
assertAvailableVersions( "missing_metadata_a", Collections.singletonList( "1.0" ) );
|
||||
}
|
||||
|
||||
public void testGatherSnapshotVersionsA()
|
||||
throws Exception
|
||||
{
|
||||
|
@ -118,12 +92,15 @@ public class MetadataToolsTest
|
|||
}
|
||||
|
||||
public void testGetRepositorySpecificName()
|
||||
throws Exception
|
||||
{
|
||||
RemoteRepositoryConfiguration repoJavaNet = createRemoteRepository( "maven2-repository.dev.java.net",
|
||||
"Java.net Repository for Maven 2",
|
||||
"http://download.java.net/maven/2/" );
|
||||
RemoteRepositoryConfiguration repoCentral = createRemoteRepository( "central", "Central Global Repository",
|
||||
"http://repo1.maven.org/maven2/" );
|
||||
RemoteRepositoryContent repoJavaNet = createRemoteRepositoryContent( "maven2-repository.dev.java.net",
|
||||
"Java.net Repository for Maven 2",
|
||||
"http://download.java.net/maven/2/",
|
||||
"default" );
|
||||
RemoteRepositoryContent repoCentral = createRemoteRepositoryContent( "central", "Central Global Repository",
|
||||
"http://repo1.maven.org/maven2/",
|
||||
"default" );
|
||||
|
||||
String convertedName = tools.getRepositorySpecificName( repoJavaNet,
|
||||
"commons-lang/commons-lang/maven-metadata.xml" );
|
||||
|
@ -135,7 +112,7 @@ public class MetadataToolsTest
|
|||
}
|
||||
|
||||
public void testUpdateProjectBadArtifact()
|
||||
throws LayoutException, SAXException, ParserConfigurationException, RepositoryMetadataException
|
||||
throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -156,7 +133,7 @@ public class MetadataToolsTest
|
|||
"1.0.1",
|
||||
"2.0",
|
||||
"2.0.1",
|
||||
"2.0-20070821-dev" } );
|
||||
"2.0-20070821-dev" }, "2.0-20070821-dev" , "2.0-20070821-dev" );
|
||||
}
|
||||
|
||||
public void testUpdateProjectMissingMultipleVersionsWithProxies()
|
||||
|
@ -168,30 +145,30 @@ public class MetadataToolsTest
|
|||
createProxyConnector( "test-repo", "central" );
|
||||
createProxyConnector( "test-repo", "java.net" );
|
||||
|
||||
assertUpdatedProjectMetadata( "proxied_multi", new String[] {
|
||||
"1.0-spec" /* in java.net */,
|
||||
"1.0" /* in managed, and central */,
|
||||
"1.0.1" /* in central */,
|
||||
"1.1" /* in managed */,
|
||||
"2.0-proposal-beta" /* in java.net */,
|
||||
"2.0-spec" /* in java.net */,
|
||||
"2.0" /* in central, and java.net */,
|
||||
"2.0.1" /* in java.net */,
|
||||
"2.1" /* in managed */,
|
||||
"3.0" /* in central */,
|
||||
assertUpdatedProjectMetadata( "proxied_multi", new String[] {
|
||||
"1.0-spec" /* in java.net */,
|
||||
"1.0" /* in managed, and central */,
|
||||
"1.0.1" /* in central */,
|
||||
"1.1" /* in managed */,
|
||||
"2.0-proposal-beta" /* in java.net */,
|
||||
"2.0-spec" /* in java.net */,
|
||||
"2.0" /* in central, and java.net */,
|
||||
"2.0.1" /* in java.net */,
|
||||
"2.1" /* in managed */,
|
||||
"3.0" /* in central */,
|
||||
"3.1" /* in central */}, "3.1", "3.1" );
|
||||
}
|
||||
|
||||
public void testUpdateProjectSimpleYetIncomplete()
|
||||
throws Exception
|
||||
{
|
||||
assertUpdatedProjectMetadata( "incomplete_metadata_a", new String[] { "1.0" } );
|
||||
assertUpdatedProjectMetadata( "incomplete_metadata_a", new String[] { "1.0" }, "1.0", "1.0" );
|
||||
}
|
||||
|
||||
public void testUpdateProjectSimpleYetMissing()
|
||||
throws Exception
|
||||
{
|
||||
assertUpdatedProjectMetadata( "missing_metadata_a", new String[] { "1.0" } );
|
||||
assertUpdatedProjectMetadata( "missing_metadata_a", new String[] { "1.0" }, "1.0", "1.0" );
|
||||
}
|
||||
|
||||
public void testUpdateVersionSimple10()
|
||||
|
@ -328,29 +305,6 @@ public class MetadataToolsTest
|
|||
assertEquals( "VersionedReference.version", version, reference.getVersion() );
|
||||
}
|
||||
|
||||
private void assertAvailableVersions( String artifactId, List<String> expectedVersions )
|
||||
throws Exception
|
||||
{
|
||||
File repoRootDir = new File( "src/test/repositories/metadata-repository" );
|
||||
|
||||
ProjectReference reference = new ProjectReference();
|
||||
reference.setGroupId( "org.apache.archiva.metadata.tests" );
|
||||
reference.setArtifactId( artifactId );
|
||||
|
||||
ManagedRepositoryConfiguration repo = createRepository( "test-repo", "Test Repository: "
|
||||
+ getName(), repoRootDir );
|
||||
|
||||
Set<String> testedVersionSet = tools.gatherAvailableVersions( repo, reference );
|
||||
|
||||
// Sort the list (for asserts)
|
||||
List<String> testedVersions = new ArrayList<String>();
|
||||
testedVersions.addAll( testedVersionSet );
|
||||
Collections.sort( testedVersions, new VersionComparator() );
|
||||
|
||||
// Test the expected array of versions, to the actual tested versions
|
||||
assertEquals( "available versions", expectedVersions, testedVersions );
|
||||
}
|
||||
|
||||
private void assertSnapshotVersions( String artifactId, String version, String[] expectedVersions )
|
||||
throws Exception
|
||||
{
|
||||
|
@ -361,10 +315,13 @@ public class MetadataToolsTest
|
|||
reference.setArtifactId( artifactId );
|
||||
reference.setVersion( version );
|
||||
|
||||
ManagedRepositoryConfiguration repo = createRepository( "test-repo", "Test Repository: "
|
||||
+ getName(), repoRootDir );
|
||||
ManagedRepositoryConfiguration repo = createRepository( "test-repo", "Test Repository: " + getName(),
|
||||
repoRootDir );
|
||||
ManagedRepositoryContent repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class,
|
||||
"default" );
|
||||
repoContent.setRepository( repo );
|
||||
|
||||
Set<String> testedVersionSet = tools.gatherSnapshotVersions( repo, reference );
|
||||
Set<String> testedVersionSet = tools.gatherSnapshotVersions( repoContent, reference );
|
||||
|
||||
// Sort the list (for asserts)
|
||||
List<String> testedVersions = new ArrayList<String>();
|
||||
|
@ -381,21 +338,26 @@ public class MetadataToolsTest
|
|||
}
|
||||
}
|
||||
|
||||
private void assertMetadata( String expectedMetadata, ManagedRepositoryConfiguration repository,
|
||||
private void assertMetadata( String expectedMetadata, ManagedRepositoryContent repository,
|
||||
ProjectReference reference )
|
||||
throws LayoutException, IOException, SAXException, ParserConfigurationException
|
||||
{
|
||||
File metadataFile = new File( repository.getLocation(), tools.toPath( reference ) );
|
||||
File metadataFile = new File( repository.getRepoRoot(), tools.toPath( reference ) );
|
||||
String actualMetadata = FileUtils.readFileToString( metadataFile, null );
|
||||
|
||||
XMLAssert.assertXMLEqual( expectedMetadata, actualMetadata );
|
||||
DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) );
|
||||
if ( !detailedDiff.similar() )
|
||||
{
|
||||
// If it isn't similar, dump the difference.
|
||||
assertEquals( expectedMetadata, actualMetadata );
|
||||
}
|
||||
}
|
||||
|
||||
private void assertMetadata( String expectedMetadata, ManagedRepositoryConfiguration repository,
|
||||
private void assertMetadata( String expectedMetadata, ManagedRepositoryContent repository,
|
||||
VersionedReference reference )
|
||||
throws LayoutException, IOException, SAXException, ParserConfigurationException
|
||||
{
|
||||
File metadataFile = new File( repository.getLocation(), tools.toPath( reference ) );
|
||||
File metadataFile = new File( repository.getRepoRoot(), tools.toPath( reference ) );
|
||||
String actualMetadata = FileUtils.readFileToString( metadataFile, null );
|
||||
|
||||
DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) );
|
||||
|
@ -412,16 +374,16 @@ public class MetadataToolsTest
|
|||
}
|
||||
|
||||
private void assertUpdatedProjectMetadata( String artifactId, String[] expectedVersions )
|
||||
throws IOException, LayoutException, RepositoryMetadataException, SAXException, ParserConfigurationException
|
||||
throws Exception
|
||||
{
|
||||
assertUpdatedProjectMetadata( artifactId, expectedVersions, null, null );
|
||||
}
|
||||
|
||||
private void assertUpdatedProjectMetadata( String artifactId, String[] expectedVersions, String latestVersion,
|
||||
String releaseVersion )
|
||||
throws IOException, LayoutException, RepositoryMetadataException, SAXException, ParserConfigurationException
|
||||
throws Exception
|
||||
{
|
||||
ManagedRepositoryConfiguration testRepo = createTestRepo();
|
||||
ManagedRepositoryContent testRepo = createTestRepoContent();
|
||||
ProjectReference reference = new ProjectReference();
|
||||
reference.setGroupId( "org.apache.archiva.metadata.tests" );
|
||||
reference.setArtifactId( artifactId );
|
||||
|
@ -462,9 +424,9 @@ public class MetadataToolsTest
|
|||
}
|
||||
|
||||
private void assertUpdatedReleaseVersionMetadata( String artifactId, String version )
|
||||
throws IOException, LayoutException, RepositoryMetadataException, SAXException, ParserConfigurationException
|
||||
throws Exception
|
||||
{
|
||||
ManagedRepositoryConfiguration testRepo = createTestRepo();
|
||||
ManagedRepositoryContent testRepo = createTestRepoContent();
|
||||
VersionedReference reference = new VersionedReference();
|
||||
reference.setGroupId( "org.apache.archiva.metadata.tests" );
|
||||
reference.setArtifactId( artifactId );
|
||||
|
@ -486,9 +448,9 @@ public class MetadataToolsTest
|
|||
|
||||
private void assertUpdatedSnapshotVersionMetadata( String artifactId, String version, String expectedDate,
|
||||
String expectedTime, String expectedBuildNumber )
|
||||
throws IOException, LayoutException, RepositoryMetadataException, SAXException, ParserConfigurationException
|
||||
throws Exception
|
||||
{
|
||||
ManagedRepositoryConfiguration testRepo = createTestRepo();
|
||||
ManagedRepositoryContent testRepo = createTestRepoContent();
|
||||
VersionedReference reference = new VersionedReference();
|
||||
reference.setGroupId( "org.apache.archiva.metadata.tests" );
|
||||
reference.setArtifactId( artifactId );
|
||||
|
@ -541,8 +503,8 @@ public class MetadataToolsTest
|
|||
config.triggerChange( prefix + ".policies.cache-failures", connectorConfig.getPolicy( "cache-failures", "" ) );
|
||||
}
|
||||
|
||||
private ManagedRepositoryConfiguration createTestRepo()
|
||||
throws IOException
|
||||
private ManagedRepositoryContent createTestRepoContent()
|
||||
throws Exception
|
||||
{
|
||||
File repoRoot = new File( "target/metadata-tests/" + getName() );
|
||||
if ( repoRoot.exists() )
|
||||
|
@ -552,10 +514,16 @@ public class MetadataToolsTest
|
|||
|
||||
repoRoot.mkdirs();
|
||||
|
||||
return createRepository( "test-repo", "Test Repository: " + getName(), repoRoot );
|
||||
ManagedRepositoryConfiguration repoConfig = createRepository( "test-repo", "Test Repository: " + getName(),
|
||||
repoRoot );
|
||||
|
||||
ManagedRepositoryContent repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class,
|
||||
"default" );
|
||||
repoContent.setRepository( repoConfig );
|
||||
return repoContent;
|
||||
}
|
||||
|
||||
private void prepTestRepo( ManagedRepositoryConfiguration repo, ProjectReference reference )
|
||||
private void prepTestRepo( ManagedRepositoryContent repo, ProjectReference reference )
|
||||
throws IOException
|
||||
{
|
||||
String groupDir = StringUtils.replaceChars( reference.getGroupId(), '.', '/' );
|
||||
|
@ -563,7 +531,7 @@ public class MetadataToolsTest
|
|||
|
||||
File srcRepoDir = new File( "src/test/repositories/metadata-repository" );
|
||||
File srcDir = new File( srcRepoDir, path );
|
||||
File destDir = new File( repo.getLocation(), path );
|
||||
File destDir = new File( repo.getRepoRoot(), path );
|
||||
|
||||
assertTrue( "Source Dir exists: " + srcDir, srcDir.exists() );
|
||||
destDir.mkdirs();
|
||||
|
@ -571,7 +539,7 @@ public class MetadataToolsTest
|
|||
FileUtils.copyDirectory( srcDir, destDir );
|
||||
}
|
||||
|
||||
private void prepTestRepo( ManagedRepositoryConfiguration repo, VersionedReference reference )
|
||||
private void prepTestRepo( ManagedRepositoryContent repo, VersionedReference reference )
|
||||
throws IOException
|
||||
{
|
||||
ProjectReference projectRef = new ProjectReference();
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.project;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
{
|
||||
|
||||
public static Test suite()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.project" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTest( org.apache.maven.archiva.repository.project.filters.AllTests.suite() );
|
||||
suite.addTest( org.apache.maven.archiva.repository.project.readers.AllTests.suite() );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.project.readers;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
{
|
||||
|
||||
public static Test suite()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.project.readers" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite( ProjectModel400ReaderTest.class );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
|
||||
}
|
|
@ -30,7 +30,7 @@ import java.io.File;
|
|||
/**
|
||||
* ProjectModel300ReaderTest
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ProjectModel300ReaderTest
|
||||
|
|
|
@ -36,7 +36,7 @@ import java.io.StringWriter;
|
|||
/**
|
||||
* ProjectModel400WriterTest
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ProjectModel400WriterTest
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
package org.apache.maven.archiva.repository.scanner;
|
||||
|
||||
/*
|
||||
* 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 junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* AllTests - Useful for developers using IDEs.
|
||||
*
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AllTests
|
||||
{
|
||||
public static Test suite()
|
||||
{
|
||||
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.scanner" );
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite( RepositoryScannerTest.class );
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project>
|
||||
<extend>../../project.xml</extend>
|
||||
<pomVersion>3</pomVersion>
|
||||
<groupId>maven</groupId>
|
||||
<id>wagon-ssh</id>
|
||||
<artifactId>wagon-ssh</artifactId>
|
||||
<name>Wagon SSH provider</name>
|
||||
<currentVersion>1.0-SNAPSHOT</currentVersion>
|
||||
<description></description>
|
||||
<shortDescription>Wagon Provider for protocols from SSH2 family based on JSCH</shortDescription>
|
||||
<package>org.apache.maven.wagon.providers.ssh</package>
|
||||
<inceptionYear>2003</inceptionYear>
|
||||
<url>http://maven.apache.org/wagon/wagon-providers/ssh</url>
|
||||
<issueTrackingUrl>http://jira.codehaus.org/BrowseProject.jspa?id=10319</issueTrackingUrl>
|
||||
<siteDirectory>/www/maven.apache.org/wagon/wagon-providers/ssh</siteDirectory>
|
||||
<repository>
|
||||
<connection>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:maven-wagon/wagon-providers/ssh</connection>
|
||||
<url>http://cvs.apache.org/viewcvs/maven-wagon/wagon-providers/ssh/</url>
|
||||
</repository>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Michal Maczka</name>
|
||||
<id>michal</id>
|
||||
<email>michal.maczka@dimatics.com</email>
|
||||
<organization>Dimatics</organization>
|
||||
<roles>
|
||||
<role>Creator</role>
|
||||
<role>Developer</role>
|
||||
<role>Release Manager</role>
|
||||
</roles>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>maven</groupId>
|
||||
<artifactId>wagon-api</artifactId>
|
||||
<version>0.9-SNAPSHOT</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jsch</groupId>
|
||||
<artifactId>jsch</artifactId>
|
||||
<version>0.1.14</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,47 @@
|
|||
<?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>
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.codehaus.plexus.registry.Registry</role>
|
||||
<role-hint>configured</role-hint>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.codehaus.plexus.registry.Registry</role>
|
||||
<role-hint>configured</role-hint>
|
||||
<implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
|
||||
<configuration>
|
||||
<properties>
|
||||
<system/>
|
||||
<xml fileName="${basedir}/src/test/resources/scanner-archiva.xml"
|
||||
config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
|
||||
</properties>
|
||||
</configuration>
|
||||
</component>
|
||||
</components>
|
||||
|
||||
</component-set>
|
|
@ -30,10 +30,6 @@
|
|||
<implementation>org.apache.maven.archiva.repository.metadata.MetadataTools</implementation>
|
||||
<description>MetadataTools</description>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.FileTypes</role>
|
||||
<field-name>filetypes</field-name>
|
||||
|
|
|
@ -41,7 +41,7 @@ import java.util.Map;
|
|||
/**
|
||||
* AbstractProxyConnectorAction
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractProxyConnectorAction
|
||||
|
|
|
@ -36,7 +36,7 @@ import java.util.Map;
|
|||
* AbstractProxyConnectorFormAction - generic fields and methods for either add or edit actions related with the
|
||||
* Proxy Connector.
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractProxyConnectorFormAction
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
|
|||
/**
|
||||
* AddProxyConnectorAction
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="addProxyConnectorAction"
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
|
|||
/**
|
||||
* DeleteProxyConnectorAction
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="deleteProxyConnectorAction"
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
|
|||
/**
|
||||
* EditProxyConnectorAction
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="editProxyConnectorAction"
|
||||
|
|
|
@ -27,7 +27,7 @@ import java.util.List;
|
|||
/**
|
||||
* SortProxyConnectorsAction -
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="sortProxyConnectorsAction"
|
||||
|
|
|
@ -33,7 +33,7 @@ import java.io.IOException;
|
|||
*
|
||||
* Place for all generic methods used in Managed Repository Administration.
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractManagedRepositoriesAction
|
||||
|
|
|
@ -28,7 +28,7 @@ import java.io.IOException;
|
|||
/**
|
||||
* AbstractRemoteRepositoriesAction
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class AbstractRemoteRepositoriesAction
|
||||
|
|
|
@ -39,7 +39,7 @@ import java.io.IOException;
|
|||
* Base class for all repository administrative functions.
|
||||
* This should be neutral to the type of action (add/edit/delete) and type of repo (managed/remote)
|
||||
*
|
||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractRepositoriesAdminAction
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue