diff --git a/release_scripts/APIUpdate/nbactions.xml b/release_scripts/APIUpdate/nbactions.xml index e3b484bf66..0102967d7e 100644 --- a/release_scripts/APIUpdate/nbactions.xml +++ b/release_scripts/APIUpdate/nbactions.xml @@ -1,55 +1,55 @@ - - - run - - jar - - - process-classes - org.codehaus.mojo:exec-maven-plugin:3.1.0:exec - - - - ${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs} - --help - ${packageClassName} - java - - - - debug - - jar - - - process-classes - org.codehaus.mojo:exec-maven-plugin:3.1.0:exec - - - -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} - ${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs} - --help - ${packageClassName} - java - true - - - - profile - - jar - - - process-classes - org.codehaus.mojo:exec-maven-plugin:3.1.0:exec - - - - ${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs} - ${packageClassName} - java - --help - - - + + + run + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.1.0:exec + + + + ${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs} + --help + ${packageClassName} + java + + + + debug + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.1.0:exec + + + -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} + ${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs} + --help + ${packageClassName} + java + true + + + + profile + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.1.0:exec + + + + ${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs} + ${packageClassName} + java + --help + + + diff --git a/release_scripts/APIUpdate/pom.xml b/release_scripts/APIUpdate/pom.xml index 1d38e4f5e2..0feced8364 100644 --- a/release_scripts/APIUpdate/pom.xml +++ b/release_scripts/APIUpdate/pom.xml @@ -24,5 +24,39 @@ 1.5.0 + + + org.apache.commons + commons-lang3 + 3.13.0 + + + + + + + maven-assembly-plugin + + + + org.sleuthkit.autopsy.apiupdate.Main + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + \ No newline at end of file diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java new file mode 100644 index 0000000000..7c73627d81 --- /dev/null +++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java @@ -0,0 +1,70 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package org.sleuthkit.autopsy.apiupdate; + +import japicmp.cmp.JApiCmpArchive; +import japicmp.cmp.JarArchiveComparator; +import japicmp.cmp.JarArchiveComparatorOptions; +import japicmp.model.JApiClass; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * + * @author gregd + */ +public class APIDiff { + + private static final FileFilter JAR_FILTER + = (File f) -> f.isFile() && (f.getName().toLowerCase().endsWith(".jar") || f.getName().toLowerCase().endsWith(".nbm")); + + private static List getCommonJars(File prevDir, File currDir) { + Set prevJars = getJars(prevDir); + Set currJars = getJars(currDir); + + Set commonJars = new HashSet<>(prevJars); + commonJars.retainAll(currJars); + + // TODO how to handle different + return commonJars.stream().sorted().collect(Collectors.toList()); + } + + private static Set getJars(File dir) { + return Stream.of(dir.listFiles(JAR_FILTER)) + .map(f -> f.getName()) + .collect(Collectors.toSet()); + } + + private static Set getPublicPackages(File jarFile) throws IOException, IllegalStateException { + String publicPackageStr = ManifestLoader.loadFromJar(jarFile).getValue("OpenIDE-Module-Public-Packages"); + if (publicPackageStr == null) { + throw new IllegalStateException(MessageFormat.format("Manifest for {0} does not have key of 'OpenIDE-Module-Public-Packages'", jarFile.getAbsolutePath())); + } else { + return Stream.of(publicPackageStr.split(",")) + .map(String::trim) + .map(str -> str.endsWith(".*") ? str.substring(0, str.length() - 2) : str) + .collect(Collectors.toSet()); + } + } + + private static void getComparison(String prevVersion, String curVersion, File prevJar, File curJar) { + JarArchiveComparatorOptions comparatorOptions = new JarArchiveComparatorOptions(); + comparatorOptions.getIgnoreMissingClasses().setIgnoreAllMissingClasses(true); + JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(comparatorOptions); + List jApiClasses = jarArchiveComparator.compare( + new JApiCmpArchive(prevJar, prevVersion), + new JApiCmpArchive(curJar, curVersion) + ); + System.out.println("Comparing " + prevJar.getName()); + System.out.println(jApiClasses); + } +} diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/classpathsimplication/apiupdate/CLIProcessor.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/CLIProcessor.java similarity index 84% rename from release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/classpathsimplication/apiupdate/CLIProcessor.java rename to release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/CLIProcessor.java index 0ac99e73ed..5295febd70 100644 --- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/classpathsimplication/apiupdate/CLIProcessor.java +++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/CLIProcessor.java @@ -2,7 +2,7 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ -package org.sleuthkit.autopsy.classpathsimplication.apiupdate; +package org.sleuthkit.autopsy.apiupdate; import java.io.File; import java.util.Arrays; @@ -57,12 +57,22 @@ public class CLIProcessor { .option("cv") .required(true) .build(); + + static Option SRC_LOC_OPT = Option.builder() + .argName("path") + .desc("The path to the root of the autopsy repor") + .hasArg(true) + .longOpt("src-path") + .option("s") + .required(true) + .build(); static List