[MRM-161] clean up report results

git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@441391 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Porter 2006-09-08 05:58:25 +00:00
parent cb314808e2
commit b063f785e0
7 changed files with 108 additions and 54 deletions

View File

@ -45,12 +45,14 @@ public class DependencyArtifactReportProcessor
*/
private RepositoryQueryLayerFactory layerFactory;
private static final String POM = "pom";
public void processArtifact( Artifact artifact, Model model, ReportingDatabase reporter )
{
RepositoryQueryLayer queryLayer = layerFactory.createRepositoryQueryLayer( artifact.getRepository() );
processArtifact( artifact, reporter, queryLayer );
if ( model != null )
if ( model != null && POM.equals( artifact.getType() ) )
{
List dependencies = model.getDependencies();
processDependencies( dependencies, reporter, queryLayer, artifact );

View File

@ -62,55 +62,58 @@ public class DuplicateArtifactFileReportProcessor
{
ArtifactRepository repository = artifact.getRepository();
// TODO! always null currently, need to configure this properly
if ( artifact.getFile() != null && indexDirectory != null )
if ( indexDirectory != null )
{
RepositoryArtifactIndex index = indexFactory.createStandardIndex( new File( indexDirectory ) );
if ( artifact.getFile() != null )
{
RepositoryArtifactIndex index = indexFactory.createStandardIndex( new File( indexDirectory ) );
String checksum = null;
try
{
checksum = digester.calc( artifact.getFile() );
}
catch ( DigesterException e )
{
reporter.addWarning( artifact, "Unable to generate checksum for " + artifact.getFile() + ": " + e );
}
if ( checksum != null )
{
String checksum = null;
try
{
List results = index.search( new LuceneQuery(
new TermQuery( new Term( StandardIndexRecordFields.MD5, checksum.toLowerCase() ) ) ) );
checksum = digester.calc( artifact.getFile() );
}
catch ( DigesterException e )
{
reporter.addWarning( artifact, "Unable to generate checksum for " + artifact.getFile() + ": " + e );
}
if ( !results.isEmpty() )
if ( checksum != null )
{
try
{
for ( Iterator i = results.iterator(); i.hasNext(); )
{
StandardArtifactIndexRecord result = (StandardArtifactIndexRecord) i.next();
List results = index.search( new LuceneQuery(
new TermQuery( new Term( StandardIndexRecordFields.MD5, checksum.toLowerCase() ) ) ) );
//make sure it is not the same artifact
if ( !result.getFilename().equals( repository.pathOf( artifact ) ) )
if ( !results.isEmpty() )
{
for ( Iterator i = results.iterator(); i.hasNext(); )
{
//report only duplicates from the same groupId
String groupId = artifact.getGroupId();
if ( groupId.equals( result.getGroupId() ) )
StandardArtifactIndexRecord result = (StandardArtifactIndexRecord) i.next();
//make sure it is not the same artifact
if ( !result.getFilename().equals( repository.pathOf( artifact ) ) )
{
reporter.addFailure( artifact, "Found duplicate for " + artifact.getId() );
//report only duplicates from the same groupId
String groupId = artifact.getGroupId();
if ( groupId.equals( result.getGroupId() ) )
{
reporter.addFailure( artifact, "Found duplicate for " + artifact.getId() );
}
}
}
}
}
}
catch ( RepositoryIndexSearchException e )
{
reporter.addWarning( artifact, "Failed to search in index" + e );
catch ( RepositoryIndexSearchException e )
{
reporter.addWarning( artifact, "Failed to search in index" + e );
}
}
}
}
else
{
reporter.addWarning( artifact, "Artifact file is null" );
else
{
reporter.addWarning( artifact, "Artifact file is null" );
}
}
}
}

View File

@ -32,6 +32,7 @@ import java.io.Reader;
/**
* This class validates well-formedness of pom xml file.
*
* @todo nice to have this a specific, tested report - however it is likely to double up with project building exceptions from IndexerTask. Resolve [!]
* @plexus.component role="org.apache.maven.archiva.reporting.ArtifactReportProcessor" role-hint="invalid-pom"
*/
public class InvalidPomArtifactReportProcessor
@ -90,9 +91,5 @@ public class InvalidPomArtifactReportProcessor
}
}
}
else
{
reporter.addWarning( artifact, "The artifact is not a pom xml file." );
}
}
}

View File

