Preserve -SNAPSHOT versions
diff --git a/src/main/groovy/m4e/InstallCmd.groovy b/src/main/groovy/m4e/InstallCmd.groovy
index 7d9331a..961b5ea 100644
--- a/src/main/groovy/m4e/InstallCmd.groovy
+++ b/src/main/groovy/m4e/InstallCmd.groovy
@@ -165,6 +165,20 @@
int sourceCount = 0
}
+class SourceSnapshotVersionMap {
+ /**
+ * Filled when a binary bundle is encountered.
+ *
+ * <p>Eclipse key (value of Eclipse-SourceBundle) -> Maven path of source JAR */
+ Map<String, File> binaryMap = [:]
+
+ /**
+ * Filled when a source bundle is encountered and the key can't be found in knownMap.
+ *
+ * <p>Eclipse key (value of Eclipse-SourceBundle) -> Maven path of source JAR */
+ Map<String, File> unknownMap = [:]
+}
+
class ImportTool {
static final Logger log = LoggerFactory.getLogger( ImportTool )
@@ -174,7 +188,8 @@
static final String FAILURE_FILE_NAME = 'failure'
InstallCmd installCmd
-
+ SourceSnapshotVersionMap versionMap = new SourceSnapshotVersionMap()
+
File eclipseFolder
File tmpHome
File m2repo
@@ -204,6 +219,8 @@
doImport()
+ moveSourceBundles()
+
log.info( 'OK' )
failure.delete()
@@ -221,7 +238,7 @@
folder.eachFile { it ->
try {
- def tool = new BundleConverter( installCmd: installCmd, m2repo: m2repo, statistics: installCmd.statistics )
+ def tool = new BundleConverter( installCmd: installCmd, m2repo: m2repo, statistics: installCmd.statistics, versionMap: versionMap )
if( it.isDirectory() ) {
tool.importExplodedBundle( it )
@@ -262,6 +279,24 @@
return null
}
+
+ void moveSourceBundles() {
+ versionMap.unknownMap.each { eclipseKey, sourceJar ->
+ File target = versionMap.binaryMap[ eclipseKey ]
+
+ if( target ) {
+ log.debug( "Moving ${sourceJar} to ${target}" )
+ sourceJar.usefulRename( target )
+
+ File parent = sourceJar.parentFile
+ if( parent.list().size() == 0 ) {
+ parent.usefulDelete()
+ }
+ } else {
+ installCmd.warn( Warning.MISSING_BINARY_BUNDLE_FOR_SOURCES, "No binary bundle for ${sourceJar.absolutePath}" )
+ }
+ }
+ }
}
class BundleConverter {
@@ -279,6 +314,7 @@
File bundle
ImportStatistics statistics
+ SourceSnapshotVersionMap versionMap
void importBundle( File bundleJar ) {
this.bundle = bundleJar
@@ -294,6 +330,8 @@
examineManifest()
+ loadMavenProperties( bundleJar )
+
if( isSourceBundle() ) {
return
}
@@ -301,6 +339,7 @@
String key = "${groupId}:${artifactId}:${version}"
log.info( "Importing ${key}" )
File jarFile = MavenRepositoryTools.buildPath( m2repo, key, 'jar' )
+ versionMap.binaryMap[ eclipseKey ] = MavenRepositoryTools.buildPath( m2repo, key, "jar", "sources" )
String classPath = manifest.attr.getValue( 'Bundle-ClassPath' )
if( classPath && classPath != '.' ) {
@@ -317,6 +356,29 @@
}
}
+ void loadMavenProperties( File bundleJar ) {
+
+ ZipEntry pomProperties
+
+ for( ZipEntry entry : archive.entries() ) {
+ if( entry.name.startsWith( 'META-INF/maven/' ) && entry.name.endsWith( '/pom.properties' ) ) {
+ Properties p = new Properties()
+ archive.withInputStream( entry ) {
+ p.load( it )
+ }
+
+ String pomVersion = p.getProperty( 'version' )
+ if( pomVersion ) {
+ version = pomVersion
+ }
+
+ // Should appear only once :-/ Check?
+ break
+ }
+ }
+
+ }
+
boolean isSourceBundle() {
ManifestElement[] sourceBundleFor = parseAttribute( 'Eclipse-SourceBundle' )
if( !sourceBundleFor ) {
@@ -329,6 +391,7 @@
boolean isSingleton
String licenseURL
+ String eclipseKey
Map licenseNameMap = [
'http://www.apache.org/licenses/LICENSE-2.0.txt': 'Apache 2'
@@ -349,6 +412,8 @@
version = manifest.attr.getValue( Constants.BUNDLE_VERSION )
groupId = artifactIdToGroupId( artifactId )
+ eclipseKey = "${artifactId}:${version}"
+
isSingleton = ( 'true' == attrs[0].getDirective( Constants.SINGLETON_DIRECTIVE ) )
attrs = parseAttribute( 'Bundle-License' )
@@ -586,8 +651,18 @@
version = attr.getAttribute( Constants.VERSION_ATTRIBUTE )
groupId = artifactIdToGroupId( artifactId )
- String key = "${groupId}:${artifactId}:${version}"
- File mavenSourceJar = MavenRepositoryTools.buildPath( m2repo, key, "jar", "sources" )
+ String eclipseKey = "${artifactId}:${version}"
+ File mavenSourceJar = versionMap.binaryMap[ eclipseKey ]
+
+ if( mavenSourceJar ) {
+ log.debug( "Found ${eclipseKey}: ${mavenSourceJar}" )
+ } else {
+ String key = "${groupId}:${artifactId}:${version}"
+ mavenSourceJar = MavenRepositoryTools.buildPath( m2repo, key, "jar", "sources" )
+
+ versionMap.unknownMap[ eclipseKey ] = mavenSourceJar
+ log.debug( "${eclipseKey} is unknown" )
+ }
String roots = attr.getDirective( 'roots' )
if( !roots ) {