Skip to content
This repository has been archived by the owner on Aug 11, 2020. It is now read-only.

Commit

Permalink
NEXUS-2280: fixed group metadata merging
Browse files Browse the repository at this point in the history
git-svn-id: file:///opt/svn/repositories/sonatype.org/nexus/branches/nexus-1.3.X@4579 2aa8b3fc-8ebb-4439-a84f-95066eaea8ab
  • Loading branch information
dbradicich committed Jul 13, 2009
1 parent 3cec3ea commit abbc0cc
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 5 deletions.
Expand Up @@ -64,11 +64,22 @@ else if ( targetMetadata.getVersioning() != null && sourceMetadata.getVersioning
{
try
{
long sourceLU = Long.parseLong( sourceMetadata.getVersioning().getLastUpdated() );
long sourceLU = sourceMetadata.getVersioning().getLastUpdated() == null ? -1 : Long.parseLong( sourceMetadata.getVersioning().getLastUpdated() );

long targetLU = Long.parseLong( targetMetadata.getVersioning().getLastUpdated() );

lastUpdated = sourceLU >= targetLU ? Long.toString( sourceLU ) : Long.toString( targetLU );
long targetLU = targetMetadata.getVersioning().getLastUpdated() == null ? -1 : Long.parseLong( targetMetadata.getVersioning().getLastUpdated() );

if ( sourceLU != -1 && targetLU != -1 )
{
lastUpdated = sourceLU >= targetLU ? Long.toString( sourceLU ) : Long.toString( targetLU );
}
else if ( sourceLU != -1 && targetLU == -1 )
{
lastUpdated = Long.toString( sourceLU );
}
else if ( sourceLU == -1 && targetLU != -1 )
{
lastUpdated = Long.toString( targetLU );
}
}
catch ( NumberFormatException e )
{
Expand Down Expand Up @@ -146,7 +157,7 @@ else if ( targetMetadata.getVersioning() != null && sourceMetadata.getVersioning

// versioning.lastUpdate
// choose the latest
if ( targetMetadata.getVersioning() != null )
if ( targetMetadata.getVersioning() != null && lastUpdated != null )
{
targetMetadata.getVersioning().setLastUpdated( lastUpdated );
}
Expand Down
@@ -0,0 +1,131 @@
package org.sonatype.nexus.proxy.maven.metadata.mercury;

import java.util.Arrays;

import org.apache.maven.mercury.repository.metadata.Metadata;
import org.apache.maven.mercury.repository.metadata.MetadataOperand;
import org.apache.maven.mercury.repository.metadata.Versioning;
import org.codehaus.plexus.PlexusTestCase;

public class MergeOperationTest
extends PlexusTestCase
{
public void testMergeNoLastUpdate()
throws Exception
{
Metadata md1 = getSource( false );

Metadata md2 = getTarget( false );

MergeOperation mergeOp = new MergeOperation( new MetadataOperand( md1 ) );
mergeOp.perform( md2 );

validate( md2, false, false );
}

public void testMergeTargetLastUpdate()
throws Exception
{
Metadata md1 = getSource( false );

Metadata md2 = getTarget( true );

MergeOperation mergeOp = new MergeOperation( new MetadataOperand( md1 ) );
mergeOp.perform( md2 );

validate( md2, true, true );
}

public void testMergeSourceLastUpdate()
throws Exception
{
Metadata md1 = getSource( true );

Metadata md2 = getTarget( false );

MergeOperation mergeOp = new MergeOperation( new MetadataOperand( md1 ) );
mergeOp.perform( md2 );

validate( md2, true, false );
}

public void testMergeBothLastUpdate()
throws Exception
{
Metadata md1 = getSource( true );

Metadata md2 = getTarget( true );

MergeOperation mergeOp = new MergeOperation( new MetadataOperand( md1 ) );
mergeOp.perform( md2 );

validate( md2, true, true );
}

private Metadata getSource( boolean setLastUpdate )
{
Metadata md = new Metadata();
md.setArtifactId( "log4j" );
md.setGroupId( "log4j" );
md.setVersion( "1.1.3" );

Versioning versioning = new Versioning();
versioning.setVersions( Arrays.asList( "1.1.3" ) );

if ( setLastUpdate )
{
versioning.setLastUpdated( "1234567" );
}

md.setVersioning( versioning );

return md;
}

private Metadata getTarget( boolean setLastUpdate )
{
Metadata md = new Metadata();
md.setArtifactId( "log4j" );
md.setGroupId( "log4j" );
md.setVersion( "1.1.3" );

Versioning versioning = new Versioning();
versioning.setVersions( Arrays.asList(
"1.1.3", "1.2.4", "1.2.5", "1.2.6",
"1.2.7", "1.2.8", "1.2.11",
"1.2.9", "1.2.12", "1.2.13" ) );

if ( setLastUpdate )
{
versioning.setLastUpdated( "7654321" );
}

md.setVersioning( versioning );

return md;
}

private void validate( Metadata md, boolean setLastUpdate, boolean targetLastUpdate )
{
assertTrue( md.getVersioning().getVersions().containsAll( Arrays.asList(
"1.2.4", "1.2.5", "1.2.6",
"1.2.7", "1.2.8", "1.2.11",
"1.2.9", "1.2.12", "1.2.13" ) ) );

if ( setLastUpdate )
{
if ( targetLastUpdate )
{
assertEquals( "7654321", md.getVersioning().getLastUpdated() );
}
else
{
assertEquals( "1234567", md.getVersioning().getLastUpdated() );
}
}
else
{
assertTrue( md.getVersioning().getLastUpdated() == null );
}
}
}

0 comments on commit abbc0cc

Please sign in to comment.