@ -60,6 +60,8 @@ public class LocationArtifactReportProcessor
*/
private MavenProjectBuilder projectBuilder;
private static final String POM = "pom";
/**
* Check whether the artifact is in its proper location. The location of the artifact
* is validated first against the groupId, artifactId and versionId in the specified model
@ -83,16 +85,25 @@ public class LocationArtifactReportProcessor
if ( model != null )
{
//check if the artifact is located in its proper location based on the info
//specified in the model object/pom
Artifact modelArtifact = artifactFactory.createBuildArtifact( model.getGroupId(), model.getArtifactId(),
model.getVersion(), model.getPackaging() );
String modelPath = repository.pathOf( modelArtifact );
if ( !modelPath.equals( artifactPath ) )
// only check if it is a standalone POM, or an artifact other than a POM
// ie, don't check the location of the POM for another artifact matches that of the artifact
if ( !POM.equals( artifact.getType() ) || POM.equals( model.getPackaging() ) )
{
reporter.addFailure( artifact,
"The artifact is out of place. It does not match the specified location in the repository pom." );
//check if the artifact is located in its proper location based on the info
//specified in the model object/pom
Artifact modelArtifact = artifactFactory.createArtifactWithClassifier( model.getGroupId(),
model.getArtifactId(),
model.getVersion(),
artifact.getType(),
artifact.getClassifier() );
String modelPath = repository.pathOf( modelArtifact );
if ( !modelPath.equals( artifactPath ) )
{
reporter.addFailure( artifact,
"The artifact is out of place. It does not match the specified location in the repository pom: " +
modelPath );
}
}
}
@ -123,8 +134,7 @@ public class LocationArtifactReportProcessor
}
else
{
reporter.addFailure( artifact,
"The artifact is out of place. It does not exist at the specified location in the repository pom." );
throw new IllegalStateException( "Couldn't find artifact " + file );
}
}

View File

@ -69,6 +69,6 @@ public class InvalidPomArtifactReportProcessorTest
artifactReportProcessor.processArtifact( artifact, null, reporter );
assertEquals( 0, reporter.getNumFailures() );
assertEquals( 1, reporter.getNumWarnings() );
assertEquals( 0, reporter.getNumWarnings() );
}
}

View File

@ -76,8 +76,41 @@ public class LocationArtifactReportProcessorTest
throws IOException, XmlPullParserException
{
Artifact artifact = createArtifact( "groupId", "artifactId", "1.0-alpha-1" );
Artifact pomArtifact = createArtifact( "groupId", "artifactId", "1.0-alpha-1", "pom" );
artifactReportProcessor.processArtifact( artifact, null, reporter );
Model model = readPom( repository.pathOf( pomArtifact ) );
artifactReportProcessor.processArtifact( artifact, model, reporter );
assertEquals( 0, reporter.getNumFailures() );
assertEquals( 0, reporter.getNumWarnings() );
}
/**
* Test the LocationArtifactReporter when the artifact is in the location specified in the
* file system pom, but the pom itself is passed in.
*/
public void testLocationArtifactReporterSuccessPom()
throws IOException, XmlPullParserException
{
Artifact pomArtifact = createArtifact( "groupId", "artifactId", "1.0-alpha-1", "pom" );
Model model = readPom( repository.pathOf( pomArtifact ) );
artifactReportProcessor.processArtifact( pomArtifact, model, reporter );
assertEquals( 0, reporter.getNumFailures() );
assertEquals( 0, reporter.getNumWarnings() );
}
/**
* Test the LocationArtifactReporter when the artifact is in the location specified in the
* file system pom, with a classifier.
*/
public void testLocationArtifactReporterSuccessClassifier()
throws IOException, XmlPullParserException
{
Artifact artifact = createArtifact( "groupId", "artifactId", "1.0-alpha-1", "java-source" );
Artifact pomArtifact = createArtifact( "groupId", "artifactId", "1.0-alpha-1", "pom" );
Model model = readPom( repository.pathOf( pomArtifact ) );
artifactReportProcessor.processArtifact( artifact, model, reporter );
assertEquals( 0, reporter.getNumFailures() );
assertEquals( 0, reporter.getNumWarnings() );
}
@ -90,9 +123,18 @@ public class LocationArtifactReportProcessorTest
throws IOException, XmlPullParserException
{
Artifact artifact = createArtifact( "groupId", "artifactId", "1.0-alpha-2" );
Artifact pomArtifact = createArtifact( "groupId", "artifactId", "1.0-alpha-2", "pom" );
artifactReportProcessor.processArtifact( artifact, null, reporter );
assertEquals( 1, reporter.getNumFailures() );
try
{
Model model = readPom( repository.pathOf( pomArtifact ) );
artifactReportProcessor.processArtifact( artifact, model, reporter );
fail( "Should not have passed the artifact" );
}
catch ( IllegalStateException e )
{
// correct!
}
}
/**