Author: ogusakov Date: Mon Oct 6 12:50:22 2008 New Revision: 702243 URL: http://svn.apache.org/viewvc?rev=702243&view=rev Log: dependencyTree metadata inc/exc, bug in conversion to 1.0.0-alpha-2-SN
Added: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ConflictException.java maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/pom.xml maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/pom.xml maven/sandbox/trunk/mercury/wagon-mercury/pom.xml Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java?rev=702243&r1=702242&r2=702243&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java (original) +++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java Mon Oct 6 12:50:22 2008 @@ -4,6 +4,9 @@ import java.util.Collection; import java.util.List; +import org.apache.maven.mercury.artifact.version.VersionException; +import org.apache.maven.mercury.artifact.version.VersionRange; + /** * this is the most primitive metadata there is, usually used to query repository for "real" metadata. @@ -112,7 +115,7 @@ return s; } //--------------------------------------------------------------------- - public boolean sameGAV( ArtifactMetadata md ) + public boolean sameGAV( ArtifactBasicMetadata md ) { if( md == null ) return false; @@ -124,7 +127,7 @@ ; } //--------------------------------------------------------------------- - public boolean sameGA( ArtifactMetadata md ) + public boolean sameGA( ArtifactBasicMetadata md ) { if( md == null ) return false; @@ -204,6 +207,10 @@ { return version; } + public boolean hasVersion() + { + return version != null && version.length() > 0; + } public void setVersion( String version ) { @@ -364,6 +371,54 @@ { this.exclusions = exclusions; } + + /** + * run dependency through inclusion/exclusion filters. Inclusion filter + * is always a "hole"-filter, which is then enhanced by exclusion "cork"-filter + * + * @param dep dependency to vet + * @return vet result + * @throws VersionException + */ + public boolean allowDependency( ArtifactBasicMetadata dep ) + throws VersionException + { + boolean includeDependency = true; + if( hasInclusions() ) + includeDependency = ! passesFilter( inclusions, dep ); + + if( !includeDependency ) + return false; + + if( !hasExclusions() ) + return true; + + if( passesFilter( exclusions, dep ) ) + return true; + + return false; + + } + + private boolean passesFilter( Collection<ArtifactBasicMetadata> filter, ArtifactBasicMetadata dep ) + throws VersionException + { + for( ArtifactBasicMetadata filterMd : filter ) + { + if( filterMd.sameGA( dep ) ) + { + if( !filterMd.hasVersion() ) + return false; // no version in the filter - catch by GA + VersionRange vr = new VersionRange( filterMd.getVersion() ); + if( vr.includes( dep.getVersion() )) + return false; // catch by version query + } + } + + return true; + } + + @Override public boolean equals( Object obj ) { Added: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ConflictException.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ConflictException.java?rev=702243&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ConflictException.java (added) +++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ConflictException.java Mon Oct 6 12:50:22 2008 @@ -0,0 +1,54 @@ +package org.apache.maven.mercury.artifact; + +/** + * + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class ConflictException + extends Exception +{ + + /** + * + */ + public ConflictException() + { + // TODO Auto-generated constructor stub + } + + /** + * @param message + */ + public ConflictException( + String message ) + { + super( message ); + // TODO Auto-generated constructor stub + } + + /** + * @param cause + */ + public ConflictException( + Throwable cause ) + { + super( cause ); + // TODO Auto-generated constructor stub + } + + /** + * @param message + * @param cause + */ + public ConflictException( + String message, + Throwable cause ) + { + super( message, cause ); + // TODO Auto-generated constructor stub + } + +} Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java?rev=702243&r1=702242&r2=702243&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java (original) +++ maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java Mon Oct 6 12:50:22 2008 @@ -52,38 +52,38 @@ public void testNoFilter() throws VersionException { - assertTrue( a1.vetDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); - assertTrue( a1.vetDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); - assertTrue( a1.vetDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); + assertTrue( a1.allowDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); + assertTrue( a1.allowDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); + assertTrue( a1.allowDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); } public void testInclusionsFilter() throws VersionException { - assertTrue( a2.vetDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); - assertFalse( a2.vetDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); - assertTrue( a2.vetDependency( new ArtifactBasicMetadata("b:b:2.0.1") ) ); - assertFalse( a2.vetDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); + assertTrue( a2.allowDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); + assertFalse( a2.allowDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); + assertTrue( a2.allowDependency( new ArtifactBasicMetadata("b:b:2.0.1") ) ); + assertFalse( a2.allowDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); } public void testExclusionsFilter() throws VersionException { - assertTrue( a3.vetDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); - assertTrue( a3.vetDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); - assertFalse( a3.vetDependency( new ArtifactBasicMetadata("b:b:2.0.1") ) ); - assertFalse( a3.vetDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); + assertTrue( a3.allowDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); + assertTrue( a3.allowDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); + assertFalse( a3.allowDependency( new ArtifactBasicMetadata("b:b:2.0.1") ) ); + assertFalse( a3.allowDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); } public void testInclusionsExclusionsFilter() throws VersionException { - assertTrue( a4.vetDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); - assertFalse( a4.vetDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); - assertTrue( a4.vetDependency( new ArtifactBasicMetadata("b:b:2.0.0") ) ); - assertFalse( a4.vetDependency( new ArtifactBasicMetadata("b:b:2.0.1") ) ); - assertFalse( a4.vetDependency( new ArtifactBasicMetadata("b:b:3.0.1") ) ); - assertFalse( a4.vetDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); + assertTrue( a4.allowDependency( new ArtifactBasicMetadata("a:a:2.0.0") ) ); + assertFalse( a4.allowDependency( new ArtifactBasicMetadata("b:b:1.0.0") ) ); + assertTrue( a4.allowDependency( new ArtifactBasicMetadata("b:b:2.0.0") ) ); + assertFalse( a4.allowDependency( new ArtifactBasicMetadata("b:b:2.0.1") ) ); + assertFalse( a4.allowDependency( new ArtifactBasicMetadata("b:b:3.0.1") ) ); + assertFalse( a4.allowDependency( new ArtifactBasicMetadata("c:c:1.0.0") ) ); } } Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/pom.xml?rev=702243&r1=702242&r2=702243&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/pom.xml (original) +++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/pom.xml Mon Oct 6 12:50:22 2008 @@ -14,7 +14,7 @@ <sat4j.version>2.0.0</sat4j.version> <commons.digester.version>1.8</commons.digester.version> - <mercury.version>1.0.0-alpha-1</mercury.version> + <mercury.version>1.0.0-alpha-2-SNAPSHOT</mercury.version> </properties> Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=702243&r1=702242&r2=702243&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original) +++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Mon Oct 6 12:50:22 2008 @@ -10,6 +10,7 @@ import org.apache.maven.mercury.artifact.ArtifactMetadata; import org.apache.maven.mercury.artifact.ArtifactScopeEnum; import org.apache.maven.mercury.artifact.api.ArtifactListProcessor; +import org.apache.maven.mercury.artifact.version.VersionException; import org.apache.maven.mercury.builder.api.DependencyProcessor; import org.apache.maven.mercury.metadata.sat.DefaultSatSolver; import org.apache.maven.mercury.metadata.sat.SatException; @@ -17,6 +18,8 @@ import org.apache.maven.mercury.repository.api.Repository; import org.apache.maven.mercury.repository.api.RepositoryException; import org.apache.maven.mercury.repository.api.VirtualRepositoryReader; +import org.codehaus.plexus.lang.DefaultLanguage; +import org.codehaus.plexus.lang.Language; /** * This is the new entry point into Artifact resolution process. @@ -27,7 +30,7 @@ */ public class DependencyTreeBuilder { -// private MetadataSource _mdSource; + Language _lang = new DefaultLanguage(DependencyTreeBuilder.class); private Set<MetadataTreeArtifactFilter> _filters; private List<Comparator<MetadataTreeNode>> _comparators; @@ -119,7 +122,7 @@ mr = _reader.readDependencies( nodeMD ); if( mr == null ) - throw new MetadataTreeException( "no result found for " + nodeMD ); + throw new MetadataTreeException( _lang.getMessage( "artifact.md.not.found", nodeMD.toString() ) ); MetadataTreeNode node = new MetadataTreeNode( mr, parent, nodeQuery ); @@ -150,6 +153,9 @@ if( veto( ver, _filters) ) continue; + if( vetoInclusionsExclusions(node, ver) ) + continue; + MetadataTreeNode kid = createNode( ver, node, md ); node.addChild( kid ); @@ -172,6 +178,10 @@ { throw new MetadataTreeException( e ); } + catch( VersionException e ) + { + throw new MetadataTreeException( e ); + } } //----------------------------------------------------- private void checkForCircularDependency( ArtifactBasicMetadata md, MetadataTreeNode parent ) @@ -213,6 +223,19 @@ return false; } //----------------------------------------------------- + private boolean vetoInclusionsExclusions( MetadataTreeNode node, ArtifactBasicMetadata ver ) + throws VersionException + { + for( MetadataTreeNode n = node; n != null; n = n.getParent() ) + { + ArtifactMetadata md = n.getMd(); + + if( md.allowDependency( ver ) ) + return false; + } + return true; + } + //----------------------------------------------------- public List<ArtifactMetadata> resolveConflicts( ArtifactScopeEnum scope ) throws MetadataTreeException { Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/pom.xml?rev=702243&r1=702242&r2=702243&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/pom.xml (original) +++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/pom.xml Mon Oct 6 12:50:22 2008 @@ -58,24 +58,26 @@ <dependency> <groupId>org.apache.maven.mercury</groupId> <artifactId>mercury-artifact</artifactId> - <version>1.0.0-alpha-2-SNAPSHOT</version> + <version>${project.version}</version> </dependency> - <!-- for some reason transitive does not work - have to copy deps from mercury-util --> + + <!-- for some reason transitive does not work - have to copy deps from mercury-util --> <dependency> <groupId>org.apache.maven.mercury</groupId> <artifactId>mercury-util</artifactId> - <version>1.0.0-alpha-2-SNAPSHOT</version> + <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.maven.mercury</groupId> <artifactId>mercury-crypto-api</artifactId> - <version>1.0.0-alpha-2-SNAPSHOT</version> + <version>${project.version}</version> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.1</version> </dependency> + </dependencies> </project> \ No newline at end of file Added: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java?rev=702243&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java (added) +++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java Mon Oct 6 12:50:22 2008 @@ -0,0 +1,34 @@ +package org.apache.maven.mercury.util; + +import java.util.Collection; + +/** + * general utility helpers + * + * @author Oleg Gusakov + * @version $Id$ + * + */ +public class Util +{ + @SuppressWarnings("unchecked") + public boolean isEmpty( Collection o ) + { + return o == null || o.isEmpty(); + } + + public boolean isEmpty( String o ) + { + return o == null || o.length() < 1; + } + + public boolean isEmpty( Object [] o ) + { + return o == null || o.length < 1; + } + + public boolean isEmpty( Object o ) + { + return o == null; + } +} Modified: maven/sandbox/trunk/mercury/wagon-mercury/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/wagon-mercury/pom.xml?rev=702243&r1=702242&r2=702243&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/wagon-mercury/pom.xml (original) +++ maven/sandbox/trunk/mercury/wagon-mercury/pom.xml Mon Oct 6 12:50:22 2008 @@ -10,7 +10,7 @@ <version>1.0.0-alpha-2-SNAPSHOT</version> <properties> - <mercury.version>1.0.0-alpha-1</mercury.version> + <mercury.version>1.0.0-alpha-2-SNAPSHOT</mercury.version> <plexus.appbooter.version>1.4</plexus.appbooter.version> <plexus.container.version>1.0-alpha-47</plexus.container.version> <plexus.utils.version>1.5.1</plexus.utils.version>