Author: lcorneliussen
Date: Fri Apr 27 20:10:06 2012
New Revision: 1331567
URL: http://svn.apache.org/viewvc?rev=1331567&view=rev
Log:
[NPANDAY-556] Importer for Nuget Packages
o added support for redirecting references to other packages
Modified:
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
Modified:
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
(original)
+++
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/library-import.mdo
Fri Apr 27 20:10:06 2012
@@ -135,8 +135,33 @@
</field>
<!-- TODO: add 'namePattern' for regex matching -->
+
+ <field xml.tagName="toPackage">
+ <name>mapToPackage</name>
+ <association>
+ <type>ReferenceToPackageMapping</type>
+ <multiplicity>1</multiplicity>
+ </association>
+ </field>
+
<!-- TODO: allow for specify mapping to different artifact -->
</fields>
</class>
+
+ <class>
+ <name>ReferenceToPackageMapping</name>
+ <fields>
+ <field xml.attribute="true">
+ <name>id</name>
+ <type>String</type>
+ </field>
+
+ <field xml.attribute="true">
+ <name>version</name>
+ <type>String</type>
+ </field>
+
+ </fields>
+ </class>
</classes>
</model>
\ No newline at end of file
Modified:
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
(original)
+++
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/groovy/AssemblyPluginXpp3ReaderTest.groovy
Fri Apr 27 20:10:06 2012
@@ -50,6 +50,11 @@ class AssemblyPluginXpp3ReaderTest
assert model.nugetImports[0].referenceMappings[0].name == "AssemblyName"
assert model.nugetImports[0].referenceMappings[0].ignore
+ assert model.nugetImports[0].referenceMappings[0].mapToPackage != null
+ assert model.nugetImports[0].referenceMappings[0].mapToPackage.id ==
"pname"
+ assert model.nugetImports[0].referenceMappings[0].mapToPackage.version ==
"1.0"
+
+
assert model.nugetSources != null
assert model.nugetSources.addNugetGallery
assert model.nugetSources.customSources.size() == 1
Modified:
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
(original)
+++
incubator/npanday/trunk/components/dotnet-model/dotnet-model-library-import/src/test/resources/sample-nuget-imports.xml
Fri Apr 27 20:10:06 2012
@@ -33,7 +33,9 @@
<mapReference
name="AssemblyName"
- ignore="true"/>
+ ignore="true">
+ <toPackage id="pname" version="1.0" />
+ </mapReference>
</nuget>
</libs>
Modified:
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
(original)
+++
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/generate/GeneratePackageArtifactsMojo.java
Fri Apr 27 20:10:06 2012
@@ -74,7 +74,7 @@ public class GeneratePackageArtifactsMoj
for ( NugetPackage nuget : nugetImports )
{
- for ( NugetPackageLibrary lib :
nuget.getLibraries(mavenProjectsCacheDirectory) )
+ for ( NugetPackageLibrary lib : nuget.getLibraries(getLog(),
mavenProjectsCacheDirectory) )
{
imports.add( lib );
}
Modified:
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
(original)
+++
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/install/AbstractInstallMojo.java
Fri Apr 27 20:10:06 2012
@@ -229,7 +229,7 @@ public abstract class AbstractInstallMoj
{
String localRepoUrl = new File( localRepository
).toURI().toString();
- getLog().info( "NPANDAY-146-002: Using alternate local repository
" + localRepository );
+ getLog().debug( "NPANDAY-146-002: Using alternate local repository
" + localRepository );
localArtifactRepository =
artifactRepositoryFactory.createArtifactRepository(
"library-importer-local", localRepoUrl, layout, null, null
Modified:
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
(original)
+++
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackage.java
Fri Apr 27 20:10:06 2012
@@ -30,12 +30,14 @@ import npanday.model.library.imports.Nug
import npanday.model.library.imports.NugetSources;
import npanday.model.library.imports.ReferenceMapping;
import npanday.nuget.NugetSemanticVersion;
+import npanday.nuget.NugetVersionSpec;
import npanday.plugin.libraryimporter.AssemblyInfo;
import npanday.plugin.libraryimporter.LibImporterPathUtils;
import npanday.plugin.libraryimporter.NuspecDependency;
import npanday.plugin.libraryimporter.NuspecMetadata;
import npanday.plugin.libraryimporter.NuspecParser;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
import java.io.File;
import java.util.Collection;
@@ -51,6 +53,8 @@ public class NugetPackage
private List<NugetPackage> dependencies;
+ private Collection<NugetPackage> knownPackages;
+
public static List<NugetPackage> Convert(
Iterable<NugetImport> imports, NugetSources nugetSources, File
packageRootDirectory )
{
@@ -109,16 +113,35 @@ public class NugetPackage
return new File( packageRootDirectory, getName() + "." + getVersion()
);
}
- public Iterable<NugetPackageLibrary> getLibraries(File
mavenProjectsCacheDirectory) throws MojoExecutionException
+ public Iterable<NugetPackageLibrary> getLibraries( Log log, File
mavenProjectsCacheDirectory ) throws
+ MojoExecutionException
{
List<File> libDirectories = getLibraryDirectories();
List<NugetPackageLibrary> libImports = Lists.newArrayList();
for ( File libDir : libDirectories )
{
- for ( File lib : LibImporterPathUtils.getLibraries( libDir ) )
+ for ( File libFile : LibImporterPathUtils.getLibraries( libDir ) )
{
- libImports.add( new NugetPackageLibrary( this, lib,
mavenProjectsCacheDirectory ) );
+ NugetPackageLibrary lib = new NugetPackageLibrary( this,
libFile, mavenProjectsCacheDirectory );
+
+ ReferenceMapping referenceMapping =
tryFindReferenceMappingFor( lib.getAssemblyInfo() );
+ if ( referenceMapping != null &&
referenceMapping.getMapToPackage() != null )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.debug(
+ "NPANDAY-142-004: Will skip inclusion for " + lib
+ + " since references to it are mapped to a
different package ("
+ + referenceMapping.getMapToPackage().getId() +
", v"
+ +
referenceMapping.getMapToPackage().getVersion() + ")."
+ );
+ }
+
+ continue;
+ }
+
+ libImports.add( lib );
}
}
return libImports;
@@ -200,43 +223,52 @@ public class NugetPackage
{
Preconditions.checkArgument( dependencies == null, "Dependencies have
already been resolved" );
+ knownPackages = packages;
dependencies = Lists.newArrayList();
for ( Object depO : getNuspec().getDependencies() )
{
// NOTE: stub-generator should IMHO generate List<NuspecDependency>
NuspecDependency dep = (NuspecDependency) depO;
+ NugetPackage highest = resolveDependencyAmongAllKnown( dep );
- NugetPackage highest = null;
- for ( NugetPackage pkg : packages )
- {
- if ( !pkg.getName().equals( dep.getId() ) )
- {
- continue;
- }
+ dependencies.add( highest );
+ }
- if ( dep.getVersion() != null &&
!dep.getVersion().isSatisfiedBy( pkg.getVersion() ) )
- {
- continue;
- }
+ return dependencies;
+ }
- if ( highest == null || highest.getVersion().compareTo(
pkg.getVersion() ) < 0 )
- {
- highest = pkg;
- }
+ public NugetPackage resolveDependencyAmongAllKnown( NuspecDependency dep )
throws MojoExecutionException
+ {
+ NugetVersionSpec depVersion = dep.getVersion();
+ String depId = dep.getId();
+ NugetPackage highest = null;
+ for ( NugetPackage pkg : getKnownPackages() )
+ {
+ if ( !pkg.getName().equals( depId ) )
+ {
+ continue;
}
- if ( highest == null )
+ if ( depVersion != null && !depVersion.isSatisfiedBy(
pkg.getVersion() ) )
{
- throw new MojoExecutionException(
- "NPANDAY-142-004: Could not resolve dependency " + dep + "
among the nuget imports."
- );
+ continue;
+ }
+
+ if ( highest == null || highest.getVersion().compareTo(
pkg.getVersion() ) < 0 )
+ {
+ highest = pkg;
}
- dependencies.add( highest );
}
- return dependencies;
+ if ( highest == null )
+ {
+ throw new MojoExecutionException(
+ "NPANDAY-142-004: Could not resolve dependency " + dep + "
among the nuget imports."
+ );
+ }
+ return highest;
}
public Collection<NugetPackage> getDependencies()
@@ -279,7 +311,8 @@ public class NugetPackage
sources.addAll( nugetSources.getCustomSources() );
- if (nugetSources.isAddNugetGallery()){
+ if ( nugetSources.isAddNugetGallery() )
+ {
sources.add( "https://go.microsoft.com/fwlink/?LinkID=206669"
);
}
@@ -288,4 +321,13 @@ public class NugetPackage
return null;
}
+
+ public Collection<NugetPackage> getKnownPackages()
+ {
+ Preconditions.checkNotNull(
+ dependencies, "Dependencies have not been resolved yet, there fore
known packages are not available either"
+ );
+
+ return knownPackages;
+ }
}
Modified:
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
(original)
+++
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/model/NugetPackageLibrary.java
Fri Apr 27 20:10:06 2012
@@ -23,9 +23,12 @@ import com.google.common.base.Preconditi
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import npanday.model.library.imports.ReferenceMapping;
+import npanday.model.library.imports.ReferenceToPackageMapping;
+import npanday.nuget.NugetVersionSpec;
import npanday.plugin.libraryimporter.AssemblyInfo;
import npanday.plugin.libraryimporter.LibImporterPathUtils;
import npanday.plugin.libraryimporter.ManifestInfoParser;
+import npanday.plugin.libraryimporter.NuspecDependency;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Model;
@@ -56,6 +59,8 @@ public class NugetPackageLibrary
private List<NugetPackageLibrary> dependencies;
+ private List<NugetPackageLibrary> known;
+
public NugetPackageLibrary( NugetPackage nuget, File lib, File
mavenProjectsCacheDirectory )
{
this.nuget = nuget;
@@ -124,6 +129,7 @@ public class NugetPackageLibrary
{
Iterable<AssemblyInfo> references = getAssemblyInfo().getReferences();
+ known = imports;
dependencies = Lists.newArrayList();
for ( final AssemblyInfo ref : references )
@@ -137,20 +143,31 @@ public class NugetPackageLibrary
List<NugetPackageLibrary> matchingStrongNameAndPackage =
Lists.newArrayList();
List<NugetPackageLibrary> matchingName = Lists.newArrayList();
List<NugetPackageLibrary> matchingNameAndPackage =
Lists.newArrayList();
+ String exactPackageScope = "";
+
for ( NugetPackageLibrary lib : imports )
{
- boolean inScope = nuget.isDependentOn( lib.getNugetPackage() )
|| nuget == lib.getNugetPackage();
-
- if ( lib.getAssemblyInfo().getStrongName().equals(
ref.getStrongName() ) )
+ if ( lib.name.equals( ref.getName() ) )
{
- matchingStrongName.add( lib );
- if ( inScope )
+ NugetPackage targetPackage = tryGetToPackageMapping(
lib.getAssemblyInfo() );
+ if (targetPackage != null){
+ exactPackageScope = targetPackage.toString() + "/";
+ }
+
+ boolean inScope =
+ targetPackage != null
+ ? lib.getNugetPackage() == targetPackage
+ : nuget.isDependentOn( lib.getNugetPackage() ) ||
nuget == lib.getNugetPackage();
+
+ if ( lib.getAssemblyInfo().getStrongName().equals(
ref.getStrongName() ) )
{
- matchingStrongNameAndPackage.add( lib );
+ matchingStrongName.add( lib );
+ if ( inScope )
+ {
+ matchingStrongNameAndPackage.add( lib );
+ }
}
- }
- if ( lib.name.equals( ref.getName() ) )
- {
+
matchingName.add( lib );
if ( inScope )
{
@@ -164,25 +181,25 @@ public class NugetPackageLibrary
String help = "";
if ( matchingNameAndPackage.size() > 0 )
{
- help = ", but found matches by name and package: " +
matchingName;
+ help += System.getProperty("line.separator") + " - but
found matches by name and package: " + matchingName;
}
if ( matchingStrongName.size() > 0 )
{
- help = ", but found exact matches in different package(s):
" + matchingStrongName;
+ help += System.getProperty("line.separator") + " - but
found exact matches in different package(s): " + matchingStrongName;
}
if ( matchingName.size() > 0 )
{
- help = ", but found matches by name only: " + matchingName;
+ help += System.getProperty("line.separator") + " - but
found matches by name only: " + matchingName;
}
if ( !Strings.isNullOrEmpty( help ) )
{
- help += ". Please use the config to tweak reference
resolving.";
+ help += System.getProperty("line.separator") + "Please use
the config to tweak reference resolving.";
}
throw new MojoExecutionException(
- "NPANDAY-145-002: Could not find exact match for reference
from " + nuget.getName() + " / " + name
- + " to '" + ref.getStrongName() + "'" + help
+ "NPANDAY-145-002: Could not find exact match for reference
from " + nuget.getName() + "/" + name
+ + " to " + exactPackageScope + "[" +
ref.getStrongName() + "]" + help
);
}
@@ -201,6 +218,23 @@ public class NugetPackageLibrary
return dependencies;
}
+ private NugetPackage tryGetToPackageMapping(AssemblyInfo ref) throws
MojoExecutionException
+ {
+ ReferenceMapping referenceMapping = nuget.tryFindReferenceMappingFor(
ref );
+ if (referenceMapping != null && referenceMapping.getMapToPackage() !=
null)
+ {
+ NuspecDependency dep = new NuspecDependency();
+ ReferenceToPackageMapping mapToPackage =
referenceMapping.getMapToPackage();
+ dep.setId( mapToPackage.getId() );
+
+ // TODO: support real version ranges here?
+ dep.setVersion( NugetVersionSpec.parse( "[" +
mapToPackage.getVersion() + "]" ) );
+ return nuget.resolveDependencyAmongAllKnown( dep );
+ }
+
+ return null;
+ }
+
private boolean isExcluded( AssemblyInfo ref )
{
if ( ref.getStrongName().endsWith( /* .NET 2.0 BCL, mscorlib, ... */
"b77a5c561934e089" ) )
Modified:
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java?rev=1331567&r1=1331566&r2=1331567&view=diff
==============================================================================
---
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
(original)
+++
incubator/npanday/trunk/plugins/library-importer-maven-plugin/src/main/java/npanday/plugin/libraryimporter/skeletons/AbstractHandleEachLibraryMojo.java
Fri Apr 27 20:10:06 2012
@@ -38,7 +38,7 @@ public abstract class AbstractHandleEach
for ( NugetPackage nuget : getNugetImports() )
{
- for ( NugetPackageLibrary lib : nuget.getLibraries(
mavenProjectsCacheDirectory ) )
+ for ( NugetPackageLibrary lib : nuget.getLibraries( getLog(),
mavenProjectsCacheDirectory ) )
{
handleLibrary( lib );