mirror of https://github.com/apache/archiva.git
[MRM-463] Metadata merging doesn't work.
Bug fixes to MetadataTool. New Proxying features. Proxying Unit Testing Updates. git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@571008 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c522cae2b4
commit
3b5e25770c
|
@ -71,6 +71,11 @@
|
|||
<artifactId>plexus-registry-commons</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xmlunit</groupId>
|
||||
<artifactId>xmlunit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>easymock</groupId>
|
||||
<artifactId>easymock</artifactId>
|
||||
|
@ -100,7 +105,6 @@
|
|||
<exclude>**/*TestCase.java</exclude>
|
||||
<exclude>**/*Tests.java</exclude>
|
||||
<exclude>**/*TestSuite.java</exclude>
|
||||
<exclude>**/MetadataTransfer*</exclude>
|
||||
<exclude>**/RelocateTransfer*</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
|
|
|
@ -35,6 +35,8 @@ 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.layout.LayoutException;
|
||||
import org.apache.maven.archiva.repository.metadata.MetadataTools;
|
||||
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
|
||||
import org.apache.maven.wagon.ConnectionException;
|
||||
import org.apache.maven.wagon.ResourceDoesNotExistException;
|
||||
import org.apache.maven.wagon.Wagon;
|
||||
|
@ -88,6 +90,11 @@ public class DefaultRepositoryProxyConnectors
|
|||
*/
|
||||
private BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private MetadataTools metadataTools;
|
||||
|
||||
/**
|
||||
* @plexus.requirement role="org.apache.maven.archiva.policies.PreDownloadPolicy"
|
||||
*/
|
||||
|
@ -107,26 +114,21 @@ public class DefaultRepositoryProxyConnectors
|
|||
|
||||
private Map networkProxyMap = new HashMap();
|
||||
|
||||
/**
|
||||
* Fetch an artifact from a remote repository.
|
||||
*
|
||||
* @param repository the managed repository to utilize for the request.
|
||||
* @param artifact the artifact reference to fetch.
|
||||
* @return the local file in the managed repository that was fetched, or null if the artifact was not (or
|
||||
* could not be) fetched.
|
||||
* @throws ProxyException if there was a problem fetching the artifact.
|
||||
*/
|
||||
public File fetchFromProxies( ArchivaRepository repository, ArtifactReference artifact )
|
||||
throws ProxyException
|
||||
{
|
||||
if ( !repository.isManaged() )
|
||||
{
|
||||
throw new ProxyException( "Can only proxy managed repositories." );
|
||||
}
|
||||
assertProxyCapable( repository );
|
||||
|
||||
File localFile;
|
||||
try
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = layoutFactory.getLayout( repository.getLayoutType() );
|
||||
String sourcePath = sourceLayout.toPath( artifact );
|
||||
localFile = new File( repository.getUrl().getPath(), sourcePath );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw new ProxyException( "Unable to proxy due to bad source repository layout definition: "
|
||||
+ e.getMessage(), e );
|
||||
}
|
||||
File localFile = toLocalFile( repository, artifact );
|
||||
|
||||
Properties requestProperties = new Properties();
|
||||
requestProperties.setProperty( "version", artifact.getVersion() );
|
||||
|
@ -136,58 +138,35 @@ public class DefaultRepositoryProxyConnectors
|
|||
while ( it.hasNext() )
|
||||
{
|
||||
ProxyConnector connector = (ProxyConnector) it.next();
|
||||
getLogger().debug( "Attempting connector: " + connector );
|
||||
ArchivaRepository targetRepository = connector.getTargetRepository();
|
||||
try
|
||||
String targetPath = getLayout( targetRepository ).toPath( artifact );
|
||||
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile, requestProperties );
|
||||
|
||||
if ( fileExists( downloadedFile ) )
|
||||
{
|
||||
BidirectionalRepositoryLayout targetLayout = layoutFactory.getLayout( targetRepository.getLayoutType() );
|
||||
String targetPath = targetLayout.toPath( artifact );
|
||||
|
||||
getLogger().debug(
|
||||
"Using target repository: " + targetRepository.getId() + " - layout: "
|
||||
+ targetRepository.getLayoutType() + " - targetPath: " + targetPath );
|
||||
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile,
|
||||
requestProperties );
|
||||
|
||||
if ( fileExists( downloadedFile ) )
|
||||
{
|
||||
getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
|
||||
return downloadedFile;
|
||||
}
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
getLogger().error( "Unable to proxy due to bad layout definition: " + e.getMessage(), e );
|
||||
return null;
|
||||
getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
|
||||
return downloadedFile;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch, from the proxies, a metadata.xml file for the groupId:artifactId:version metadata contents.
|
||||
*
|
||||
* @return the (local) metadata file that was fetched/merged/updated, or null if no metadata file exists.
|
||||
*/
|
||||
public File fetchFromProxies( ArchivaRepository repository, VersionedReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
if ( !repository.isManaged() )
|
||||
{
|
||||
throw new ProxyException( "Can only proxy managed repositories." );
|
||||
}
|
||||
assertProxyCapable( repository );
|
||||
|
||||
File localFile;
|
||||
try
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = layoutFactory.getLayout( repository.getLayoutType() );
|
||||
String sourcePath = sourceLayout.toPath( metadata );
|
||||
localFile = new File( repository.getUrl().getPath(), sourcePath );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw new ProxyException( "Unable to proxy due to bad source repository layout definition: "
|
||||
+ e.getMessage(), e );
|
||||
}
|
||||
File localFile = toLocalFile( repository, metadata );
|
||||
|
||||
Properties requestProperties = new Properties();
|
||||
boolean hasFetched = false;
|
||||
|
||||
List connectors = getProxyConnectors( repository );
|
||||
Iterator it = connectors.iterator();
|
||||
|
@ -195,83 +174,201 @@ public class DefaultRepositoryProxyConnectors
|
|||
{
|
||||
ProxyConnector connector = (ProxyConnector) it.next();
|
||||
ArchivaRepository targetRepository = connector.getTargetRepository();
|
||||
String targetPath = getLayout( targetRepository ).toPath( metadata );
|
||||
|
||||
File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath );
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localRepoFile, requestProperties );
|
||||
|
||||
if ( fileExists( downloadedFile ) )
|
||||
{
|
||||
getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
|
||||
hasFetched = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( hasFetched || fileExists( localFile ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
BidirectionalRepositoryLayout targetLayout = layoutFactory.getLayout( targetRepository.getLayoutType() );
|
||||
String targetPath = targetLayout.toPath( metadata );
|
||||
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile,
|
||||
requestProperties );
|
||||
|
||||
if ( fileExists( downloadedFile ) )
|
||||
{
|
||||
getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
|
||||
return downloadedFile;
|
||||
}
|
||||
metadataTools.updateMetadata( repository, metadata );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
getLogger().error( "Unable to proxy due to bad layout definition: " + e.getMessage(), e );
|
||||
return null;
|
||||
getLogger().warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage() );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
getLogger()
|
||||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
getLogger()
|
||||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
}
|
||||
|
||||
if ( fileExists( localFile ) )
|
||||
{
|
||||
return localFile;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch from the proxies a metadata.xml file for the groupId:artifactId metadata contents.
|
||||
*
|
||||
* @return the (local) metadata file that was fetched/merged/updated, or null if no metadata file exists.
|
||||
*/
|
||||
public File fetchFromProxies( ArchivaRepository repository, ProjectReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
assertProxyCapable( repository );
|
||||
|
||||
File localFile = toLocalFile( repository, metadata );
|
||||
|
||||
Properties requestProperties = new Properties();
|
||||
boolean hasFetched = false;
|
||||
|
||||
List connectors = getProxyConnectors( repository );
|
||||
Iterator it = connectors.iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
ProxyConnector connector = (ProxyConnector) it.next();
|
||||
ArchivaRepository targetRepository = connector.getTargetRepository();
|
||||
String targetPath = getLayout( targetRepository ).toPath( metadata );
|
||||
|
||||
File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath );
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localRepoFile, requestProperties );
|
||||
|
||||
if ( fileExists( downloadedFile ) )
|
||||
{
|
||||
getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
|
||||
hasFetched = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( hasFetched || fileExists( localFile ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
metadataTools.updateMetadata( repository, metadata );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
getLogger().warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage() );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
getLogger()
|
||||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
getLogger()
|
||||
.warn( "Unable to update metadata " + localFile.getAbsolutePath() + ": " + e.getMessage(), e );
|
||||
// TODO: add into repository report?
|
||||
}
|
||||
}
|
||||
|
||||
if ( fileExists( localFile ) )
|
||||
{
|
||||
return localFile;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private File toLocalRepoFile( ArchivaRepository repository, ArchivaRepository targetRepository, String targetPath )
|
||||
{
|
||||
String repoPath = metadataTools.getRepositorySpecificName( targetRepository, targetPath );
|
||||
return new File( repository.getUrl().getPath(), repoPath );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the provided ArchivaRepository has any proxies configured for it.
|
||||
*/
|
||||
public boolean hasProxies( ArchivaRepository repository )
|
||||
{
|
||||
synchronized ( this.proxyConnectorMap )
|
||||
{
|
||||
return this.proxyConnectorMap.containsKey( repository.getId() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the repository to see if it is proxy capable.
|
||||
*
|
||||
* @param repository the repository to test.
|
||||
* @throws ProxyException if the repository is not proxy capable.
|
||||
*/
|
||||
private void assertProxyCapable( ArchivaRepository repository )
|
||||
throws ProxyException
|
||||
{
|
||||
if ( !repository.isManaged() )
|
||||
{
|
||||
throw new ProxyException( "Can only proxy managed repositories." );
|
||||
}
|
||||
}
|
||||
|
||||
File localFile;
|
||||
private File toLocalFile( ArchivaRepository repository, ArtifactReference artifact )
|
||||
throws ProxyException
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = getLayout( repository );
|
||||
String sourcePath = sourceLayout.toPath( artifact );
|
||||
return new File( repository.getUrl().getPath(), sourcePath );
|
||||
}
|
||||
|
||||
private File toLocalFile( ArchivaRepository repository, ProjectReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = getLayout( repository );
|
||||
String sourcePath = sourceLayout.toPath( metadata );
|
||||
return new File( repository.getUrl().getPath(), sourcePath );
|
||||
}
|
||||
|
||||
private File toLocalFile( ArchivaRepository repository, VersionedReference metadata )
|
||||
throws ProxyException
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = getLayout( repository );
|
||||
String sourcePath = sourceLayout.toPath( metadata );
|
||||
return new File( repository.getUrl().getPath(), 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( ArchivaRepository repository )
|
||||
throws ProxyException
|
||||
{
|
||||
try
|
||||
{
|
||||
BidirectionalRepositoryLayout sourceLayout = layoutFactory.getLayout( repository.getLayoutType() );
|
||||
String sourcePath = sourceLayout.toPath( metadata );
|
||||
localFile = new File( repository.getUrl().getPath(), sourcePath );
|
||||
return layoutFactory.getLayout( repository.getLayoutType() );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
throw new ProxyException( "Unable to proxy due to bad source repository layout definition: "
|
||||
+ e.getMessage(), e );
|
||||
throw new ProxyException( "Unable to proxy due to bad repository layout definition [" + repository.getId()
|
||||
+ "] had a layout defined as [" + repository.getLayoutType() + "] : " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
Properties requestProperties = new Properties();
|
||||
|
||||
List connectors = getProxyConnectors( repository );
|
||||
Iterator it = connectors.iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
ProxyConnector connector = (ProxyConnector) it.next();
|
||||
ArchivaRepository targetRepository = connector.getTargetRepository();
|
||||
try
|
||||
{
|
||||
BidirectionalRepositoryLayout targetLayout = layoutFactory.getLayout( targetRepository.getLayoutType() );
|
||||
String targetPath = targetLayout.toPath( metadata );
|
||||
|
||||
File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile,
|
||||
requestProperties );
|
||||
|
||||
if ( fileExists( downloadedFile ) )
|
||||
{
|
||||
getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
|
||||
return downloadedFile;
|
||||
}
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
getLogger().error( "Unable to proxy due to bad layout definition: " + e.getMessage(), e );
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple method to test if the file exists on the local disk.
|
||||
*
|
||||
* @param file the file to test. (may be null)
|
||||
* @return true if file exists. false if the file param is null, doesn't exist, or is not of type File.
|
||||
*/
|
||||
private boolean fileExists( File file )
|
||||
{
|
||||
if ( file == null )
|
||||
|
@ -295,23 +392,41 @@ public class DefaultRepositoryProxyConnectors
|
|||
/**
|
||||
* Perform the transfer of the file.
|
||||
*
|
||||
* @param connector
|
||||
* @param targetRepository
|
||||
* @param targetPath
|
||||
* @param localFile
|
||||
* @param requestProperties
|
||||
* @return
|
||||
* @throws ProxyException
|
||||
* @param connector the connector configuration to use.
|
||||
* @param remoteRepository the remote repository get the resource from.
|
||||
* @param remotePath the path in the remote repository to the resource to get.
|
||||
* @param localFile the local file to place the downloaded resource into
|
||||
* @param requestProperties the request properties to utilize for policy handling.
|
||||
* @return the local file that was downloaded, or null if not downloaded.
|
||||
* @throws ProxyException if transfer was unsuccessful.
|
||||
*/
|
||||
private File transferFile( ProxyConnector connector, ArchivaRepository targetRepository, String targetPath,
|
||||
private File transferFile( ProxyConnector connector, ArchivaRepository remoteRepository, String remotePath,
|
||||
File localFile, Properties requestProperties )
|
||||
throws ProxyException
|
||||
{
|
||||
String url = targetRepository.getUrl().toString() + targetPath;
|
||||
String url = remoteRepository.getUrl().toString() + remotePath;
|
||||
requestProperties.setProperty( "url", url );
|
||||
|
||||
// Is a whitelist defined?
|
||||
if ( !isEmpty( connector.getWhitelist() ) )
|
||||
{
|
||||
// Path must belong to whitelist.
|
||||
if ( !matchesPattern( remotePath, connector.getWhitelist() ) )
|
||||
{
|
||||
getLogger().debug( "Path [" + remotePath + "] is not part of defined whitelist (skipping transfer)." );
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Is target path part of blacklist?
|
||||
if ( matchesPattern( remotePath, connector.getBlacklist() ) )
|
||||
{
|
||||
getLogger().debug( "Path [" + remotePath + "] is part of blacklist (skipping transfer)." );
|
||||
return null;
|
||||
}
|
||||
|
||||
// Handle pre-download policy
|
||||
if ( !applyPolicies( connector.getPolicies(), this.preDownloadPolicies, requestProperties, localFile ) )
|
||||
if ( !applyPolicies( this.preDownloadPolicies, connector.getPolicies(), requestProperties, localFile ) )
|
||||
{
|
||||
getLogger().info( "Failed pre-download policies - " + localFile.getAbsolutePath() );
|
||||
|
||||
|
@ -323,41 +438,23 @@ public class DefaultRepositoryProxyConnectors
|
|||
return null;
|
||||
}
|
||||
|
||||
// Is a whitelist defined?
|
||||
if ( !isEmpty( connector.getWhitelist() ) )
|
||||
{
|
||||
// Path must belong to whitelist.
|
||||
if ( !matchesPattern( targetPath, connector.getWhitelist() ) )
|
||||
{
|
||||
getLogger().debug( "Path [" + targetPath + "] is not part of defined whitelist (skipping transfer)." );
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Is target path part of blacklist?
|
||||
if ( matchesPattern( targetPath, connector.getBlacklist() ) )
|
||||
{
|
||||
getLogger().debug( "Path [" + targetPath + "] is part of blacklist (skipping transfer)." );
|
||||
return null;
|
||||
}
|
||||
|
||||
Wagon wagon = null;
|
||||
try
|
||||
{
|
||||
String protocol = targetRepository.getUrl().getProtocol();
|
||||
String protocol = remoteRepository.getUrl().getProtocol();
|
||||
wagon = (Wagon) wagons.get( protocol );
|
||||
if ( wagon == null )
|
||||
{
|
||||
throw new ProxyException( "Unsupported target repository protocol: " + protocol );
|
||||
}
|
||||
|
||||
boolean connected = connectToRepository( connector, wagon, targetRepository );
|
||||
boolean connected = connectToRepository( connector, wagon, remoteRepository );
|
||||
if ( connected )
|
||||
{
|
||||
localFile = transferSimpleFile( wagon, targetRepository, targetPath, localFile );
|
||||
localFile = transferSimpleFile( wagon, remoteRepository, remotePath, localFile );
|
||||
|
||||
transferChecksum( wagon, targetRepository, targetPath, localFile, ".sha1" );
|
||||
transferChecksum( wagon, targetRepository, targetPath, localFile, ".md5" );
|
||||
transferChecksum( wagon, remoteRepository, remotePath, localFile, ".sha1" );
|
||||
transferChecksum( wagon, remoteRepository, remotePath, localFile, ".md5" );
|
||||
}
|
||||
}
|
||||
catch ( ResourceDoesNotExistException e )
|
||||
|
@ -386,7 +483,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
|
||||
// Handle post-download policies.
|
||||
if ( !applyPolicies( connector.getPolicies(), this.postDownloadPolicies, requestProperties, localFile ) )
|
||||
if ( !applyPolicies( this.postDownloadPolicies, connector.getPolicies(), requestProperties, localFile ) )
|
||||
{
|
||||
getLogger().info( "Failed post-download policies - " + localFile.getAbsolutePath() );
|
||||
|
||||
|
@ -402,11 +499,23 @@ public class DefaultRepositoryProxyConnectors
|
|||
return localFile;
|
||||
}
|
||||
|
||||
private void transferChecksum( Wagon wagon, ArchivaRepository targetRepository, String targetPath, File localFile,
|
||||
/**
|
||||
* Quietly transfer the checksum file from the remote repository to the local file.
|
||||
*
|
||||
* NOTE: This will not throw a WagonException if the checksum is unable to be downloaded.
|
||||
*
|
||||
* @param wagon the wagon instance (should already be connected) to use.
|
||||
* @param remoteRepository the remote repository to transfer from.
|
||||
* @param remotePath the remote path to the resource to get.
|
||||
* @param localFile the local file that should contain the downloaded contents
|
||||
* @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, ArchivaRepository remoteRepository, String remotePath, File localFile,
|
||||
String type )
|
||||
throws ProxyException
|
||||
{
|
||||
String url = targetRepository.getUrl().toString() + targetPath;
|
||||
String url = remoteRepository.getUrl().toString() + remotePath;
|
||||
|
||||
// Transfer checksum does not use the policy.
|
||||
if ( urlFailureCache.hasFailedBefore( url + type ) )
|
||||
|
@ -417,7 +526,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
try
|
||||
{
|
||||
File hashFile = new File( localFile.getAbsolutePath() + type );
|
||||
transferSimpleFile( wagon, targetRepository, targetPath + type, hashFile );
|
||||
transferSimpleFile( wagon, remoteRepository, remotePath + type, hashFile );
|
||||
getLogger().debug( "Checksum" + type + " Downloaded: " + hashFile );
|
||||
}
|
||||
catch ( ResourceDoesNotExistException e )
|
||||
|
@ -431,9 +540,22 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
}
|
||||
|
||||
private File transferSimpleFile( Wagon wagon, ArchivaRepository targetRepository, String targetPath, File localFile )
|
||||
/**
|
||||
* Perform the transfer of the remote file to the local file specified.
|
||||
*
|
||||
* @param wagon the wagon instance to use.
|
||||
* @param remoteRepository the remote repository to use
|
||||
* @param remotePath the remote path to attempt to get
|
||||
* @param localFile the local file to save to
|
||||
* @return The local file that was transfered.
|
||||
* @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, ArchivaRepository remoteRepository, String remotePath, File localFile )
|
||||
throws ProxyException, WagonException
|
||||
{
|
||||
assert ( remotePath != null );
|
||||
|
||||
// Transfer the file.
|
||||
File temp = null;
|
||||
|
||||
|
@ -445,8 +567,8 @@ public class DefaultRepositoryProxyConnectors
|
|||
|
||||
if ( localFile.exists() )
|
||||
{
|
||||
getLogger().debug( "Retrieving " + targetPath + " from " + targetRepository.getName() );
|
||||
wagon.get( targetPath, temp );
|
||||
getLogger().debug( "Retrieving " + remotePath + " from " + remoteRepository.getName() );
|
||||
wagon.get( remotePath, temp );
|
||||
success = true;
|
||||
|
||||
if ( temp.exists() )
|
||||
|
@ -459,13 +581,13 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
else
|
||||
{
|
||||
getLogger().debug( "Retrieving " + targetPath + " from " + targetRepository.getName() + " if updated" );
|
||||
success = wagon.getIfNewer( targetPath, temp, localFile.lastModified() );
|
||||
getLogger().debug( "Retrieving " + remotePath + " from " + remoteRepository.getName() + " if updated" );
|
||||
success = wagon.getIfNewer( remotePath, temp, localFile.lastModified() );
|
||||
if ( !success )
|
||||
{
|
||||
getLogger().debug(
|
||||
"Not downloaded, as local file is newer than remote side: "
|
||||
+ localFile.getAbsolutePath() );
|
||||
getLogger().info(
|
||||
"Not downloaded, as local file is newer than remote side: "
|
||||
+ localFile.getAbsolutePath() );
|
||||
}
|
||||
else if ( temp.exists() )
|
||||
{
|
||||
|
@ -495,21 +617,30 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
}
|
||||
|
||||
private boolean applyPolicies( Map policySettings, Map downloadPolicies, Properties request, File localFile )
|
||||
/**
|
||||
* Apply the policies.
|
||||
* @param policies the map of policies to execute. (Map of String policy keys, to {@link DownloadPolicy} objects)
|
||||
* @param settings the map of settings for the policies to execute. (Map of String policy keys, to String policy setting)
|
||||
* @param request the request properties (utilized by the {@link DownloadPolicy#applyPolicy(String, Properties, File)})
|
||||
* @param localFile the local file (utilized by the {@link DownloadPolicy#applyPolicy(String, Properties, File)})
|
||||
*
|
||||
* @return true if all of the policies passed, false if a policy failed.
|
||||
*/
|
||||
private boolean applyPolicies( Map policies, Map settings, Properties request, File localFile )
|
||||
{
|
||||
Iterator it = downloadPolicies.entrySet().iterator();
|
||||
Iterator it = policies.entrySet().iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
Map.Entry entry = (Entry) it.next();
|
||||
String key = (String) entry.getKey();
|
||||
DownloadPolicy policy = (DownloadPolicy) entry.getValue();
|
||||
String defaultSetting = policy.getDefaultOption();
|
||||
String setting = StringUtils.defaultString( (String) policySettings.get( key ), defaultSetting );
|
||||
String setting = StringUtils.defaultString( (String) settings.get( key ), defaultSetting );
|
||||
|
||||
getLogger().debug( "Applying [" + key + "] policy with [" + setting + "]" );
|
||||
if ( !policy.applyPolicy( setting, request, localFile ) )
|
||||
{
|
||||
getLogger().debug( "Didn't pass the [" + key + "] policy." );
|
||||
getLogger().info( "Didn't pass the [" + key + "] policy." );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -551,7 +682,15 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
}
|
||||
|
||||
private boolean connectToRepository( ProxyConnector connector, Wagon wagon, ArchivaRepository targetRepository )
|
||||
/**
|
||||
* Using wagon, connect to the remote repository.
|
||||
*
|
||||
* @param connector the connector configuration to utilize (for obtaining network proxy configuration from)
|
||||
* @param wagon the wagon instance to establish the connection on.
|
||||
* @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, ArchivaRepository remoteRepository )
|
||||
{
|
||||
boolean connected = false;
|
||||
|
||||
|
@ -563,7 +702,7 @@ public class DefaultRepositoryProxyConnectors
|
|||
|
||||
try
|
||||
{
|
||||
Repository wagonRepository = new Repository( targetRepository.getId(), targetRepository.getUrl().toString() );
|
||||
Repository wagonRepository = new Repository( remoteRepository.getId(), remoteRepository.getUrl().toString() );
|
||||
if ( networkProxy != null )
|
||||
{
|
||||
wagon.connect( wagonRepository, networkProxy );
|
||||
|
@ -576,16 +715,25 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
catch ( ConnectionException e )
|
||||
{
|
||||
getLogger().info( "Could not connect to " + targetRepository.getName() + ": " + e.getMessage() );
|
||||
getLogger().info( "Could not connect to " + remoteRepository.getName() + ": " + e.getMessage() );
|
||||
connected = false;
|
||||
}
|
||||
catch ( AuthenticationException e )
|
||||
{
|
||||
getLogger().info( "Could not connect to " + targetRepository.getName() + ": " + e.getMessage() );
|
||||
getLogger().info( "Could not connect to " + remoteRepository.getName() + ": " + e.getMessage() );
|
||||
connected = false;
|
||||
}
|
||||
|
||||
return connected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whitelist and blacklist patterns against path.
|
||||
*
|
||||
* @param path the path to test.
|
||||
* @param patterns the list of patterns to check.
|
||||
* @return true if the path matches at least 1 pattern in the provided patterns list.
|
||||
*/
|
||||
private boolean matchesPattern( String path, List patterns )
|
||||
{
|
||||
if ( isEmpty( patterns ) )
|
||||
|
@ -606,6 +754,9 @@ public class DefaultRepositoryProxyConnectors
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Ensure that list is correctly ordered based on configuration. See MRM-477
|
||||
*/
|
||||
public List getProxyConnectors( ArchivaRepository repository )
|
||||
{
|
||||
synchronized ( this.proxyConnectorMap )
|
||||
|
@ -619,14 +770,6 @@ public class DefaultRepositoryProxyConnectors
|
|||
}
|
||||
}
|
||||
|
||||
public boolean hasProxies( ArchivaRepository repository )
|
||||
{
|
||||
synchronized ( this.proxyConnectorMap )
|
||||
{
|
||||
return this.proxyConnectorMap.containsKey( repository.getId() );
|
||||
}
|
||||
}
|
||||
|
||||
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||
{
|
||||
if ( ConfigurationNames.isNetworkProxy( propertyName ) || ConfigurationNames.isRepositories( propertyName )
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.apache.maven.archiva.model.ArchivaArtifact;
|
|||
import org.apache.maven.archiva.model.ArchivaRepository;
|
||||
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.policies.urlcache.UrlFailureCache;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||
|
@ -82,7 +83,7 @@ public class AbstractProxyTestCase
|
|||
|
||||
protected static final String REPOPATH_DEFAULT_MANAGED = "src/test/repositories/managed";
|
||||
|
||||
protected static final String REPOPATH_DEFAULT_MANAGED_TARGET = "target/test-repository/managed";
|
||||
// protected static final String REPOPATH_DEFAULT_MANAGED_TARGET = "target/test-repository/managed";
|
||||
|
||||
protected static final String REPOPATH_LEGACY_MANAGED = "src/test/repositories/legacy-managed";
|
||||
|
||||
|
@ -255,7 +256,7 @@ public class AbstractProxyTestCase
|
|||
"Test Managed (Legacy) Repository", "legacy" );
|
||||
}
|
||||
|
||||
protected ProjectReference createMetadataReference( String layoutType, String path )
|
||||
protected ProjectReference createProjectReference( String layoutType, String path )
|
||||
throws Exception
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( layoutType );
|
||||
|
@ -263,6 +264,14 @@ public class AbstractProxyTestCase
|
|||
return metadata;
|
||||
}
|
||||
|
||||
protected VersionedReference createVersionedReference( String layoutType, String path )
|
||||
throws Exception
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( layoutType );
|
||||
VersionedReference metadata = layout.toVersionedReference( path );
|
||||
return metadata;
|
||||
}
|
||||
|
||||
protected ArchivaRepository createProxiedLegacyRepository()
|
||||
{
|
||||
return createRepository( "src/test/repositories/legacy-proxied", "testProxiedLegacyRepo",
|
||||
|
@ -402,13 +411,11 @@ public class AbstractProxyTestCase
|
|||
RepositoryConfiguration repoConfig;
|
||||
|
||||
// Setup source repository (using default layout)
|
||||
File repoLocation = getTestFile( REPOPATH_DEFAULT_MANAGED_TARGET );
|
||||
// faster only to delete this one before copying, the others are done case by case
|
||||
FileUtils.deleteDirectory( new File( repoLocation, "org/apache/maven/test/get-merged-metadata" ) );
|
||||
copyDirectoryStructure( getTestFile( REPOPATH_DEFAULT_MANAGED ), repoLocation );
|
||||
String repoPath = "target/test-repository/managed/" + getName();
|
||||
File repoLocation = getTestFile( repoPath );
|
||||
|
||||
managedDefaultRepository = createRepository( ID_DEFAULT_MANAGED, "Default Managed Repository",
|
||||
REPOPATH_DEFAULT_MANAGED_TARGET, "default" );
|
||||
managedDefaultRepository = createRepository( ID_DEFAULT_MANAGED, "Default Managed Repository", repoPath,
|
||||
"default" );
|
||||
|
||||
managedDefaultDir = new File( managedDefaultRepository.getUrl().getPath() );
|
||||
|
||||
|
@ -451,6 +458,58 @@ public class AbstractProxyTestCase
|
|||
System.out.println( "\n.\\ " + getName() + "() \\._________________________________________\n" );
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the specified resource directory from the src/test/repository/managed/ to
|
||||
* the testable directory under target/test-repository/managed/${testName}/
|
||||
*
|
||||
* @param resourceDir
|
||||
* @throws IOException
|
||||
*/
|
||||
protected void setupTestableManagedRepository( String resourcePath )
|
||||
throws IOException
|
||||
{
|
||||
String resourceDir = resourcePath;
|
||||
|
||||
if( !resourcePath.endsWith( "/" ) )
|
||||
{
|
||||
int idx = resourcePath.lastIndexOf( '/' );
|
||||
resourceDir = resourcePath.substring( 0, idx );
|
||||
}
|
||||
|
||||
File sourceRepoDir = new File( REPOPATH_DEFAULT_MANAGED );
|
||||
File sourceDir = new File( sourceRepoDir, resourceDir );
|
||||
|
||||
File destRepoDir = managedDefaultDir;
|
||||
File destDir = new File( destRepoDir, resourceDir );
|
||||
|
||||
// Cleanout destination dirs.
|
||||
if ( destDir.exists() )
|
||||
{
|
||||
FileUtils.deleteDirectory( destDir );
|
||||
}
|
||||
|
||||
// Test the source dir.
|
||||
if ( !sourceDir.exists() )
|
||||
{
|
||||
// This is just a warning.
|
||||
System.err.println( "Skipping setup of testable managed repsoitory, source dir does not exist: "
|
||||
+ sourceDir );
|
||||
return;
|
||||
}
|
||||
|
||||
// Test that the source is a dir.
|
||||
if ( !sourceDir.isDirectory() )
|
||||
{
|
||||
fail( "Unable to setup testable managed repository, source is not a directory: " + sourceDir );
|
||||
}
|
||||
|
||||
// Make the destination dir.
|
||||
destDir.mkdirs();
|
||||
|
||||
// Copy directory structure.
|
||||
copyDirectoryStructure( sourceDir, destDir );
|
||||
}
|
||||
|
||||
protected static Date getFutureDate()
|
||||
throws ParseException
|
||||
{
|
||||
|
|
|
@ -43,6 +43,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -66,6 +68,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -88,6 +92,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -110,6 +116,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -132,6 +140,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -154,6 +164,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -174,6 +186,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -197,6 +211,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -217,6 +233,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -240,6 +258,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -260,6 +280,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -283,6 +305,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -306,6 +330,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -329,6 +355,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -352,6 +380,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -394,6 +424,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -416,6 +448,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -438,6 +472,8 @@ public class ChecksumTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -455,5 +491,4 @@ public class ChecksumTransferTest
|
|||
assertChecksums( expectedFile, "96a08dc80a108cba8efd3b20aec91b32a0b2cbd4 get-bad-local-checksum-1.0.jar",
|
||||
"46fdd6ca55bf1d7a7eb0c858f41e0ccd get-bad-local-checksum-1.0.jar" );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -44,6 +44,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -74,6 +76,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
@ -102,6 +106,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
|
||||
long originalModificationTime = expectedFile.lastModified();
|
||||
|
@ -154,6 +160,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -176,6 +184,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -207,6 +217,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -231,6 +243,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/does-not-exist/1.0/does-not-exist-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -255,6 +269,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -288,6 +304,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -327,6 +345,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -352,6 +372,8 @@ public class ManagedDefaultTransferTest
|
|||
|
||||
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";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -373,6 +395,8 @@ public class ManagedDefaultTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -19,17 +19,13 @@ package org.apache.maven.archiva.proxy;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.maven.archiva.model.ArtifactReference;
|
||||
import org.apache.maven.archiva.policies.CachedFailuresPolicy;
|
||||
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.wagon.ResourceDoesNotExistException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
|
||||
/**
|
||||
* SnapshotTransferTest
|
||||
|
@ -45,6 +41,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/does-not-exist/1.0-SNAPSHOT/does-not-exist-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -64,6 +62,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -85,6 +85,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -106,6 +108,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -131,6 +135,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -161,6 +167,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -190,6 +198,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -212,6 +222,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -234,6 +246,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -257,6 +271,8 @@ public class SnapshotTransferTest
|
|||
throws Exception
|
||||
{
|
||||
String path = "org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
@ -277,10 +293,12 @@ public class SnapshotTransferTest
|
|||
public void testGetMetadataDrivenSnapshotRemoteUpdate()
|
||||
throws Exception
|
||||
{
|
||||
// Metadata driven snapshots (using a full timestamp) are treated like a release. It is the timing of the
|
||||
// Metadata driven snapshots (using a full timestamp) are treated like a release. It is the timing of the
|
||||
// updates to the metadata files that triggers which will be downloaded
|
||||
|
||||
String path = "org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar";
|
||||
setupTestableManagedRepository( path );
|
||||
|
||||
File expectedFile = new File( managedDefaultDir, path );
|
||||
ArtifactReference artifact = createArtifactReference( "default", path );
|
||||
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
MYWD=`pwd`
|
||||
|
||||
function makeListing()
|
||||
{
|
||||
LISTID=$1
|
||||
|
||||
cd $MYWD/$LISTID
|
||||
find . -type f -not -wholename "*/\.*" | sort > $MYWD/$LISTID.tmp
|
||||
}
|
||||
|
||||
function isInRepo()
|
||||
{
|
||||
LISTID=$1
|
||||
FILEID=$2
|
||||
|
||||
grep -q "$FILEID" $MYWD/$LISTID.tmp
|
||||
RETCODE=$?
|
||||
if [ $RETCODE -eq 0 ] ; then
|
||||
LISTID=${LISTID/proxied/}
|
||||
echo "[${LISTID:0:1}]"
|
||||
else
|
||||
echo " "
|
||||
fi
|
||||
}
|
||||
|
||||
makeListing "managed"
|
||||
makeListing "proxied1"
|
||||
makeListing "proxied2"
|
||||
|
||||
cd $MYWD
|
||||
|
||||
TS=`date`
|
||||
|
||||
echo "$0 - executed on $TS"
|
||||
echo ""
|
||||
echo "Determining location of files."
|
||||
echo " Key: [m] == managed"
|
||||
echo " [1] == proxy 1 (proxied1)"
|
||||
echo " [2] == proxy 2 (proxied2)"
|
||||
echo ""
|
||||
echo " -m- -1- -2- | -------------------------------------------- "
|
||||
|
||||
FILELIST=`cat managed.tmp proxied1.tmp proxied2.tmp | sort -u`
|
||||
|
||||
for FF in $FILELIST
|
||||
do
|
||||
INMANAGED=`isInRepo "managed" "$FF"`
|
||||
INPROXY1=`isInRepo "proxied1" "$FF"`
|
||||
INPROXY2=`isInRepo "proxied2" "$FF"`
|
||||
|
||||
echo " $INMANAGED $INPROXY1 $INPROXY2 | $FF"
|
||||
done
|
||||
|
||||
echo " --- --- --- | -------------------------------------------- "
|
||||
|
||||
rm -f managed.tmp proxied1.tmp proxied2.tmp
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
./create-managed-to-proxy-map.sh - executed on Wed Aug 29 18:17:23 MST 2007
|
||||
|
||||
Determining location of files.
|
||||
Key: [m] == managed
|
||||
[1] == proxy 1 (proxied1)
|
||||
[2] == proxy 2 (proxied2)
|
||||
|
||||
-m- -1- -2- | --------------------------------------------
|
||||
[m] [1] | ./org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar
|
||||
[m] | ./org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.md5
|
||||
[m] | ./org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar.sha1
|
||||
[1] | ./org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar
|
||||
[1] | ./org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.md5
|
||||
[1] | ./org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar.sha1
|
||||
[1] | ./org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar
|
||||
[1] | ./org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.md5
|
||||
[1] | ./org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar.sha1
|
||||
[m] [1] | ./org/apache/maven/test/get-checksum-from-managed-repo/1.0/get-checksum-from-managed-repo-1.0.jar.sha1
|
||||
[1] | ./org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar
|
||||
[1] | ./org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.md5
|
||||
[1] | ./org/apache/maven/test/get-checksum-md5-bad-sha1/1.0/get-checksum-md5-bad-sha1-1.0.jar.sha1
|
||||
[1] | ./org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar
|
||||
[1] | ./org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar.md5
|
||||
[1] | ./org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar
|
||||
[1] | ./org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.md5
|
||||
[1] | ./org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar.sha1
|
||||
[1] | ./org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar
|
||||
[1] | ./org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar.sha1
|
||||
[2] | ./org/apache/maven/test/get-default-layout/1.0.1/get-default-layout-1.0.1.pom
|
||||
[1] [2] | ./org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar
|
||||
[1] [2] | ./org/apache/maven/test/get-default-layout/1.0/maven-metadata.xml
|
||||
[1] [2] | ./org/apache/maven/test/get-default-layout/maven-metadata.xml
|
||||
[m] [1] | ./org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar
|
||||
[m] | ./org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.md5
|
||||
[m] | ./org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.jar
|
||||
[m] | ./org/apache/maven/test/get-default-layout-present-with-pom/1.0/get-default-layout-present-with-pom-1.0.pom
|
||||
[m] | ./org/apache/maven/test/get-default-metadata/1.0/get-default-metadata-1.0.jar
|
||||
[m] [1] | ./org/apache/maven/test/get-default-metadata/1.0/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-doubly-relocated-artefact/1.0/get-doubly-relocated-artefact-1.0.pom
|
||||
[1] | ./org/apache/maven/test/get-found-in-proxy/1.0.5/get-found-in-proxy-1.0.5-javadoc.jar
|
||||
[1] | ./org/apache/maven/test/get-found-in-proxy/maven-metadata.xml
|
||||
[1] [2] | ./org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar
|
||||
[2] | ./org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar
|
||||
[m] [1] [2] | ./org/apache/maven/test/get-merged-metadata/maven-metadata.xml
|
||||
[1] | ./org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar
|
||||
[1] | ./org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-not-on-remotes/1.0-beta-2/get-not-on-remotes-1.0-beta-2.jar
|
||||
[m] | ./org/apache/maven/test/get-not-on-remotes/1.0-beta-2/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-not-on-remotes/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-on-local-on-remote/1.0.22/get-on-local-on-remote-1.0.22.pom
|
||||
[m] [1] | ./org/apache/maven/test/get-on-local-on-remote/1.0.22/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-on-local-on-remote/1.0.8/get-on-local-on-remote-1.0.8.pom
|
||||
[m] [1] | ./org/apache/maven/test/get-on-local-on-remote/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom
|
||||
[m] [1] [2] | ./org/apache/maven/test/get-on-multiple-repos/1.0/maven-metadata.xml
|
||||
[m] [1] [2] | ./org/apache/maven/test/get-on-multiple-repos/maven-metadata.xml
|
||||
[m] [1] | ./org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/get-present-metadata-snapshot-1.0-20050831.101112-1.jar
|
||||
[m] [1] | ./org/apache/maven/test/get-present-metadata-snapshot/1.0-SNAPSHOT/maven-metadata.xml
|
||||
[m] [1] | ./org/apache/maven/test/get-present-timestamped-snapshot/1.0-SNAPSHOT/get-present-timestamped-snapshot-1.0-SNAPSHOT.jar
|
||||
[m] | ./org/apache/maven/test/get-project-metadata/1.0/get-project-metadata-1.0.jar
|
||||
[m] | ./org/apache/maven/test/get-project-metadata/1.1/get-project-metadata-1.1.jar
|
||||
[m] | ./org/apache/maven/test/get-project-metadata/2.0/get-project-metadata-2.0.pom
|
||||
[m] | ./org/apache/maven/test/get-project-metadata/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-release-metadata/2.2/get-release-metadata-2.2.jar
|
||||
[m] | ./org/apache/maven/test/get-release-metadata/2.2/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-relocated-artefact/1.0/get-relocated-artefact-1.0.pom
|
||||
[m] | ./org/apache/maven/test/get-relocated-artefact-with-pom/1.0/get-relocated-artefact-with-pom-1.0.pom
|
||||
[m] | ./org/apache/maven/test/get-removed-from-proxies/1.0/get-removed-from-proxies-1.0.jar
|
||||
[m] | ./org/apache/maven/test/get-removed-metadata/1.0/maven-metadata.xml
|
||||
[m] | ./org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.123456-1.jar
|
||||
[m] | ./org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/get-snapshot-on-local-not-remote-2.0-alpha-2-20070821.220304-2.jar
|
||||
[m] | ./org/apache/maven/test/get-snapshot-on-local-not-remote/2.0-alpha-2-SNAPSHOT/maven-metadata.xml
|
||||
[1] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070819.040004-1.jar
|
||||
[m] [2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.102030-1.jar
|
||||
[m] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070821.185701-2.jar
|
||||
[m] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.021008-3.jar
|
||||
[1] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070822.145534-9.jar
|
||||
[2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.111741-5.jar
|
||||
[2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/get-snapshot-popular-2.0-20070823.212711-6.jar
|
||||
[m] [1] [2] | ./org/apache/maven/test/get-snapshot-popular/2.0-SNAPSHOT/maven-metadata.xml
|
||||
[1] | ./org/apache/maven/test/get-timestamped-snapshot/1.0-SNAPSHOT/get-timestamped-snapshot-1.0-SNAPSHOT.jar
|
||||
[1] [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061222.034118-1.jar
|
||||
[1] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20061227.112101-2.jar
|
||||
[2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-20070101.000103-2.jar
|
||||
[1] [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/get-timestamped-snapshot-in-both-1.0-SNAPSHOT.jar
|
||||
[1] [2] | ./org/apache/maven/test/get-timestamped-snapshot-in-both/1.0-SNAPSHOT/maven-metadata.xml
|
||||
[m] [1] | ./org/apache/maven/test/get-updated-metadata/1.0-SNAPSHOT/maven-metadata.xml
|
||||
[m] [1] | ./org/apache/maven/test/get-updated-metadata/maven-metadata.xml
|
||||
--- --- --- | --------------------------------------------
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-default-metadata</artifactId>
|
||||
<version>1.0</version>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-not-on-remotes</artifactId>
|
||||
<version>1.0-beta-2</version>
|
||||
</metadata>
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-not-on-remotes</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0-beta-2</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-local-on-remote</artifactId>
|
||||
<version>1.0.22</version>
|
||||
</metadata>
|
|
@ -0,0 +1,29 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-local-on-remote</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0.8</version>
|
||||
<version>1.0.22</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-multiple-repos</artifactId>
|
||||
<version>1.0</version>
|
||||
</metadata>
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-multiple-repos</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-present-metadata-snapshot</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20050831.101112</timestamp>
|
||||
<buildNumber>1</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20050831101112</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-project-metadata</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-release-metadata</artifactId>
|
||||
<version>2.2</version>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-snapshot-on-local-not-remote</artifactId>
|
||||
<version>2.0-alpha-2-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20070821.220304</timestamp>
|
||||
<buildNumber>2</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20070821220304</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-snapshot-popular</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20070822.021008</timestamp>
|
||||
<buildNumber>3</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20070822021008</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-default-layout</artifactId>
|
||||
<version>1.0</version>
|
||||
</metadata>
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-default-layout</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-found-in-proxy</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0.5</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-metadata-snapshot</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20050831.101112</timestamp>
|
||||
<buildNumber>1</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20050831101112</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-local-on-remote</artifactId>
|
||||
<version>1.0.22</version>
|
||||
</metadata>
|
|
@ -0,0 +1,29 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-local-on-remote</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0.22</version>
|
||||
<version>2.0</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-multiple-repos</artifactId>
|
||||
<version>1.0</version>
|
||||
</metadata>
|
|
@ -0,0 +1,29 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-multiple-repos</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0</version>
|
||||
<version>2.0</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-present-metadata-snapshot</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20050831.101112</timestamp>
|
||||
<buildNumber>1</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20050831101112</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-snapshot-popular</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20070822.145534</timestamp>
|
||||
<buildNumber>9</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20070822145534</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-timestamped-snapshot-in-both</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20061227.112101</timestamp>
|
||||
<buildNumber>2</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20061227112101</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,2 @@
|
|||
get-default-layout-1.0.jar
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-default-layout</artifactId>
|
||||
<version>1.0</version>
|
||||
</metadata>
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-default-layout</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0.1</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,24 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-multiple-repos</artifactId>
|
||||
<version>1.0</version>
|
||||
</metadata>
|
|
@ -0,0 +1,29 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-on-multiple-repos</artifactId>
|
||||
<versioning>
|
||||
<versions>
|
||||
<version>1.0</version>
|
||||
<version>1.0.1</version>
|
||||
</versions>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-snapshot-popular</artifactId>
|
||||
<version>2.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20070823.212711</timestamp>
|
||||
<buildNumber>6</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20070823212711</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<metadata>
|
||||
<groupId>org.apache.maven.test</groupId>
|
||||
<artifactId>get-timestamped-snapshot-in-both</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20070101.000103</timestamp>
|
||||
<buildNumber>2</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20070101000103</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
|
@ -40,7 +40,7 @@
|
|||
</logger>
|
||||
|
||||
<root>
|
||||
<priority value ="debug" />
|
||||
<priority value ="info" />
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>cache</name>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
|
|
|
@ -63,6 +63,28 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.cache.Cache</role>
|
||||
<role-hint>url-failures-cache</role-hint>
|
||||
<implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
|
||||
<description>URL Failure Cache</description>
|
||||
<configuration>
|
||||
<disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
|
||||
<disk-persistent>false</disk-persistent> <!--disabling disk persistence for unit testing. -->
|
||||
<disk-store-path>${java.io.tmpdir}/archiva/urlcache</disk-store-path>
|
||||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
<!-- 30 minutes = 1800 seconds -->
|
||||
<time-to-live-seconds>1800</time-to-live-seconds>
|
||||
</configuration>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.logging.LoggerManager</role>
|
||||
<implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
|
||||
|
|
|
@ -63,6 +63,28 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.cache.Cache</role>
|
||||
<role-hint>url-failures-cache</role-hint>
|
||||
<implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
|
||||
<description>URL Failure Cache</description>
|
||||
<configuration>
|
||||
<disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
|
||||
<disk-persistent>false</disk-persistent> <!--disabling disk persistence for unit testing. -->
|
||||
<disk-store-path>${java.io.tmpdir}/archiva/urlcache</disk-store-path>
|
||||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
<!-- 30 minutes = 1800 seconds -->
|
||||
<time-to-live-seconds>1800</time-to-live-seconds>
|
||||
</configuration>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.logging.LoggerManager</role>
|
||||
<implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
|
||||
|
|
|
@ -63,6 +63,28 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.cache.Cache</role>
|
||||
<role-hint>url-failures-cache</role-hint>
|
||||
<implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
|
||||
<description>URL Failure Cache</description>
|
||||
<configuration>
|
||||
<disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
|
||||
<disk-persistent>false</disk-persistent> <!--disabling disk persistence for unit testing. -->
|
||||
<disk-store-path>${java.io.tmpdir}/archiva/urlcache</disk-store-path>
|
||||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
<!-- 30 minutes = 1800 seconds -->
|
||||
<time-to-live-seconds>1800</time-to-live-seconds>
|
||||
</configuration>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.logging.LoggerManager</role>
|
||||
<implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
|
||||
|
|
|
@ -29,6 +29,28 @@
|
|||
<role-hint>mock</role-hint>
|
||||
<implementation>org.apache.maven.archiva.proxy.MockConfiguration</implementation>
|
||||
</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>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
|
||||
<role-hint>mock</role-hint>
|
||||
<field-name>configuration</field-name>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.apache.maven.archiva.proxy.RepositoryProxyConnectors</role>
|
||||
<role-hint>default</role-hint>
|
||||
|
@ -48,6 +70,10 @@
|
|||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
</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>
|
||||
<field-name>preDownloadPolicies</field-name>
|
||||
|
@ -63,6 +89,28 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.cache.Cache</role>
|
||||
<role-hint>url-failures-cache</role-hint>
|
||||
<implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
|
||||
<description>URL Failure Cache</description>
|
||||
<configuration>
|
||||
<disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
|
||||
<disk-persistent>false</disk-persistent> <!--disabling disk persistence for unit testing. -->
|
||||
<disk-store-path>${java.io.tmpdir}/archiva/urlcache</disk-store-path>
|
||||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
<!-- 30 minutes = 1800 seconds -->
|
||||
<time-to-live-seconds>1800</time-to-live-seconds>
|
||||
</configuration>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.logging.LoggerManager</role>
|
||||
<implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
|
||||
|
|
|
@ -48,6 +48,10 @@
|
|||
<role>org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory</role>
|
||||
<field-name>layoutFactory</field-name>
|
||||
</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>
|
||||
<field-name>preDownloadPolicies</field-name>
|
||||
|
@ -63,6 +67,28 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.cache.Cache</role>
|
||||
<role-hint>url-failures-cache</role-hint>
|
||||
<implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
|
||||
<description>URL Failure Cache</description>
|
||||
<configuration>
|
||||
<disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
|
||||
<disk-persistent>false</disk-persistent> <!--disabling disk persistence for unit testing. -->
|
||||
<disk-store-path>${java.io.tmpdir}/archiva/urlcache</disk-store-path>
|
||||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
<!-- 30 minutes = 1800 seconds -->
|
||||
<time-to-live-seconds>1800</time-to-live-seconds>
|
||||
</configuration>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.logging.LoggerManager</role>
|
||||
<implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
|
||||
|
|
|
@ -63,6 +63,28 @@
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.cache.Cache</role>
|
||||
<role-hint>url-failures-cache</role-hint>
|
||||
<implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
|
||||
<description>URL Failure Cache</description>
|
||||
<configuration>
|
||||
<disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
|
||||
<disk-persistent>false</disk-persistent> <!--disabling disk persistence for unit testing. -->
|
||||
<disk-store-path>${java.io.tmpdir}/archiva/urlcache</disk-store-path>
|
||||
<eternal>false</eternal>
|
||||
<max-elements-in-memory>1000</max-elements-in-memory>
|
||||
<memory-eviction-policy>LRU</memory-eviction-policy>
|
||||
<name>url-failures-cache</name>
|
||||
<overflow-to-disk>false</overflow-to-disk>
|
||||
<!-- 45 minutes = 2700 seconds -->
|
||||
<time-to-idle-seconds>2700</time-to-idle-seconds>
|
||||
<!-- 30 minutes = 1800 seconds -->
|
||||
<time-to-live-seconds>1800</time-to-live-seconds>
|
||||
</configuration>
|
||||
</component>
|
||||
|
||||
<component>
|
||||
<role>org.codehaus.plexus.logging.LoggerManager</role>
|
||||
<implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
|
||||
|
|
|
@ -16,6 +16,7 @@ package org.apache.maven.archiva.repository.metadata;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.math.NumberUtils;
|
||||
import org.apache.maven.archiva.common.utils.PathUtil;
|
||||
import org.apache.maven.archiva.common.utils.VersionComparator;
|
||||
|
@ -136,14 +137,9 @@ public class MetadataTools
|
|||
}
|
||||
|
||||
Set<String> foundVersions = new HashSet<String>();
|
||||
|
||||
// TODO: should really determine if valid based on artifactPatterns, not POM existance.
|
||||
// this method was written before the gatherSnapshotVersions() method, consider
|
||||
// using the routines from that method used to determine artifacts via pattern.
|
||||
ArtifactReference pomReference = new ArtifactReference();
|
||||
pomReference.setGroupId( reference.getGroupId() );
|
||||
pomReference.setArtifactId( reference.getArtifactId() );
|
||||
pomReference.setType( "pom" );
|
||||
VersionedReference versionRef = new VersionedReference();
|
||||
versionRef.setGroupId( reference.getGroupId() );
|
||||
versionRef.setArtifactId( reference.getArtifactId() );
|
||||
|
||||
File repoFiles[] = repoDir.listFiles();
|
||||
for ( int i = 0; i < repoFiles.length; i++ )
|
||||
|
@ -154,14 +150,13 @@ public class MetadataTools
|
|||
continue;
|
||||
}
|
||||
|
||||
// Test if dir has pom, which proves to us that it is a valid version directory.
|
||||
// Test if dir has an artifact, which proves to us that it is a valid version directory.
|
||||
String version = repoFiles[i].getName();
|
||||
pomReference.setVersion( version );
|
||||
versionRef.setVersion( version );
|
||||
|
||||
File artifactFile = new File( managedRepository.getUrl().getPath(), layout.toPath( pomReference ) );
|
||||
if ( artifactFile.exists() )
|
||||
if ( hasArtifact( managedRepository, versionRef ) )
|
||||
{
|
||||
// Found a pom, must be a valid version.
|
||||
// Found an artifact, must be a valid version.
|
||||
foundVersions.add( version );
|
||||
}
|
||||
}
|
||||
|
@ -169,6 +164,19 @@ public class MetadataTools
|
|||
return foundVersions;
|
||||
}
|
||||
|
||||
private boolean hasArtifact( ArchivaRepository 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.
|
||||
*
|
||||
|
@ -262,6 +270,7 @@ public class MetadataTools
|
|||
|
||||
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++ )
|
||||
{
|
||||
|
@ -284,6 +293,46 @@ public class MetadataTools
|
|||
}
|
||||
}
|
||||
|
||||
// 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() );
|
||||
|
||||
if ( proxiedRepoIds != null )
|
||||
{
|
||||
String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
|
||||
baseVersion = baseVersion.substring( 0, baseVersion.indexOf( VersionUtil.SNAPSHOT ) - 1 );
|
||||
|
||||
// Add in the proxied repo version ids too.
|
||||
Iterator<String> it = proxiedRepoIds.iterator();
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
String proxyId = it.next();
|
||||
|
||||
ArchivaRepositoryMetadata proxyMetadata = readProxyMetadata( managedRepository, reference, proxyId );
|
||||
if ( proxyMetadata == null )
|
||||
{
|
||||
// There is no proxy metadata, skip it.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Is there some snapshot info?
|
||||
SnapshotVersion snapshot = proxyMetadata.getSnapshotVersion();
|
||||
if ( snapshot != null )
|
||||
{
|
||||
String timestamp = snapshot.getTimestamp();
|
||||
int buildNumber = snapshot.getBuildNumber();
|
||||
|
||||
// Only interested in the timestamp + buildnumber.
|
||||
if ( StringUtils.isNotBlank( timestamp ) && ( buildNumber > 0 ) )
|
||||
{
|
||||
foundVersions.add( baseVersion + "-" + timestamp + "-" + buildNumber );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return foundVersions;
|
||||
}
|
||||
|
||||
|
@ -372,6 +421,27 @@ public class MetadataTools
|
|||
}
|
||||
}
|
||||
|
||||
public ArchivaRepositoryMetadata readProxyMetadata( ArchivaRepository managedRepository,
|
||||
VersionedReference reference, String proxyId )
|
||||
throws LayoutException
|
||||
{
|
||||
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( managedRepository.getLayoutType() );
|
||||
String metadataPath = getRepositorySpecificName( proxyId, layout.toPath( reference ) );
|
||||
File metadataFile = new File( managedRepository.getUrl().getPath(), metadataPath );
|
||||
|
||||
try
|
||||
{
|
||||
return RepositoryMetadataReader.read( metadataFile );
|
||||
}
|
||||
catch ( RepositoryMetadataException e )
|
||||
{
|
||||
// TODO: [monitor] consider a monitor for this event.
|
||||
// TODO: consider a read-redo on monitor return code?
|
||||
log.warn( "Unable to read metadata: " + metadataFile.getAbsolutePath(), e );
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the metadata to represent the all versions of
|
||||
* the provided groupId:artifactId project reference,
|
||||
|
@ -466,7 +536,8 @@ public class MetadataTools
|
|||
// Do SNAPSHOT handling.
|
||||
metadata.setVersion( VersionUtil.getBaseVersion( reference.getVersion() ) );
|
||||
|
||||
// Gather up all of the versions found in the reference dir.
|
||||
// Gather up all of the versions found in the reference dir, and any
|
||||
// proxied maven-metadata.xml files.
|
||||
Set snapshotVersions = gatherSnapshotVersions( managedRepository, reference );
|
||||
|
||||
if ( snapshotVersions.isEmpty() )
|
||||
|
@ -514,15 +585,15 @@ public class MetadataTools
|
|||
* archive, the most recent timestamp in the archive?
|
||||
*/
|
||||
ArtifactReference artifact = getFirstArtifact( managedRepository, reference );
|
||||
|
||||
|
||||
if ( artifact == null )
|
||||
{
|
||||
throw new IOException( "Not snapshot artifact found to reference in " + reference );
|
||||
}
|
||||
|
||||
|
||||
File artifactFile = new File( managedRepository.getUrl().getPath(), layout.toPath( artifact ) );
|
||||
|
||||
if( artifactFile.exists() )
|
||||
|
||||
if ( artifactFile.exists() )
|
||||
{
|
||||
Date lastModified = new Date( artifactFile.lastModified() );
|
||||
metadata.setLastUpdatedTimestamp( lastModified );
|
||||
|
|
|
@ -55,6 +55,7 @@ public class RepositoryMetadataReader
|
|||
|
||||
metadata.setGroupId( xml.getElementText( "//metadata/groupId" ) );
|
||||
metadata.setArtifactId( xml.getElementText( "//metadata/artifactId" ) );
|
||||
metadata.setVersion( xml.getElementText( "//metadata/version" ) );
|
||||
metadata.setFileLastModified( new Date( metadataFile.lastModified() ) );
|
||||
metadata.setFileSize( metadataFile.length() );
|
||||
metadata.setWhenIndexed( null );
|
||||
|
|
|
@ -71,7 +71,12 @@ public class MetadataToolsTest
|
|||
public void testGatherAvailableVersionsMissingMultipleVersions()
|
||||
throws Exception
|
||||
{
|
||||
assertAvailableVersions( "missing_metadata_b", new String[] { "1.0", "1.0.1", "2.0", "2.0-20070821-dev" } );
|
||||
assertAvailableVersions( "missing_metadata_b", new String[] {
|
||||
"1.0",
|
||||
"1.0.1",
|
||||
"2.0",
|
||||
"2.0.1",
|
||||
"2.0-20070821-dev" } );
|
||||
}
|
||||
|
||||
public void testGatherAvailableVersionsSimpleYetIncomplete()
|
||||
|
@ -100,6 +105,27 @@ public class MetadataToolsTest
|
|||
"1.0-alpha-11-20070316.175232-11" } );
|
||||
}
|
||||
|
||||
public void testGatherSnapshotVersionsAWithProxies()
|
||||
throws Exception
|
||||
{
|
||||
// These proxied repositories do not need to exist for the purposes of this unit test,
|
||||
// just the repository ids are important.
|
||||
createProxyConnector( "test-repo", "apache-snapshots" );
|
||||
createProxyConnector( "test-repo", "internal-snapshots" );
|
||||
createProxyConnector( "test-repo", "snapshots.codehaus.org" );
|
||||
|
||||
assertSnapshotVersions( "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-20070315.033030-10" /* Arrives in via snapshots.codehaus.org proxy */,
|
||||
"1.0-alpha-11-20070316.175232-11" } );
|
||||
}
|
||||
|
||||
public void testGetRepositorySpecificName()
|
||||
{
|
||||
ArchivaRepository repoJavaNet = new ArchivaRepository( "maven2-repository.dev.java.net",
|
||||
|
@ -135,7 +161,12 @@ public class MetadataToolsTest
|
|||
public void testUpdateProjectMissingMultipleVersions()
|
||||
throws Exception
|
||||
{
|
||||
assertUpdatedProjectMetadata( "missing_metadata_b", new String[] { "1.0", "1.0.1", "2.0", "2.0-20070821-dev" } );
|
||||
assertUpdatedProjectMetadata( "missing_metadata_b", new String[] {
|
||||
"1.0",
|
||||
"1.0.1",
|
||||
"2.0",
|
||||
"2.0.1",
|
||||
"2.0-20070821-dev" } );
|
||||
}
|
||||
|
||||
public void testUpdateProjectMissingMultipleVersionsWithProxies()
|
||||
|
@ -274,7 +305,7 @@ public class MetadataToolsTest
|
|||
String actualMetadata = FileUtils.readFileToString( metadataFile, null );
|
||||
|
||||
DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) );
|
||||
if( !detailedDiff.similar() )
|
||||
if ( !detailedDiff.similar() )
|
||||
{
|
||||
assertEquals( expectedMetadata, actualMetadata );
|
||||
}
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
<version>1.0-alpha-11-SNAPSHOT</version>
|
||||
<versioning>
|
||||
<snapshot>
|
||||
<timestamp>20070316.175232</timestamp>
|
||||
<buildNumber>11</buildNumber>
|
||||
<timestamp>20070315.033030</timestamp>
|
||||
<buildNumber>10</buildNumber>
|
||||
</snapshot>
|
||||
<lastUpdated>20070316175456</lastUpdated>
|
||||
<lastUpdated>20070315.033030</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
||||
|
|
Loading…
Reference in New Issue