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