This is an automated email from the ASF dual-hosted git repository. mhubail pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit ab2fbf432a4a59b6171fb0d5e02cd59746d082fd Merge: 9f04aefb57 2538c159d3 Author: Murtadha Hubail <murtadha.hub...@couchbase.com> AuthorDate: Tue Jan 10 21:09:06 2023 +0300 Merge branch 'neo' Change-Id: I1334d543bc86fffa849dd38e60fdf98c706444ac .../optimizer/rules/LoadRecordFieldsRule.java | 14 +-- .../queries_sqlpp/objects/ObjectsQueries.xml | 5 + .../load-record-fields.1.ddl.sqlpp | 30 +++++ .../load-record-fields.2.update.sqlpp | 25 +++++ .../load-record-fields.3.query.sqlpp | 30 +++++ .../load-record-fields.4.query.sqlpp | 30 +++++ .../load-record-fields/load-record-fields.3.adm | 2 + .../load-record-fields/load-record-fields.4.plan | 26 +++++ .../asterix/lang/common/util/FunctionUtil.java | 13 +++ .../main/licenses/templates/asterix-license.ftl | 5 +- .../src/main/licenses/templates/asterix-notice.ftl | 3 + .../src/main/licenses/templates/hyracks-notice.ftl | 3 + .../hyracks/control/cc/work/NodeHeartbeatWork.java | 5 + .../maven/license/DownloadLicensesMojo.java | 2 +- .../hyracks/maven/license/GenerateFileMojo.java | 124 ++++++++++++++++++--- .../apache/hyracks/maven/license/LicenseMojo.java | 47 +++++--- .../maven/license/project/LicensedProjects.java | 6 + .../hyracks/maven/license/project/Project.java | 12 +- 18 files changed, 344 insertions(+), 38 deletions(-) diff --cc hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java index 347c19ad3c,8edc1b212f..2c7a23b0f5 --- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java +++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/GenerateFileMojo.java @@@ -110,6 -118,9 +118,11 @@@ public class GenerateFileMojo extends L @Parameter private boolean stripFoundationAssertionFromNotices = false; ++ @Parameter ++ private boolean includeShadowedDependencies = true; + @Parameter + private boolean validateShadowLicenses = false; + private SortedMap<String, SortedSet<Project>> noticeMap; @java.lang.Override @@@ -472,4 -496,71 +498,76 @@@ } return matches; } + + private UnaryOperator<String> getNoticeFileContentTransformer() { + UnaryOperator<String> transformer; + if (stripFoundationAssertionFromNotices) { + transformer = text -> FOUNDATION_PATTERN.matcher(text).replaceAll(""); + } else { + transformer = UnaryOperator.identity(); + } + return transformer; + } + + @java.lang.Override + protected void gatherProjectDependencies(MavenProject project, + Map<MavenProject, List<Pair<String, String>>> dependencyLicenseMap, + Map<String, MavenProject> dependencyGavMap) throws ProjectBuildingException, MojoExecutionException { + super.gatherProjectDependencies(project, dependencyLicenseMap, dependencyGavMap); + gatherShadowedDependencies(dependencyLicenseMap, dependencyGavMap); + } + + @java.lang.Override + protected void processExtraDependencies(Map<MavenProject, List<Pair<String, String>>> dependencyLicenseMap, + Map<String, MavenProject> dependencyGavMap) throws ProjectBuildingException, MojoExecutionException { + super.processExtraDependencies(dependencyLicenseMap, dependencyGavMap); + gatherShadowedDependencies(dependencyLicenseMap, dependencyGavMap); + } + + private void gatherShadowedDependencies(Map<MavenProject, List<Pair<String, String>>> dependencyLicenseMap, + Map<String, MavenProject> dependencyGavMap) throws MojoExecutionException, ProjectBuildingException { + Set<MavenProject> projects = new TreeSet<>(Comparator.comparing(MavenProject::getId)); ++ if (!includeShadowedDependencies) { ++ getLog().info("Not gathering shadowed dependencies as 'includeShadowedDependencies' is set to " ++ + includeShadowedDependencies); ++ return; ++ } + projects.addAll(dependencyLicenseMap.keySet()); + for (MavenProject p : projects) { + boolean finished = false; + File artifactFile = p.getArtifact().getFile(); + if (!artifactFile.exists()) { + throw new MojoExecutionException("Artifact file " + artifactFile + " does not exist!"); + } else if (!artifactFile.getName().endsWith(".jar")) { + getLog().info("Skipping unknown artifact file type: " + artifactFile); + finished = true; + } + if (!finished) { + try (JarFile jarFile = new JarFile(artifactFile)) { + SortedMap<String, JarEntry> matches = gatherMatchingEntries(jarFile, + entry -> entry.getName().matches("(.*/|^)" + "pom\\.properties")); + if (!matches.isEmpty()) { + for (JarEntry entry : matches.values()) { + Properties props = new Properties(); + props.load(jarFile.getInputStream(entry)); + String groupId = props.getProperty("groupId"); + String artifactId = props.getProperty("artifactId"); + String version = props.getProperty("version"); + String gav = groupId + ":" + artifactId + ":" + version; + if (!dependencyGavMap.containsKey(gav)) { + getLog().info("adding " + gav + " (shadowed from " + p.getId() + ")"); + ArtifactHandler handler = new DefaultArtifactHandler("jar"); + String[] gavParts = StringUtils.split(gav, ':'); + Artifact manualDep = new DefaultArtifact(gavParts[0], gavParts[1], gavParts[2], + Artifact.SCOPE_COMPILE, "jar", null, handler); + processArtifact(manualDep, dependencyLicenseMap, dependencyGavMap, true); + } + } + } + } catch (IOException e) { + throw new MojoExecutionException(e); + } + } + } + } }