You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2019/12/10 12:19:29 UTC

[sling-slingfeature-maven-plugin] branch master updated: SLING-8905 - Always use scm-location if defined

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new d437164  SLING-8905 - Always use scm-location if defined
d437164 is described below

commit d43716456463c85b40eeeea16786382f03e6832d
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Tue Dec 10 00:24:31 2019 +0100

    SLING-8905 - Always use scm-location if defined
---
 .../sling/feature/maven/mojos/ApisJarMojo.java     | 263 +++++++++++----------
 1 file changed, 140 insertions(+), 123 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
index e53b9d9..0694de8 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
@@ -941,160 +941,177 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
         getLog().debug("Downloading sources for " + artifactId.toMvnId() + "...");
 
         boolean fallback = false;
-        if ( artifact.getMetadata().get(SCM_ID) != null ) {
-            final String value = artifact.getMetadata().get(SCM_ID);
+        String scmId = artifact.getMetadata().get(SCM_ID);
+        String scmLocation = artifact.getMetadata().get(SCM_LOCATION);
+        if ( scmId != null && scmLocation != null)
+            throw new MojoExecutionException("Both " + SCM_ID + " and " + SCM_LOCATION + " are defined for " + artifactId);
+        
+        boolean fallbackToScmCheckout = false;
+        
+        if ( scmId != null ) {
+            final String value = scmId;
             for (final String id : value.split(",")) {
                 final ArtifactId sourcesArtifactId = ArtifactId.parse(id);
                 downloadSourceAndDeflate(artifactProvider, sourcesArtifactId, deflatedSourcesDir, exportPackageIncludes,
                         artifactId, false);
             }
+        } else if ( scmLocation != null ) { 
+            checkoutSourcesFromSCM(artifactProvider, artifact, deflatedSourcesDir, checkedOutSourcesDir,
+                    exportPackageIncludes, artifactId);
         } else {
             final ArtifactId sourcesArtifactId = newArtifacId(artifactId,
                                                     "sources",
                                                     "jar");
-            fallback = downloadSourceAndDeflate(artifactProvider, sourcesArtifactId, deflatedSourcesDir,
+            fallbackToScmCheckout = downloadSourceAndDeflate(artifactProvider, sourcesArtifactId, deflatedSourcesDir,
                     exportPackageIncludes, artifactId, true);
         }
 
-        if (fallback) {
-            // fallback to Artifacts SCM metadata first
-            String connection = artifact.getMetadata().get(SCM_LOCATION);
-            String tag = artifact.getMetadata().get(SCM_TAG);
-
-            // Artifacts SCM metadata may not available or are an override, let's fallback to the POM
-            ArtifactId pomArtifactId = newArtifacId(artifactId, null, "pom");
-            getLog().debug("Falling back to SCM checkout, retrieving POM " + pomArtifactId.toMvnId() + "...");
-            // POM file must exist, let the plugin fail otherwise
-            final URL pomURL = retrieve(artifactProvider, pomArtifactId);
-            if (pomURL == null) {
-                throw new MojoExecutionException("Unable to find artifact " + pomArtifactId.toMvnId());
-            }
+        if ( fallbackToScmCheckout ) {
+            checkoutSourcesFromSCM(artifactProvider, artifact, deflatedSourcesDir, checkedOutSourcesDir,
+                    exportPackageIncludes, artifactId);
+        }
+    }
 
-            File pomFile = null;
-            try
-            {
-                pomFile = IOUtils.getFileFromURL(pomURL, true, null);
-            } catch (IOException e) {
-                throw new MojoExecutionException(e.getMessage());
-            }
-            getLog().debug("POM " + pomArtifactId.toMvnId() + " successfully retrieved, reading the model...");
+    private void checkoutSourcesFromSCM(final ArtifactProvider artifactProvider, Artifact artifact,
+            File deflatedSourcesDir, File checkedOutSourcesDir, String[] exportPackageIncludes, ArtifactId artifactId)
+            throws MojoExecutionException {
+        // fallback to Artifacts SCM metadata first
+        String connection = artifact.getMetadata().get(SCM_LOCATION);
+        String tag = artifact.getMetadata().get(SCM_TAG);
+
+        // Artifacts SCM metadata may not available or are an override, let's fallback to the POM
+        ArtifactId pomArtifactId = newArtifacId(artifactId, null, "pom");
+        getLog().debug("Falling back to SCM checkout, retrieving POM " + pomArtifactId.toMvnId() + "...");
+        // POM file must exist, let the plugin fail otherwise
+        final URL pomURL = retrieve(artifactProvider, pomArtifactId);
+        if (pomURL == null) {
+            throw new MojoExecutionException("Unable to find artifact " + pomArtifactId.toMvnId());
+        }
 
-            // read model
-            Model pomModel = modelBuilder.buildRawModel(pomFile, ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL, false).get();
-            getLog().debug("POM model " + pomArtifactId.toMvnId() + " successfully read, processing the SCM...");
+        File pomFile = null;
+        try
+        {
+            pomFile = IOUtils.getFileFromURL(pomURL, true, null);
+        } catch (IOException e) {
+            throw new MojoExecutionException(e.getMessage());
+        }
+        getLog().debug("POM " + pomArtifactId.toMvnId() + " successfully retrieved, reading the model...");
 
-            Scm scm = pomModel.getScm();
-            if (scm != null) {
-                connection = setIfNull(connection, scm.getConnection());
-                tag = setIfNull(tag, scm.getTag());
-            }
+        // read model
+        Model pomModel = modelBuilder.buildRawModel(pomFile, ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL, false).get();
+        getLog().debug("POM model " + pomArtifactId.toMvnId() + " successfully read, processing the SCM...");
 
-            if (connection == null) {
-                getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId() + " : SCM not defined in "
-                        + artifactId.toMvnId()
-                              + " bundle neither in "
-                        + pomArtifactId.toMvnId() + " POM file.");
-                return;
-            }
+        Scm scm = pomModel.getScm();
+        if (scm != null) {
+            connection = setIfNull(connection, scm.getConnection());
+            tag = setIfNull(tag, scm.getTag());
+        }
 
-            try {
-                ScmRepository repository = scmManager.makeScmRepository(connection);
+        if (connection == null) {
+            getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId() + " : SCM not defined in "
+                    + artifactId.toMvnId()
+                          + " bundle neither in "
+                    + pomArtifactId.toMvnId() + " POM file.");
+            return;
+        }
 
-                ScmVersion scmVersion = null;
-                if (tag != null) {
-                    scmVersion = new ScmTag(tag);
-                }
+        try {
+            ScmRepository repository = scmManager.makeScmRepository(connection);
 
-                File basedir = new File(checkedOutSourcesDir, artifactId.getArtifactId());
-                if (basedir.exists()) {
-                    getLog().debug("Source checkout directory " + basedir + " already exists");
-                } else {
-                    getLog().debug("Checking out source to directory " + basedir);
-                    basedir.mkdirs();
-                    ScmFileSet fileSet = new ScmFileSet(basedir);
+            ScmVersion scmVersion = null;
+            if (tag != null) {
+                scmVersion = new ScmTag(tag);
+            }
 
-                    CheckOutScmResult result = null;
-                    try {
-                        if (scmVersion != null) {
-                            result = scmManager.checkOut(repository, fileSet, true);
-                        } else {
-                            result = scmManager.checkOut(repository, fileSet, scmVersion, true);
-                        }
-                    } catch (ScmException se) {
-                        throw new MojoExecutionException("An error occurred while checking sources from " + repository
-                                + " for artifact " + artifactId + " model", se);
-                    }
+            File basedir = new File(checkedOutSourcesDir, artifactId.getArtifactId());
+            if (basedir.exists()) {
+                getLog().debug("Source checkout directory " + basedir + " already exists");
+            } else {
+                getLog().debug("Checking out source to directory " + basedir);
+                basedir.mkdirs();
+                ScmFileSet fileSet = new ScmFileSet(basedir);
 
-                    if (!result.isSuccess()) {
-                        getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId()
-                                + " : An error occurred while checking out sources from " + connection + ": "
-                                + result.getProviderMessage());
-                        return;
+                CheckOutScmResult result = null;
+                try {
+                    if (scmVersion != null) {
+                        result = scmManager.checkOut(repository, fileSet, true);
+                    } else {
+                        result = scmManager.checkOut(repository, fileSet, scmVersion, true);
                     }
+                } catch (ScmException se) {
+                    throw new MojoExecutionException("An error occurred while checking sources from " + repository
+                            + " for artifact " + artifactId + " model", se);
                 }
 
-                // retrieve the exact pom location to detect the bundle path in the repo
-                DirectoryScanner pomScanner = new DirectoryScanner();
-                pomScanner.setBasedir(basedir);
-                pomScanner.setIncludes("**/pom.xml");
-                pomScanner.scan();
-                for (String pomFileLocation : pomScanner.getIncludedFiles()) {
-                    pomFile = new File(basedir, pomFileLocation);
-                    pomModel = modelBuilder.buildRawModel(pomFile, ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL, false)
-                            .get();
-
-                    if (artifactId.getArtifactId().equals(pomModel.getArtifactId())) {
-                        basedir = pomFile.getParentFile();
-                        break;
-                    }
+                if (!result.isSuccess()) {
+                    getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId()
+                            + " : An error occurred while checking out sources from " + connection + ": "
+                            + result.getProviderMessage());
+                    return;
                 }
+            }
 
-                // copy all interested sources to the proper location
-                File javaSources = new File(basedir, "src/main/java");
-                if (!javaSources.exists()) { // old modules could still use src/java
-                    javaSources = new File(basedir, "src/java");
-
-                    // there could be just resources artifacts
-                    if (!javaSources.exists()) {
-                        getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId() + " : SCM checkout for "
-                                + artifactId.toMvnId()
-                                + " does not contain any source.");
-                        return;
-                    }
+            // retrieve the exact pom location to detect the bundle path in the repo
+            DirectoryScanner pomScanner = new DirectoryScanner();
+            pomScanner.setBasedir(basedir);
+            pomScanner.setIncludes("**/pom.xml");
+            pomScanner.scan();
+            for (String pomFileLocation : pomScanner.getIncludedFiles()) {
+                pomFile = new File(basedir, pomFileLocation);
+                pomModel = modelBuilder.buildRawModel(pomFile, ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL, false)
+                        .get();
+
+                if (artifactId.getArtifactId().equals(pomModel.getArtifactId())) {
+                    basedir = pomFile.getParentFile();
+                    break;
                 }
+            }
 
-                File destDirectory = new File(deflatedSourcesDir, artifactId.toMvnId());
-                if (!destDirectory.exists()) {
-                    destDirectory.mkdir();
-                    DirectoryScanner directoryScanner = new DirectoryScanner();
-                    directoryScanner.setBasedir(javaSources);
-                    directoryScanner.setIncludes(exportPackageIncludes);
-                    directoryScanner.scan();
-
-                    for (String file : directoryScanner.getIncludedFiles()) {
-                        File source = new File(javaSources, file);
-                        File destination = new File(destDirectory, file);
-                        destination.getParentFile().mkdirs();
-                        try {
-                            FileUtils.copyFile(source, destination);
-                        } catch (IOException e) {
-                            throw new MojoExecutionException(
-                                    "An error occurred while copying sources from " + source + " to " + destination, e);
-                        }
-                    }
+            // copy all interested sources to the proper location
+            File javaSources = new File(basedir, "src/main/java");
+            if (!javaSources.exists()) { // old modules could still use src/java
+                javaSources = new File(basedir, "src/java");
+
+                // there could be just resources artifacts
+                if (!javaSources.exists()) {
+                    getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId() + " : SCM checkout for "
+                            + artifactId.toMvnId()
+                            + " does not contain any source.");
+                    return;
                 }
+            }
 
-            } catch (ScmRepositoryException se) {
-                throw new MojoExecutionException("An error occurred while reading SCM from "
-                                                 + connection
-                                                 + " connection for bundle "
-                                                 + artifactId, se);
-            } catch (NoSuchScmProviderException nsspe) {
-                getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId()
-                        + " : bundle points to an SCM connection "
-                               + connection
-                               + " which does not specify a valid or supported SCM provider", nsspe);
+            File destDirectory = new File(deflatedSourcesDir, artifactId.toMvnId());
+            if (!destDirectory.exists()) {
+                destDirectory.mkdir();
+                DirectoryScanner directoryScanner = new DirectoryScanner();
+                directoryScanner.setBasedir(javaSources);
+                directoryScanner.setIncludes(exportPackageIncludes);
+                directoryScanner.scan();
+
+                for (String file : directoryScanner.getIncludedFiles()) {
+                    File source = new File(javaSources, file);
+                    File destination = new File(destDirectory, file);
+                    destination.getParentFile().mkdirs();
+                    try {
+                        FileUtils.copyFile(source, destination);
+                    } catch (IOException e) {
+                        throw new MojoExecutionException(
+                                "An error occurred while copying sources from " + source + " to " + destination, e);
+                    }
+                }
             }
+
+        } catch (ScmRepositoryException se) {
+            throw new MojoExecutionException("An error occurred while reading SCM from "
+                                             + connection
+                                             + " connection for bundle "
+                                             + artifactId, se);
+        } catch (NoSuchScmProviderException nsspe) {
+            getLog().warn("Ignoring sources for artifact " + artifactId.toMvnId()
+                    + " : bundle points to an SCM connection "
+                           + connection
+                           + " which does not specify a valid or supported SCM provider", nsspe);
         }
     }