repoConfig = managedRepositoryAdmin.getManagedRepository( repoId );
log.debug( "Retrieved repository configuration for repo '" + repoId + "'" );
RepositorySession repositorySession = repositorySessionFactory.createSession();
try
{
MetadataRepository metadataRepository = repositorySession.getRepository();
if ( repoConfig != null )
{
stagingConfig = managedRepositoryAdmin.getManagedRepository( stagingId );
if ( stagingConfig != null )
{
List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( stagingId );
if ( repoConfig.isReleases() && !repoConfig.isSnapshots() )
{
log.info( "Repository to be merged contains releases only.." );
if ( skipConflicts )
{
List<ArtifactMetadata> conflicts =
repositoryMerger.getConflictingArtifacts( metadataRepository, repoId, stagingId );
if ( log.isDebugEnabled() )
{
log.debug( "Artifacts in conflict.." );
for ( ArtifactMetadata metadata : conflicts )
{
log.debug( metadata.getNamespace() + ":" + metadata.getProject() + ":"
+ metadata.getProjectVersion() );
}
}
sourceArtifacts.removeAll( conflicts );
log.debug( "Source artifacts size :: " + sourceArtifacts.size() );
mergeWithOutSnapshots( sourceArtifacts, stagingId, repoId, metadataRepository );
}
else
{
log.debug( "Source artifacts size :: " + sourceArtifacts.size() );
mergeWithOutSnapshots( sourceArtifacts, stagingId, repoId, metadataRepository );
}
}
else
{
log.info( "Repository to be merged has snapshot artifacts.." );
if ( skipConflicts )
{
List<ArtifactMetadata> conflicts =
repositoryMerger.getConflictingArtifacts( metadataRepository, repoId, stagingId );
if ( log.isDebugEnabled() )
{
log.debug( "Artifacts in conflict.." );
for ( ArtifactMetadata metadata : conflicts )
{
log.debug( metadata.getNamespace() + ":" + metadata.getProject() + ":"
+ metadata.getProjectVersion() );
}
}
sourceArtifacts.removeAll( conflicts );
log.debug( "Source artifacts size :: " + sourceArtifacts.size() );
Filter<ArtifactMetadata> artifactsWithOutConflicts =
new IncludesFilter<ArtifactMetadata>( sourceArtifacts );
repositoryMerger.merge( metadataRepository, stagingId, repoId, artifactsWithOutConflicts );
log.info( "Staging repository '" + stagingId + "' merged successfully with managed repo '"
+ repoId + "'." );
}
else
{
repositoryMerger.merge( metadataRepository, stagingId, repoId );
log.info( "Staging repository '" + stagingId + "' merged successfully with managed repo '"
+ repoId + "'." );
}
}
}
else
{
throw new Exception( "Staging Id : " + stagingId + " not found." );
}
}
else
{
throw new Exception( "Repository Id : " + repoId + " not found." );
}
if ( !repositoryTaskScheduler.isProcessingRepositoryTask( repoId ) )
{
RepositoryTask task = new RepositoryTask();
task.setRepositoryId( repoId );
repositoryTaskScheduler.queueTask( task );
}
AuditEvent event = createAuditEvent( repoConfig );
// add event for audit log reports
metadataRepository.addMetadataFacet( event.getRepositoryId(), event );
// log event in archiva audit log
auditListener.auditEvent( createAuditEvent( repoConfig ) );
repositorySession.save();
}
finally
{
repositorySession.close();
}
return true;
}