Author: ogusakov Date: Wed Aug 20 19:20:51 2008 New Revision: 687538 URL: http://svn.apache.org/viewvc?rev=687538&view=rev Log: local repo fully functioning, both reader and writer. LATEST, RELEASE, SNAPSHOT, SNAPSHOT_TS implemented by http://docs.codehaus.org/display/MAVEN/Mercury+Repository+Abstraction#MercuryRepositoryAbstraction-Artifactversionsspecialtreatment
Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar (with props) maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-20080807.234713-11.jar (with props) maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-SNAPSHOT.jar (with props) Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java 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=687538&r1=687537&r2=687538&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 Wed Aug 20 19:20:51 2008 @@ -199,20 +199,23 @@ { return version; } - public void setVersion( - String version ) + + public void setVersion( String version ) { this.version = version; } + public String getClassifier() { return classifier; } + public void setClassifier( String classifier ) { this.classifier = classifier; } + public String getType() { return type; Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java (original) +++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java Wed Aug 20 19:20:51 2008 @@ -207,7 +207,13 @@ if( qualifier == null ) base = version; else - base = version.substring( 0, version.indexOf( qualifier )-1 ); + { + int ind = version.indexOf( qualifier ); + if( ind == 0 ) + base = qualifier; + else + base = version.substring( 0, version.indexOf( qualifier )-1 ); + } } } Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java (original) +++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java Wed Aug 20 19:20:51 2008 @@ -9,6 +9,7 @@ import java.util.Date; import java.util.List; +import org.apache.maven.mercury.artifact.Artifact; import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader; import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Writer; @@ -196,4 +197,24 @@ return fmt.format( date ); } + public static Snapshot createSnapshot( String version ) + { + Snapshot sn = new Snapshot(); + + if( version == null || version.length() < 3 ) + return sn; + + String utc = MetadataBuilder.getUTCTimestamp(); + sn.setTimestamp( utc ); + + if( version.endsWith( Artifact.SNAPSHOT_VERSION )) + return sn; + + String sbn = version.substring( version.lastIndexOf( '-' )+1 ); + int bn = Integer.parseInt( sbn ); + sn.setBuildNumber( bn ); + + return sn; + } + } Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java Wed Aug 20 19:20:51 2008 @@ -7,10 +7,12 @@ import java.util.List; import java.util.Map; +import org.apache.maven.mercury.artifact.Artifact; import org.apache.maven.mercury.artifact.ArtifactBasicMetadata; import org.apache.maven.mercury.artifact.ArtifactMetadata; import org.apache.maven.mercury.artifact.DefaultArtifact; import org.apache.maven.mercury.artifact.Quality; +import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion; import org.apache.maven.mercury.artifact.version.VersionException; import org.apache.maven.mercury.artifact.version.VersionRange; import org.apache.maven.mercury.builder.api.MetadataProcessingException; @@ -76,8 +78,117 @@ for( ArtifactBasicMetadata bmd : query ) { DefaultArtifact da = bmd instanceof DefaultArtifact ? (DefaultArtifact)bmd : new DefaultArtifact( bmd ); + + String version = bmd.getVersion(); + DefaultArtifactVersion dav = new DefaultArtifactVersion( version ); + Quality vq = dav.getQuality(); + + String relGaPath = bmd.getGroupId().replace( '.', '/' ) + '/' + bmd.getArtifactId(); + File gaDir = new File( _repoDir, relGaPath ); + + if( !gaDir.exists() ) + { + res.add( new RepositoryException( _lang.getMessage( "ga.not.found", bmd.toString(), relGaPath ) ) ); + continue; + } + + + File binary = null; + + // merge RELEASE and LATEST, should be no difference + if( Artifact.RELEASE_VERSION.equals( version ) + || + Artifact.LATEST_VERSION.equals( version ) + ) + { + boolean noSnapshots = Artifact.RELEASE_VERSION.equals( version ); + version = null; + DefaultArtifactVersion tempDav = null; + DefaultArtifactVersion tempDav2 = null; - File binary = new File( _repoDir, relPathOf( bmd, null, null) ); + File [] files = gaDir.listFiles(); + + // find latest + for( File vf : files ) + { + if( vf.isFile() ) + continue; + + String vn = vf.getName(); + + // RELEASE? + if( noSnapshots && vn.endsWith( Artifact.SNAPSHOT_VERSION )) + continue; + + if( version == null ) + { + version = vn; + tempDav = new DefaultArtifactVersion( vn ); + continue; + } + + tempDav2 = new DefaultArtifactVersion( vn ); + if( tempDav2.compareTo( tempDav ) > 0 ) + { + version = vn; + tempDav = tempDav2; + } + + } + + if( version == null ) + { + res.add( new RepositoryException( _lang.getMessage( "gav.not.found", bmd.toString(), relGaPath ) ) ); + continue; + } + + // LATEST is a SNAPSHOT :( + if( version.endsWith( Artifact.SNAPSHOT_VERSION ) ) + { + binary = findLatestSnapshot( new File( gaDir, version ), da, res ); + + if( binary == null ) + continue; + } + else + { + binary = new File( gaDir, version+'/'+bmd.getArtifactId()+'-'+version+( bmd.hasClassifier() ? '-'+bmd.getClassifier() : "" )+'.'+bmd.getType() ); + da.setVersion( version ); + } + } + // regular snapshot requested + else if( version.endsWith( Artifact.SNAPSHOT_VERSION ) ) + { + File gavDir = new File( gaDir, version ); + if( !gavDir.exists() ) + { + res.add( new RepositoryException( _lang.getMessage( "gavdir.not.found", bmd.toString(), gavDir.getAbsolutePath() ) ) ); + continue; + } + + binary = findLatestSnapshot( gavDir, da, res ); + + if( binary == null ) + continue; + + } + // time stamped snapshot requested + else if( vq.equals( Quality.SNAPSHOT_TS_QUALITY )) + { + binary = new File( gaDir, dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION + + '/' + bmd.getArtifactId() + '-' + bmd.getVersion() + ( bmd.hasClassifier() ? '-'+bmd.getClassifier() : "" ) + + '.' + bmd.getType() + ); + } + else + { + binary = new File( gaDir, version + + '/' + bmd.getArtifactId() + '-' + bmd.getVersion() + ( bmd.hasClassifier() ? '-'+bmd.getClassifier() : "" ) + + '.' + bmd.getType() + ); + } + + // binary calculated if( ! binary.exists() ) { res.add( new RepositoryException( _lang.getMessage( "binary.not.found", bmd.toString(), binary.getAbsolutePath() ) ) ); @@ -86,24 +197,27 @@ da.setFile( binary ); - File pomFile = new File( _repoDir, relPathOf( bmd, null, "pom") ); - if( pomFile.exists() ) + try // reading pom if one exists { - try + if( "pom".equals( bmd.getType() ) ) { - da.setPomBlob( FileUtil.readRawData( pomFile ) ); + da.setPomBlob( FileUtil.readRawData( binary ) ); } - catch( Exception e ) + else { - throw new RepositoryException( e ); + File pomFile = new File( _repoDir, relPathOf( da, null, "pom", dav) ); + if( pomFile.exists() ) + da.setPomBlob( FileUtil.readRawData( pomFile ) ); + else + _log.warn( _lang.getMessage( "pom.not.found", bmd.toString()) ); } + + res.add( da ); } - else + catch( IOException e ) { - _log.warn( _lang.getMessage( "pom.not.found", bmd.toString()) ); + throw new RepositoryException( e ); } - - res.add( da ); } return res; } @@ -158,6 +272,75 @@ return ror; } //--------------------------------------------------------------------------------------------------------------- + private static File findLatestSnapshot( File gavDir, DefaultArtifact da, RepositoryOperationResult<DefaultArtifact> res ) + { + + String version = gavDir.getName(); + DefaultArtifactVersion dav = new DefaultArtifactVersion( version ); + + File binary = new File( gavDir, da.getArtifactId()+'-'+dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION + +( da.hasClassifier() ? '-'+da.getClassifier() : "" ) + +'.'+da.getType() + ); + + // no real SNAPSHOT file, let's look for one + if( binary.exists() ) + { + da.setVersion( dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION ); + return binary; + } + + + File [] files = gavDir.listFiles(); + version = null; + DefaultArtifactVersion tempDav = null; + DefaultArtifactVersion tempDav2 = null; + + int aLen = da.getArtifactId().length(); + + // find latest + for( File vf : files ) + { + if( vf.isFile() ) + continue; + + String vn = vf.getName().substring( aLen+1 ); + + // no snapshots + if( vn.endsWith( Artifact.SNAPSHOT_VERSION )) + continue; + + if( version == null ) + { + version = vn; + tempDav = new DefaultArtifactVersion( vn ); + continue; + } + + tempDav2 = new DefaultArtifactVersion( vn ); + if( tempDav2.compareTo( tempDav ) > 0 ) + { + version = vn; + tempDav = tempDav2; + } + + } + + if( version == null ) + { + res.add( new RepositoryException( _lang.getMessage( "snapshot.not.found", da.toString(), gavDir.getAbsolutePath() ) ) ); + return null; + } + + binary = new File( gavDir, da.getArtifactId()+'-'+dav.getBase()+'-'+version + + ( da.hasClassifier() ? '-'+da.getClassifier() : "" ) + + '.'+da.getType() + ); + da.setVersion( version ); + + return binary; + } + //--------------------------------------------------------------------------------------------------------------- /** * direct disk search, no redirects, first attempt */ @@ -224,14 +407,21 @@ public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type ) throws MetadataProcessingException { - return readRawData( relPathOf(bmd, classifier, type) ); + return readRawData( relPathOf(bmd, classifier, type, null ) ); } //--------------------------------------------------------------------------------------------------------------- - private static String relPathOf( ArtifactBasicMetadata bmd, String classifier, String type ) + private static String relPathOf( ArtifactBasicMetadata bmd, String classifier, String type, DefaultArtifactVersion inDav ) { - String bmdPath = bmd.getGroupId().replace( '.', '/' )+"/"+bmd.getArtifactId()+"/"+bmd.getVersion(); + DefaultArtifactVersion dav = inDav; + if( inDav == null ) + dav = new DefaultArtifactVersion( bmd.getVersion() ); + Quality aq = dav.getQuality(); + boolean isSnapshot = aq.equals( Quality.SNAPSHOT_QUALITY ) || aq.equals( Quality.SNAPSHOT_TS_QUALITY ); + + String bmdPath = bmd.getGroupId().replace( '.', '/' )+'/'+bmd.getArtifactId() + +'/' + ( isSnapshot ? dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION : bmd.getVersion() ); - String path = bmdPath+"/"+bmd.getBaseName(classifier)+'.' + (type == null ? bmd.getType() : type ); + String path = bmdPath+'/'+bmd.getBaseName(classifier)+'.' + (type == null ? bmd.getType() : type ); return path ; } Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java Wed Aug 20 19:20:51 2008 @@ -12,6 +12,9 @@ import java.util.Set; import org.apache.maven.mercury.artifact.Artifact; +import org.apache.maven.mercury.artifact.Quality; +import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion; +import org.apache.maven.mercury.artifact.version.VersionQuery; import org.apache.maven.mercury.crypto.api.StreamObserver; import org.apache.maven.mercury.crypto.api.StreamObserverException; import org.apache.maven.mercury.crypto.api.StreamVerifier; @@ -26,6 +29,10 @@ import org.apache.maven.mercury.repository.metadata.Metadata; import org.apache.maven.mercury.repository.metadata.MetadataBuilder; import org.apache.maven.mercury.repository.metadata.MetadataException; +import org.apache.maven.mercury.repository.metadata.MetadataOperation; +import org.apache.maven.mercury.repository.metadata.SetSnapshotOperation; +import org.apache.maven.mercury.repository.metadata.Snapshot; +import org.apache.maven.mercury.repository.metadata.SnapshotOperand; import org.apache.maven.mercury.repository.metadata.StringOperand; import org.apache.maven.mercury.transport.api.Server; import org.apache.maven.mercury.util.FileUtil; @@ -128,10 +135,12 @@ throw new RepositoryException( e ); } } - + DefaultArtifactVersion dav = new DefaultArtifactVersion( artifact.getVersion() ); + Quality aq = dav.getQuality(); + boolean isSnapshot = aq.equals( Quality.SNAPSHOT_QUALITY ) || aq.equals( Quality.SNAPSHOT_TS_QUALITY ); String relGroupPath = artifact.getGroupId().replace( '.', '/' )+"/"+artifact.getArtifactId(); - String relVersionPath = relGroupPath + '/' + artifact.getVersion(); + String relVersionPath = relGroupPath + '/' + (isSnapshot ? (dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION) : artifact.getVersion() ); try { @@ -149,7 +158,11 @@ } } - + + // create folders + File gav = new File( _repoDir, relVersionPath ); + gav.mkdirs(); + String fName = _repoDir.getAbsolutePath()+'/'+relVersionPath+'/'+artifact.getBaseName()+'.'+artifact.getType(); if( !isPom ) @@ -160,26 +173,52 @@ // if classier - nothing else to do :) if( artifact.hasClassifier() ) return; + + // GA metadata + File mdFile = new File( _repoDir, relGroupPath+'/'+"maven-metadata-local.xml"); + Metadata localMd = null; + + if( mdFile.exists() ) + localMd = MetadataBuilder.read( new FileInputStream(mdFile) ); + else + { + localMd = new Metadata(); + localMd.setGroupId( artifact.getGroupId() ); + localMd.setArtifactId( artifact.getArtifactId() ); + } + + MetadataOperation mdOp = null; + + if( isSnapshot ) + { + Snapshot sn = MetadataBuilder.createSnapshot( artifact.getVersion() ); + sn.setLocalCopy( true ); + mdOp = new SetSnapshotOperation( new SnapshotOperand(sn) ); + } + else + mdOp = new AddVersionOperation( new StringOperand(artifact.getVersion()) ); + + byte [] resBytes = MetadataBuilder.changeMetadata( localMd, mdOp ); + + FileUtil.writeRawData( mdFile, resBytes ); - File groupMd = new File( _repoDir, relGroupPath+'/'+"maven-metadata.xml"); - Metadata gmd = null; + // now - GAV metadata + mdFile = new File( _repoDir, relVersionPath+'/'+"maven-metadata-local.xml"); + localMd = null; - if( groupMd.exists() ) - gmd = MetadataBuilder.read( new FileInputStream(groupMd) ); + if( mdFile.exists() ) + localMd = MetadataBuilder.read( new FileInputStream(mdFile) ); else { - gmd = new Metadata(); - gmd.setGroupId( artifact.getGroupId() ); - gmd.setArtifactId( artifact.getArtifactId() ); - gmd.setVersion( artifact.getVersion() ); + localMd = new Metadata(); + localMd.setGroupId( artifact.getGroupId() ); + localMd.setArtifactId( artifact.getArtifactId() ); + localMd.setVersion( artifact.getVersion() ); } - byte [] resBytes = MetadataBuilder.changeMetadata( - gmd - , new AddVersionOperation( new StringOperand(artifact.getVersion()) ) - ); + resBytes = MetadataBuilder.changeMetadata( localMd, mdOp ); - FileUtil.writeRawData( groupMd, resBytes ); + FileUtil.writeRawData( mdFile, resBytes ); } if( hasPomBlob ) Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties Wed Aug 20 19:20:51 2008 @@ -1,6 +1,10 @@ bad.repository.type=repository should implement LocalRepository, instead got {0} empty.query=received empty query - {0} -binary.not.found=Artifact {0} binary at {1} not found +binary.not.found=Artifact {0} binary at not found {1} +ga.not.found=Artifact {0} version group not found at {1} +gav.not.found=No artifact version for {0} found in {1} +snapshot.not.found=No snapshot version for {0} found in {1} +gavdir.not.found=No directory {1} for artifact {0} pom.not.found=Artifact {0} - binary exists, but POM not found in the repository artifact.no.stream=Cannot find either input stream or file, associated with artifact {0} pom.artifact.no.stream=Cannot find either pom blob, input stream or file, associated with artifact {0} \ No newline at end of file Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java Wed Aug 20 19:20:51 2008 @@ -139,23 +139,121 @@ assertNotNull( da.getFile() ); assertTrue( da.getFile().exists() ); assertNotNull( da.getPomBlob() ); + } + //------------------------------------------------------------------------------ + public void testReadSnapshot() + throws IllegalArgumentException, RepositoryException + { + bmd = new ArtifactBasicMetadata("a:a:5-SNAPSHOT"); + query.add( bmd ); + + RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); + + assertNotNull( ror ); + assertFalse( ror.hasExceptions() ); + assertTrue( ror.hasResults() ); + + List<DefaultArtifact> res = ror.getResults(); + + assertNotNull( res ); + assertEquals( 1, res.size() ); + + DefaultArtifact da = res.get( 0 ); + + assertNotNull( da ); + assertNotNull( da.getFile() ); + assertTrue( da.getFile().exists() ); + assertEquals( 159630, da.getFile().length() ); + assertNotNull( da.getPomBlob() ); -System.out.println(da.getPomBlob()); +System.out.println( new String(da.getPomBlob()) ); } //------------------------------------------------------------------------------ - public void testReadLatest() + public void testReadSnapshotTS() + throws IllegalArgumentException, RepositoryException { - // TODO + bmd = new ArtifactBasicMetadata("a:a:5-20080807.234713-11"); + query.add( bmd ); + + RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); + + assertNotNull( ror ); + assertFalse( ror.hasExceptions() ); + assertTrue( ror.hasResults() ); + + List<DefaultArtifact> res = ror.getResults(); + + assertNotNull( res ); + assertEquals( 1, res.size() ); + + DefaultArtifact da = res.get( 0 ); + + assertNotNull( da ); + assertNotNull( da.getFile() ); + assertTrue( da.getFile().exists() ); + assertEquals( 14800, da.getFile().length() ); + assertNotNull( da.getPomBlob() ); + +System.out.println( new String(da.getPomBlob()) ); } //------------------------------------------------------------------------------ - public void testReadSnapshot() + public void testReadLatest() + throws IllegalArgumentException, RepositoryException { - // TODO + bmd = new ArtifactBasicMetadata("a:a:LATEST"); + query.add( bmd ); + + RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); + + assertNotNull( ror ); + assertFalse( ror.hasExceptions() ); + assertTrue( ror.hasResults() ); + + List<DefaultArtifact> res = ror.getResults(); + + assertNotNull( res ); + assertEquals( 1, res.size() ); + + DefaultArtifact da = res.get( 0 ); + + assertNotNull( da ); + assertEquals( "5-SNAPSHOT", da.getVersion() ); + + assertNotNull( da.getFile() ); + assertTrue( da.getFile().exists() ); + assertEquals( 159630, da.getFile().length() ); + assertNotNull( da.getPomBlob() ); + } //------------------------------------------------------------------------------ - public void testReadSnapshotTimeStamp() + public void testReadRelease() + throws IllegalArgumentException, RepositoryException { - // TODO + bmd = new ArtifactBasicMetadata("a:a:RELEASE"); + query.add( bmd ); + + RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); + + assertNotNull( ror ); + assertFalse( ror.hasExceptions() ); + assertTrue( ror.hasResults() ); + + List<DefaultArtifact> res = ror.getResults(); + + assertNotNull( res ); + assertEquals( 1, res.size() ); + + DefaultArtifact da = res.get( 0 ); + + assertNotNull( da ); + assertEquals( "4", da.getVersion() ); + + assertNotNull( da.getFile() ); + assertTrue( da.getFile().exists() ); + assertEquals( 14800, da.getFile().length() ); + assertNotNull( da.getPomBlob() ); + +System.out.println( new String(da.getPomBlob()) ); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java?rev=687538&r1=687537&r2=687538&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java Wed Aug 20 19:20:51 2008 @@ -64,6 +64,7 @@ query = new ArrayList<ArtifactBasicMetadata>(); server = new Server( "test", repoFile.toURL() ); + // verifiers factories = new HashSet<StreamVerifierFactory>(); factories.add( new PgpStreamVerifierFactory( @@ -79,10 +80,8 @@ repo = new LocalRepositoryM2( server ); reader = repo.getReader( mdProcessor ); writer = repo.getWriter(); - - } - + public void testWriteArtifact() throws Exception { @@ -100,10 +99,47 @@ File ap = new File( repo.getDirectory(), "/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.pom"); assertTrue( ap.exists() ); - assertEquals( 7785, ap.length() ); + assertEquals( 7785, ap.length() ); + } + + public void testWriteSnapshotAsTS() + throws Exception + { + Set<Artifact> set = new HashSet<Artifact>(3); + DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9-20080805.215925-8") ); + da.setPomBlob( FileUtil.readRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.pom" ) ) ); + da.setStream( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ) ); + set.add( da ); + + writer.writeArtifact( set ); + + File af = new File( repo.getDirectory(), "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080805.215925-8.jar"); + assertTrue( af.exists() ); + assertEquals( 159630, af.length() ); + + File ap = new File( repo.getDirectory(), "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080805.215925-8.pom"); + assertTrue( ap.exists() ); + assertEquals( 7785, ap.length() ); + } + + public void testWriteSnapshot() + throws Exception + { + Set<Artifact> set = new HashSet<Artifact>(3); + DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9-SNAPSHOT") ); + da.setPomBlob( FileUtil.readRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.pom" ) ) ); + da.setStream( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ) ); + set.add( da ); + + writer.writeArtifact( set ); + File af = new File( repo.getDirectory(), "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-SNAPSHOT.jar"); + assertTrue( af.exists() ); + assertEquals( 159630, af.length() ); + File ap = new File( repo.getDirectory(), "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-SNAPSHOT.pom"); + assertTrue( ap.exists() ); + assertEquals( 7785, ap.length() ); } - } Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar?rev=687538&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-20080807.234713-11.jar URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-20080807.234713-11.jar?rev=687538&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-20080807.234713-11.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-SNAPSHOT.jar URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-SNAPSHOT.jar?rev=687538&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/5-SNAPSHOT/a-5-SNAPSHOT.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream