diff options
Diffstat (limited to 'Differ.java')
-rw-r--r-- | Differ.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Differ.java b/Differ.java new file mode 100644 index 0000000..b53f7fe --- /dev/null +++ b/Differ.java @@ -0,0 +1,68 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2025 The FreeBSD Foundation + * + * This software was developed by Eilertsens Kodeknekkeri <haraldei@anduin.net> + * under sponsorship from The FreeBSD Foundation. + */ + +import java.io.IOException; +import java.io.StringWriter; + +public class Differ +{ + private String commit; + + public static void main(String[] args) + { + var differ = new Differ(args); + differ.run(); + } + + public Differ(String[] args) + { + commit = args[0]; + } + + public void run() + { + try { + String[] cmd = {"git", "diff", "--stat", "--name-only", commit}; + var p = Runtime.getRuntime().exec(cmd); + + p.inputReader() + .lines() + .filter(filename -> { return includeDiff(filename); }) + .forEach(filename -> { System.out.println("[ ] " + filename); }); + } catch (IOException e) { + System.err.println("That didn't work: " + e); + } + } + + private boolean includeDiff(String filename) + { + try { + String[] cmd = {"git", "diff", commit, "--", filename}; + // System.out.println("[*] Running `" + String.join(" ", cmd) + "`..."); + var p = Runtime.getRuntime().exec(cmd); + + return p.inputReader() + .lines() + .anyMatch(line -> { return interestingLine(line); }); + + } catch (IOException e) { + System.err.println("Could not fetch diff: " + e); + return false; + } + } + + private boolean interestingLine(String line) + { + var interesting = line.matches("^[+-][^+-].*") && ! line.matches("^.*Copyright.*"); + + // System.out.println((interesting ? "! " : " ") + line); + + return interesting; + } +} |