You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2009/02/10 19:20:27 UTC
svn commit: r743040 - in
/maven/mercury/trunk/mercury-md/mercury-md-shared/src:
main/java/org/apache/maven/mercury/repository/metadata/
test/java/org/apache/maven/mercury/repository/metadata/
Author: ogusakov
Date: Tue Feb 10 18:20:26 2009
New Revision: 743040
URL: http://svn.apache.org/viewvc?rev=743040&view=rev
Log:
[MERCURY-93] applied the provided metadata patch, fixing "latest" and "release" tags
Modified:
maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
Modified: maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java?rev=743040&r1=743039&r2=743040&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java Tue Feb 10 18:20:26 2009
@@ -18,8 +18,10 @@
*/
package org.apache.maven.mercury.repository.metadata;
+import java.util.Collections;
import java.util.List;
+import org.apache.maven.mercury.artifact.version.VersionComparator;
import org.apache.maven.mercury.util.TimeUtil;
import org.codehaus.plexus.lang.DefaultLanguage;
import org.codehaus.plexus.lang.Language;
@@ -94,8 +96,35 @@
}
vs.addVersion( version );
+
+ List<String> versions = vs.getVersions();
+
+ Collections.sort( versions, new VersionComparator() );
+
+ vs.setLatest( getLatestVersion(versions) );
+
+ vs.setRelease( getReleaseVersion(versions) );
+
vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
return true;
}
+
+ private String getLatestVersion( List<String> orderedVersions )
+ {
+ return orderedVersions.get( orderedVersions.size() - 1 );
+ }
+
+ private String getReleaseVersion( List<String> orderedVersions )
+ {
+ for (int i = orderedVersions.size() - 1; i >= 0; i--)
+ {
+ if (!orderedVersions.get(i).endsWith("SNAPSHOT"))
+ {
+ return orderedVersions.get(i);
+ }
+ }
+
+ return "";
+ }
}
Modified: maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java?rev=743040&r1=743039&r2=743040&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java Tue Feb 10 18:20:26 2009
@@ -34,6 +34,8 @@
private static final Language LANG = new DefaultLanguage( SetSnapshotOperation.class );
private Snapshot snapshot;
+
+ private String snapshotPomName;
/**
* @throws MetadataException
@@ -43,17 +45,30 @@
{
setOperand( data );
}
+
+ public SetSnapshotOperation( StringOperand data )
+ throws MetadataException
+ {
+ setOperand( data );
+ }
public void setOperand( Object data )
throws MetadataException
{
- if ( data == null || !( data instanceof SnapshotOperand ) )
+ if ( data != null && data instanceof SnapshotOperand )
+ {
+ snapshot = ( (SnapshotOperand) data ).getOperand();
+ }
+ else if ( data != null && data instanceof StringOperand )
+ {
+ snapshotPomName = ( (StringOperand) data ).getOperand();
+ }
+ else
{
throw new MetadataException( LANG.getMessage( "bad.operand", "SnapshotOperand", data == null ? "null"
- : data.getClass().getName() ) );
+ : data.getClass().getName() ) );
}
- snapshot = ( (SnapshotOperand) data ).getOperand();
}
/**
@@ -70,19 +85,108 @@
{
return false;
}
-
+
Versioning vs = metadata.getVersioning();
if ( vs == null )
{
vs = new Versioning();
+
metadata.setVersioning( vs );
}
-
- vs.setSnapshot( snapshot );
- vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
-
- return true;
+
+ if ( snapshotPomName != null )
+ {
+ return updateSnapshot( snapshotPomName, metadata );
+ }
+ else
+ {
+ return updateSnapshot( snapshot, vs );
+ }
+
+ }
+
+ private boolean updateSnapshot( String snapshotVersion, Metadata metadata )
+ {
+ Snapshot snapshot = buildSnapshot( snapshotVersion, metadata );
+
+ Snapshot oldSnapshot = metadata.getVersioning().getSnapshot();
+
+ if ( needUpdateSnapshot( oldSnapshot, snapshot) )
+ {
+ return updateSnapshot( snapshot, metadata.getVersioning() );
+ }
+
+ return false;
+
+
+ }
+
+ private boolean updateSnapshot( Snapshot snapshot, Versioning vs )
+ {
+ vs.setSnapshot( snapshot );
+
+ vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
+
+ return true;
+ }
+
+ private boolean needUpdateSnapshot( Snapshot oldSnapshot, Snapshot newSnapshot )
+ {
+ if ( newSnapshot == null )
+ {
+ return false;
+ }
+
+ if ( oldSnapshot == null )
+ {
+ return true;
+ }
+
+ if ( oldSnapshot.getBuildNumber() < newSnapshot.getBuildNumber() )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ private Snapshot buildSnapshot( String pomName, Metadata md )
+ {
+ // skip files like groupId-artifactId-versionSNAPSHOT.pom
+ if ( pomName.endsWith( "SNAPSHOT.pom" ) )
+ {
+ return null;
+ }
+
+ Snapshot result = new Snapshot();
+
+ int lastHyphenPos = pomName.lastIndexOf( '-' );
+
+ try
+ {
+ int buildNumber = Integer.parseInt( pomName.substring(
+ lastHyphenPos + 1,
+ pomName.length() - 4 ) );
+
+ String timestamp = pomName.substring( ( md.getArtifactId() + '-' + md.getVersion() + '-' )
+ .length()
+ - "-SNAPSHOT".length(), lastHyphenPos );
+
+ result.setLocalCopy( false );
+
+ result.setBuildNumber( buildNumber );
+
+ result.setTimestamp( timestamp );
+
+ return result;
+ }
+ catch ( Exception e )
+ {
+ // skip any exception because of illegal version numbers
+ return null;
+ }
+
}
}
Modified: maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java?rev=743040&r1=743039&r2=743040&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java Tue Feb 10 18:20:26 2009
@@ -27,6 +27,7 @@
import java.util.ArrayList;
import java.util.List;
+import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.maven.mercury.util.FileUtil;
@@ -60,6 +61,26 @@
throws Exception
{
}
+
+ protected Metadata getMetadata(File file)
+ throws Exception
+ {
+ byte[] targetBytes = FileUtil.readRawData(file);
+
+ return MetadataBuilder.getMetadata(targetBytes);
+ }
+
+ protected Metadata applyOpsAndGetMetadata(Metadata metadata,
+ List<MetadataOperation> ops, File file)
+ throws Exception
+ {
+ byte[] resBytes = MetadataBuilder.changeMetadata(metadata, ops);
+
+ FileUtil.writeRawData(file, resBytes);
+
+ return MetadataBuilder.read(new FileInputStream(file));
+ }
+
//-------------------------------------------------------------------------
public void testReadGroupMd()
throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
@@ -184,21 +205,76 @@
assertTrue( versions.contains("1.0.0") );
assertTrue( versions.contains("2.0.0") );
}
+
+ public void testAddVersionOperationOrdered() throws Exception
+ {
+ File mdFileBefore = new File(testBase, "group-maven-metadata.xml");
+ Metadata mdBefore = getMetadata( mdFileBefore );
+
+ List<MetadataOperation> ops = new ArrayList<MetadataOperation>();
+ ops.add(new AddVersionOperation( new StringOperand("1.3.0-SNAPSHOT") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.2.0-SNAPSHOT") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.2.0.5-SNAPSHOT") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.0.1") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.0.3-SNAPSHOT") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.1-M1") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.0.0-alpha-5") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.2.0") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.2.0-beta-1") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.0.0.1") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.0.0-beta-3") ));
+ ops.add(new AddVersionOperation( new StringOperand("4.1.0") ));
+ ops.add(new AddVersionOperation( new StringOperand("1.0.0-beta-6-SNAPSHOT") ));
+ ops.add(new AddVersionOperation( new StringOperand("5.0-SNAPSHOT") ));
+
+ List<String> orderedVersions = new ArrayList<String>();
+ orderedVersions.add( "1.0.0-alpha-5" );
+ orderedVersions.add( "1.0.0-beta-3" );
+ orderedVersions.add( "1.0.0-beta-6-SNAPSHOT" );
+ orderedVersions.add( "1" );
+ orderedVersions.add( "1.0.0.1" );
+ orderedVersions.add( "1.0.1" );
+ orderedVersions.add( "1.0.3-SNAPSHOT" );
+ orderedVersions.add( "1.1-M1" );
+ orderedVersions.add( "1.2.0-SNAPSHOT" );
+ orderedVersions.add( "1.2.0-beta-1" );
+ orderedVersions.add( "1.2.0" );
+ orderedVersions.add( "1.2.0.5-SNAPSHOT" );
+ orderedVersions.add( "1.3.0-SNAPSHOT" );
+ orderedVersions.add( "2" );
+ orderedVersions.add( "3" );
+ orderedVersions.add( "4" );
+ orderedVersions.add( "4.1.0" );
+ orderedVersions.add( "5.0-SNAPSHOT" );
+
+ File mdFileAfter = new File( testBase, "group-maven-metadata-write.xml");
+ Metadata mdAfter = applyOpsAndGetMetadata( mdBefore, ops, mdFileAfter );
+
+ Assert.assertEquals(orderedVersions, mdAfter.getVersioning().getVersions());
+ Assert.assertEquals("5.0-SNAPSHOT", mdAfter.getVersioning().getLatest());
+ Assert.assertEquals("4.1.0", mdAfter.getVersioning().getRelease());
+
+ }
+
//-------------------------------------------------------------------------
public void testAddVersionOperation()
- throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
+ throws Exception
{
- File groupMd = new File( testBase, "group-maven-metadata.xml");
- byte [] targetBytes = FileUtil.readRawData( groupMd );
-
- byte [] resBytes = MetadataBuilder.changeMetadata( targetBytes, new AddVersionOperation( new StringOperand("5") ) );
-
- File resFile = new File( testBase, "group-maven-metadata-write.xml");
-
- FileUtil.writeRawData( resFile, resBytes );
+ // prepare
+ File groupMd = new File( testBase, "group-maven-metadata.xml");
+
+ Metadata md = getMetadata(groupMd);
+
+ List<MetadataOperation> ops = new ArrayList<MetadataOperation>();
+
+ ops.add(new AddVersionOperation( new StringOperand("5")));
+
+ File resFile = new File( testBase, "group-maven-metadata-write.xml");
- Metadata mmd = MetadataBuilder.read( new FileInputStream(resFile) );
+ // do
+ Metadata mmd = applyOpsAndGetMetadata( md, ops, resFile);
+ // assert
assertNotNull( mmd );
assertEquals("a", mmd.getGroupId() );
assertEquals("a", mmd.getArtifactId() );
@@ -218,12 +294,11 @@
}
//-------------------------------------------------------------------------
public void testAddVersionTwiceOperation()
- throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
+ throws Exception
{
File groupMd = new File( testBase, "group-maven-metadata.xml");
- byte [] targetBytes = FileUtil.readRawData( groupMd );
- Metadata checkMd = MetadataBuilder.getMetadata( targetBytes );
+ Metadata checkMd = getMetadata(groupMd);
assertNotNull( checkMd );
assertEquals("a", checkMd.getGroupId() );
@@ -246,13 +321,10 @@
ops.add( new AddVersionOperation( new StringOperand("5") ) );
ops.add( new AddVersionOperation( new StringOperand("5") ) );
- byte [] resBytes = MetadataBuilder.changeMetadata( targetBytes, ops );
File resFile = new File( testBase, "group-maven-metadata-write.xml");
- FileUtil.writeRawData( resFile, resBytes );
-
- Metadata mmd = MetadataBuilder.read( new FileInputStream(resFile) );
+ Metadata mmd = applyOpsAndGetMetadata(checkMd, ops, resFile);
assertNotNull( mmd );
assertEquals("a", mmd.getGroupId() );
@@ -302,6 +374,29 @@
assertTrue( versions.contains("3") );
assertTrue( versions.contains("4") );
}
+
+ public void testSetSnapshotVersionOperation()
+ throws Exception
+ {
+ File mdFileBefore = new File(testBase, "group-maven-metadata.xml");
+ Metadata mdBefore = getMetadata( mdFileBefore );
+
+ mdBefore.setVersion("1.3.0-SNAPSHOT");
+
+ List<MetadataOperation> ops = new ArrayList<MetadataOperation>();
+ ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.041603-374.pom" ) ) );
+ ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.030701-373.pom" ) ) );
+ ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.090218-375.pom" ) ) );
+ ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.095716-376.pom" ) ) );
+
+ File mdFileAfter = new File( testBase, "group-maven-metadata-write.xml");
+ Metadata mdAfter = applyOpsAndGetMetadata( mdBefore, ops, mdFileAfter );
+
+ Assert.assertEquals("20090210.095716", mdAfter.getVersioning().getSnapshot().getTimestamp());
+ Assert.assertEquals(376, mdAfter.getVersioning().getSnapshot().getBuildNumber());
+ }
+
+
//-------------------------------------------------------------------------
public void testSetSnapshotOperation()
throws FileNotFoundException, IOException, XmlPullParserException, MetadataException