You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2007/09/13 04:20:49 UTC
svn commit: r575145 - in /maven/archiva/trunk/archiva-base:
archiva-common/src/main/java/org/apache/maven/archiva/common/utils/
archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/
archiva-repository-layer/src/test/java/...
Author: brett
Date: Wed Sep 12 19:20:48 2007
New Revision: 575145
URL: http://svn.apache.org/viewvc?rev=575145&view=rev
Log:
[MRM-463] fix merging of latest/release fields in metadata
Modified:
maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/MetadataToolsTest.java
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml
Modified: maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java?rev=575145&r1=575144&r2=575145&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java Wed Sep 12 19:20:48 2007
@@ -29,20 +29,20 @@
/**
* VersionComparator - compare the parts of two version strings.
- *
+ * <p/>
* Technique.
- *
- * * Split the version strings into parts by splitting on <code>"-._"</code> first, then breaking apart words from numbers.
- *
+ * <p/>
+ * * Split the version strings into parts by splitting on <code>"-._"</code> first, then breaking apart words from numbers.
+ * <p/>
* <code>
- * "1.0" = "1", "0"
- * "1.0-alpha-1" = "1", "0", "alpha", "1"
- * "2.0-rc2" = "2", "0", "rc", "2"
- * "1.3-m2" = "1", "3", "m", "3"
+ * "1.0" = "1", "0"
+ * "1.0-alpha-1" = "1", "0", "alpha", "1"
+ * "2.0-rc2" = "2", "0", "rc", "2"
+ * "1.3-m2" = "1", "3", "m", "3"
* </code>
- *
+ * <p/>
* compare each part individually, and when they do not match, perform the following test.
- *
+ * <p/>
* Numbers are calculated per normal comparison rules.
* Words that are part of the "special word list" will be treated as their index within that heirarchy.
* Words that cannot be identified as special, are treated using normal case-insensitive comparison rules.
@@ -51,15 +51,15 @@
* @version $Id$
*/
public class VersionComparator
- implements Comparator
+ implements Comparator<String>
{
- private static Comparator INSTANCE = new VersionComparator();
+ private static Comparator<String> INSTANCE = new VersionComparator();
- private List specialWords;
+ private List<String> specialWords;
public VersionComparator()
{
- specialWords = new ArrayList();
+ specialWords = new ArrayList<String>();
// ids that refer to LATEST
specialWords.add( "final" );
@@ -91,61 +91,53 @@
specialWords.add( "snapshot" );
}
- public static Comparator getInstance()
+ public static Comparator<String> getInstance()
{
return INSTANCE;
}
- public int compare( Object o1, Object o2 )
+ public int compare( String o1, String o2 )
{
if ( o1 == null && o2 == null )
{
return 0;
}
- if ( o1 == null && o2 != null )
+ if ( o1 == null )
{
return 1;
}
- if ( o1 != null && o2 == null )
+ if ( o2 == null )
{
return -1;
}
- if ( ( o1 instanceof String ) && ( o2 instanceof String ) )
- {
- String s1 = ( (String) o1 );
- String s2 = ( (String) o2 );
-
- String parts1[] = toParts( s1 );
- String parts2[] = toParts( s2 );
-
- int diff;
- int partLen = Math.max( parts1.length, parts2.length );
- for ( int i = 0; i < partLen; i++ )
- {
- diff = comparePart( safePart( parts1, i ), safePart( parts2, i ) );
- if ( diff != 0 )
- {
- return diff;
- }
- }
-
- diff = parts2.length - parts1.length;
+ String[] parts1 = toParts( o1 );
+ String[] parts2 = toParts( o2 );
+ int diff;
+ int partLen = Math.max( parts1.length, parts2.length );
+ for ( int i = 0; i < partLen; i++ )
+ {
+ diff = comparePart( safePart( parts1, i ), safePart( parts2, i ) );
if ( diff != 0 )
{
return diff;
}
+ }
- return s1.compareToIgnoreCase( s2 );
+ diff = parts2.length - parts1.length;
+
+ if ( diff != 0 )
+ {
+ return diff;
}
- return 0;
+ return o1.compareToIgnoreCase( o2 );
}
- private String safePart( String parts[], int idx )
+ private String safePart( String[] parts, int idx )
{
if ( idx < parts.length )
{
@@ -177,7 +169,7 @@
// Only operate perform index based operation, if both strings
// are found in the specialWords index.
- if ( ( idx1 >= 0 ) && ( idx2 >= 0 ) )
+ if ( idx1 >= 0 && idx2 >= 0 )
{
return idx1 - idx2;
}
@@ -206,11 +198,11 @@
return ArrayUtils.EMPTY_STRING_ARRAY;
}
- final int modeOther = 0;
- final int modeDigit = 1;
- final int modeText = 2;
+ int modeOther = 0;
+ int modeDigit = 1;
+ int modeText = 2;
- List parts = new ArrayList();
+ List<String> parts = new ArrayList<String>();
int len = version.length();
int i = 0;
int start = 0;
@@ -249,10 +241,7 @@
// Other.
if ( mode != modeOther )
{
- if ( mode != modeOther )
- {
- parts.add( version.substring( start, i ) );
- }
+ parts.add( version.substring( start, i ) );
mode = modeOther;
}
}
@@ -266,6 +255,6 @@
parts.add( version.substring( start, i ) );
}
- return (String[]) parts.toArray( new String[parts.size()] );
+ return parts.toArray( new String[parts.size()] );
}
}
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java?rev=575145&r1=575144&r2=575145&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/MetadataTools.java Wed Sep 12 19:20:48 2007
@@ -46,6 +46,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -577,6 +578,8 @@
public void updateMetadata( ArchivaRepository managedRepository, ProjectReference reference )
throws LayoutException, RepositoryMetadataException, IOException
{
+ Comparator<String> comparator = VersionComparator.getInstance();
+
File metadataFile = new File( managedRepository.getUrl().getPath(), toPath( reference ) );
ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
@@ -589,6 +592,8 @@
// Does this repository have a set of remote proxied repositories?
Set proxiedRepoIds = this.proxies.get( managedRepository.getId() );
+ String latestVersion = null;
+ String releaseVersion = null;
if ( proxiedRepoIds != null )
{
// Add in the proxied repo version ids too.
@@ -598,13 +603,22 @@
String proxyId = it.next();
ArchivaRepositoryMetadata proxyMetadata = readProxyMetadata( managedRepository, reference, proxyId );
- if ( proxyMetadata == null )
+ if ( proxyMetadata != null )
{
- // There is no proxy metadata, skip it.
- continue;
- }
+ availableVersions.addAll( proxyMetadata.getAvailableVersions() );
+
+ if ( latestVersion == null ||
+ comparator.compare( proxyMetadata.getLatestVersion(), latestVersion ) > 0 )
+ {
+ latestVersion = proxyMetadata.getLatestVersion();
+ }
- availableVersions.addAll( proxyMetadata.getAvailableVersions() );
+ if ( releaseVersion == null ||
+ comparator.compare( proxyMetadata.getReleasedVersion(), releaseVersion ) > 0 )
+ {
+ releaseVersion = proxyMetadata.getReleasedVersion();
+ }
+ }
}
}
@@ -620,6 +634,9 @@
// Add the versions to the metadata model.
metadata.setAvailableVersions( sortedVersions );
+
+ metadata.setLatestVersion( latestVersion );
+ metadata.setReleasedVersion( releaseVersion );
// Save the metadata model to disk.
RepositoryMetadataWriter.write( metadata, metadataFile );
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/MetadataToolsTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/MetadataToolsTest.java?rev=575145&r1=575144&r2=575145&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/MetadataToolsTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/MetadataToolsTest.java Wed Sep 12 19:20:48 2007
@@ -155,7 +155,7 @@
assertUpdatedProjectMetadata( "proxied_multi", new String[]{"1.0-spec" /* in java.net */, "1.0"
/* in managed, and central */, "1.0.1" /* in central */, "1.1" /* in managed */, "2.0-proposal-beta"
/* in java.net */, "2.0-spec" /* in java.net */, "2.0" /* in central, and java.net */, "2.0.1"
- /* in java.net */, "2.1" /* in managed */, "3.0" /* in central */, "3.1" /* in central */} );
+ /* in java.net */, "2.1" /* in managed */, "3.0" /* in central */, "3.1" /* in central */}, "3.1", "3.1" );
}
public void testUpdateProjectSimpleYetIncomplete()
@@ -388,6 +388,13 @@
private void assertUpdatedProjectMetadata( String artifactId, String[] expectedVersions )
throws IOException, LayoutException, RepositoryMetadataException, SAXException, ParserConfigurationException
{
+ assertUpdatedProjectMetadata( artifactId, expectedVersions, null, null );
+ }
+
+ private void assertUpdatedProjectMetadata( String artifactId, String[] expectedVersions, String latestVersion,
+ String releaseVersion )
+ throws IOException, LayoutException, RepositoryMetadataException, SAXException, ParserConfigurationException
+ {
ArchivaRepository testRepo = createTestRepo();
ProjectReference reference = new ProjectReference();
reference.setGroupId( "org.apache.archiva.metadata.tests" );
@@ -406,6 +413,15 @@
if ( expectedVersions != null )
{
buf.append( " <versioning>\n" );
+ if ( latestVersion != null )
+ {
+ buf.append( " <latest>" ).append( latestVersion ).append( "</latest>\n" );
+ }
+ if ( releaseVersion != null )
+ {
+ buf.append( " <release>" ).append( releaseVersion ).append( "</release>\n" );
+ }
+
buf.append( " <versions>\n" );
for ( int i = 0; i < expectedVersions.length; i++ )
{
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml?rev=575145&r1=575144&r2=575145&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-central.xml Wed Sep 12 19:20:48 2007
@@ -3,6 +3,8 @@
<artifactId>proxied_multi</artifactId>
<version>1.0</version>
<versioning>
+ <latest>3.1</latest>
+ <release>3.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml?rev=575145&r1=575144&r2=575145&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata-java.net.xml Wed Sep 12 19:20:48 2007
@@ -3,6 +3,8 @@
<artifactId>proxied_multi</artifactId>
<version>1.0</version>
<versioning>
+ <latest>2.0.1</latest>
+ <release>2.0.1</release>
<versions>
<version>1.0-spec</version>
<version>2.0</version>
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml?rev=575145&r1=575144&r2=575145&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/repositories/metadata-repository/org/apache/archiva/metadata/tests/proxied_multi/maven-metadata.xml Wed Sep 12 19:20:48 2007
@@ -3,6 +3,8 @@
<artifactId>proxied_multi</artifactId>
<version>1.0</version>
<versioning>
+ <latest>2.1</latest>
+ <release>2.1</release>
<versions>
<version>1.0</version>
<version>1.1</version>