diff --git a/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar b/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar index b6576b81ea638cf08bcc03c549674884b66956e0..fc34986fb016af59cdaa3a7176ca60d41a9fdcde 100644 Binary files a/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar and b/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar differ 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 index 7860ec068c26269ba6031b2632c5d6a9a84f5047..40f961968287ada6616d174c272dcf6de5ee50ea 100644 --- 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 @@ -81,15 +81,15 @@ static List<Pair<File, File>> getCommonJars(File prev, File curr) { Map<String, File> prevJars = getJars(prev); Map<String, File> currJars = getJars(curr); + Set<String> combined = new HashSet<>(prevJars.keySet()); + combined.addAll(currJars.keySet()); List<Pair<File, File>> retMapping = new ArrayList<>(); - for (String prevKey : (Iterable<String>) prevJars.keySet().stream().sorted(StringUtils::compareIgnoreCase)::iterator) { + for (String prevKey : (Iterable<String>) combined.stream().sorted(StringUtils::compareIgnoreCase)::iterator) { File prevFile = prevJars.get(prevKey); File curFile = currJars.get(prevKey); - if (prevFile != null && curFile != null) { - retMapping.add(Pair.of(prevFile, curFile)); - } + retMapping.add(Pair.of(prevFile, curFile)); } return retMapping; diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java index 78853c4a69c0f23cb6f5efb74cf34cc2846bc427..be3814b42353add4eef0b8f0e62e0ed3158d569c 100644 --- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java +++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java @@ -56,24 +56,43 @@ public static void main(String[] args) { for (Pair<File, File> prevCurJars : APIDiff.getCommonJars(cliArgs.getPreviousVersPath(), cliArgs.getCurrentVersPath())) { try { - ModuleVersionNumbers prevVersionNums = ModuleUpdates.getVersionsFromJar(prevCurJars.getLeft()); + File previous = prevCurJars.getLeft(); + File current = prevCurJars.getRight(); + + // if no current, then we can't update; just continue + if (current == null || !current.exists()) { + if (previous != null) { + LOGGER.log(Level.WARNING, "No matching current jar found for previous jar: " + previous); + } + continue; + } + + String jarFileName = current.getName(); + + ModuleVersionNumbers projectedVersionNums; + if (previous == null || !previous.exists()) { + projectedVersionNums = ModuleVersionNumbers.getNewModule(current.getName()); + outputNewModule(jarFileName, projectedVersionNums); + } else { + ModuleVersionNumbers prevVersionNums = ModuleUpdates.getVersionsFromJar(prevCurJars.getLeft()); - ComparisonRecord record = APIDiff.getComparison( - cliArgs.getPreviousVersion(), - cliArgs.getCurrentVersion(), - prevCurJars.getLeft(), - prevCurJars.getRight()); + ComparisonRecord record = APIDiff.getComparison( + cliArgs.getPreviousVersion(), + cliArgs.getCurrentVersion(), + prevCurJars.getLeft(), + prevCurJars.getRight()); - ModuleVersionNumbers projectedVersionNums = ModuleUpdates.getModuleVersionUpdate(prevVersionNums, record.getChangeType()); + projectedVersionNums = ModuleUpdates.getModuleVersionUpdate(prevVersionNums, record.getChangeType()); + outputDiff(jarFileName, record, prevVersionNums, projectedVersionNums); + } - String jarFileName; - if (prevCurJars.getLeft().getName().equalsIgnoreCase(prevCurJars.getRight().getName())) { - jarFileName = prevCurJars.getLeft().getName(); + if (previous.getName().equalsIgnoreCase(current.getName())) { + jarFileName = previous.getName(); } else { - jarFileName = MessageFormat.format("[previous: {0}, current: {1}]", prevCurJars.getLeft().getName(), prevCurJars.getRight().getName()); + jarFileName = MessageFormat.format("[previous: {0}, current: {1}]", previous.getName(), current.getName()); } - outputDiff(jarFileName, record, prevVersionNums, projectedVersionNums); + newVersionNumMapping.put(projectedVersionNums.getRelease().getModuleName(), projectedVersionNums); } catch (IOException ex) { @@ -135,4 +154,35 @@ private static void outputDiff( record.getHumanReadableApiChange() )); } + + + /** + * Outputs new jar file name. + * + * @param jarFileName The jar file name. + * @param projectedVersionNums The calculated version numbers for current + * version. + */ + private static void outputNewModule( + String jarFileName, + ModuleVersionNumbers projectedVersionNums + ) { + LOGGER.log(Level.INFO, MessageFormat.format(""" + + ==================================== + NEW MODULE: {0} + Current Version Numbers: + - release: {1} + - specification: {2} + - implementation: {3} + ==================================== + + + """, + jarFileName, + projectedVersionNums.getRelease().getFullReleaseStr(), + projectedVersionNums.getSpec().getSemVerStr(), + projectedVersionNums.getImplementation() + )); + } } diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java index 16e149f854278ff32bc2a25396bd7294c8a0ec8d..e61ec906f72231691e185e614a8bdd43e58a661d 100644 --- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java +++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java @@ -187,7 +187,7 @@ private static int tryParse(String str, int defaultVal, String resourceForLoggin * @return The module version numbers. * @throws IOException */ - public static ModuleVersionNumbers getVersionsFromJar(File jarFile) throws IOException { + public static ModuleVersionNumbers getVersionsFromJar(File jarFile) throws IOException { Attributes manifest = ManifestLoader.loadFromJar(jarFile); String spec = manifest.getValue(MANIFEST_SPEC_KEY); SemVer specSemVer = parseSemVer(spec, DEFAULT_SEMVER, @@ -220,6 +220,14 @@ public static ModuleVersionNumbers getVersionsFromJar(File jarFile) throws IOExc public static ModuleVersionNumbers getModuleVersionUpdate(ModuleVersionNumbers prev, PublicApiChangeType apiChangeType) { switch (apiChangeType) { case NONE -> { + return new ModuleVersionNumbers( + prev.getModuleName(), + prev.getSpec(), + prev.getImplementation(), + prev.getRelease() + ); + } + case INTERNAL_CHANGE -> { return new ModuleVersionNumbers( prev.getModuleName(), prev.getSpec(), @@ -236,10 +244,7 @@ public static ModuleVersionNumbers getModuleVersionUpdate(ModuleVersionNumbers p prev.getSpec().getPatch() ), prev.getImplementation() + 1, - new ReleaseVal( - prev.getRelease().getModuleName(), - prev.getRelease().getReleaseVersion() - ) + prev.getRelease() ); } case INCOMPATIBLE_CHANGE -> { @@ -247,8 +252,8 @@ public static ModuleVersionNumbers getModuleVersionUpdate(ModuleVersionNumbers p prev.getModuleName(), new SemVer( prev.getSpec().getMajor() + 1, - prev.getSpec().getMinor(), - prev.getSpec().getPatch() + 0, + null ), prev.getImplementation() + 1, new ReleaseVal( @@ -584,6 +589,19 @@ public String getSemVerStr() { * Module version numbers record. */ public static class ModuleVersionNumbers { + + /** + * Returns ModuleVersionNumbers for a brand new module. + * @param moduleName The module name. + * @return The module version numbers + */ + public static ModuleVersionNumbers getNewModule(String moduleName) { + return new ModuleVersionNumbers( + moduleName, + new SemVer(1, 0, null), + 1, + new ReleaseVal(moduleName.replaceAll("-", "."), 1)); + } private final String moduleName; private final SemVer spec; diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java index 8a230e03b3b681302441eaf25ed2342165bc95e5..227d5d9de5027a3a57350f18fc9849e7a328b9b7 100644 --- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java +++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java @@ -25,7 +25,7 @@ * A public API change type (no change, compatible change, incompatible change). */ public enum PublicApiChangeType implements Comparator<PublicApiChangeType> { - NONE(0), COMPATIBLE_CHANGE(1), INCOMPATIBLE_CHANGE(2); + NONE(0), INTERNAL_CHANGE(1), COMPATIBLE_CHANGE(2), INCOMPATIBLE_CHANGE(3); private final int level;