From 46bf7e138c9857678f4e40f2f6397773902690e7 Mon Sep 17 00:00:00 2001 From: CofCool Date: Tue, 21 Mar 2023 15:38:21 +0800 Subject: [PATCH] gitCommits2Log add user filter --- pom.xml | 2 +- src/main/java/net/cofcool/toolbox/Tool.java | 9 ++++++ .../internal/GitCommitsToChangelog.java | 21 ++++++------ .../internal/GitCommitsToChangelogTest.java | 9 ++++++ .../gitCommitsToChangelogStyleTest.txt | 8 ++--- .../resources/gitCommitsToChangelogTest.txt | 32 +++++++++---------- 6 files changed, 51 insertions(+), 30 deletions(-) diff --git a/pom.xml b/pom.xml index fc8c09b..cf190c6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.cofcool my-toolbox - 1.0-SNAPSHOT + 1.0.7 my-toolbox https://github.com/cofcool/my-toolbox diff --git a/src/main/java/net/cofcool/toolbox/Tool.java b/src/main/java/net/cofcool/toolbox/Tool.java index b02f48f..72364fb 100644 --- a/src/main/java/net/cofcool/toolbox/Tool.java +++ b/src/main/java/net/cofcool/toolbox/Tool.java @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.stream.Collectors; public interface Tool { @@ -31,6 +32,14 @@ public void ifPresent(Consumer consumer) { } } + public boolean test(Predicate predicate) { + if (val != null) { + return predicate.test(val); + } + + return true; + } + public static Arg of(String key, String val) { return new Arg(key, val, null, false, null); } diff --git a/src/main/java/net/cofcool/toolbox/internal/GitCommitsToChangelog.java b/src/main/java/net/cofcool/toolbox/internal/GitCommitsToChangelog.java index 5d3b6e4..4fa577b 100644 --- a/src/main/java/net/cofcool/toolbox/internal/GitCommitsToChangelog.java +++ b/src/main/java/net/cofcool/toolbox/internal/GitCommitsToChangelog.java @@ -18,7 +18,7 @@ /** * git-log PRETTY FORMATS - * git log --format="%d;%h;%s" + * git log --format="%an;%d;%h;%s" */ public class GitCommitsToChangelog implements Tool { @@ -30,7 +30,7 @@ public ToolName name() { return ToolName.gitCommits2Log; } - // (HEAD -> master, origin/master, origin/HEAD);117826a;Converts: now, replace + // (HEAD -> master, origin/master, origin/HEAD);117826a;Converts: now, replace;CofCool //;1788569;add debug mode //;1ee4312;update doc //;b676feb;update doc @@ -50,7 +50,7 @@ public void run(Args args) throws Exception { } else { String path = args.readArg("path").val(); - String command = "git log --format=%d;%h;%s"; + String command = "git log --format=%an;%d;%h;%s"; getLogger().info("Run command: " + command); Process process = Runtime .getRuntime() @@ -76,14 +76,15 @@ public void run(Args args) throws Exception { var currentTag = new AtomicReference<>(LATEST); Arrays.stream(commitLog.split("\n")) .map(a -> a.split(";")) - .filter(a -> a.length > 2) - .map(a -> new Commit(a[0], a[1], String.join(";", Arrays.copyOfRange(a, 2, a.length)))) + .filter(a -> a.length > 3) + .map(a -> new Commit(a[0], a[1], a[2], String.join(";", Arrays.copyOfRange(a, 3, a.length)))) .map(c -> { c.tag().filter(t -> !noTag).ifPresent(currentTag::set); - return new Commit(currentTag.get(), c.hash, c.message); + return new Commit(c.username, currentTag.get(), c.hash, c.message); }) .sorted(Comparator.comparing(Commit::ref).reversed()) .filter(c -> full || !c.ref.equalsIgnoreCase(LATEST)) + .filter(c -> args.readArg("user").test(u -> u.equalsIgnoreCase(c.username()))) .collect(Collectors.groupingBy(Commit::ref, LinkedHashMap::new, Collectors.toList())) .entrySet() .stream() @@ -117,6 +118,7 @@ public Args config() { .arg(new Arg("path", null, "project directory, must set this or log", false, "./demo/")) .arg(new Arg("log", null, "Git commit log fil", false, "./git-commit-log.txt")) .arg(new Arg("out", "./target/changelog.md", "generate file output path", false, null)) + .arg(new Arg("user", null, "username filter", false, "cofcool")) .arg(new Arg("tag", null, "read commit log to the tag", false, "1.0.0")) .arg(new Arg("no-tag", "false", "if true, read all commit log and write into file", false, null)) .arg(new Arg("full", "false", "if true, read all tags and commit log, then write into file", false, null)) @@ -144,9 +146,10 @@ public Optional find(String val) { } private record Commit( - String ref, - String hash, - String message + String username, + String ref, + String hash, + String message ) { public Optional tag() { if (ref.contains("tag")) { diff --git a/src/test/java/net/cofcool/toolbox/internal/GitCommitsToChangelogTest.java b/src/test/java/net/cofcool/toolbox/internal/GitCommitsToChangelogTest.java index 8457178..f2a557d 100644 --- a/src/test/java/net/cofcool/toolbox/internal/GitCommitsToChangelogTest.java +++ b/src/test/java/net/cofcool/toolbox/internal/GitCommitsToChangelogTest.java @@ -46,6 +46,15 @@ void runWithNoTag() throws Exception { ); } + @Test + void runWithUser() throws Exception { + new GitCommitsToChangelog().run(args.arg("log", Utils.getTestResourcePath("/gitCommitsToChangelogStyleTest.txt")) + .arg("out", "./target/changelog-runWithUser.md") + .arg("full", "true") + .arg("user", "ZhangSan") + ); + } + @Test void style() { Assertions.assertTrue(Style.angular.find("fix(git): test").isPresent()); diff --git a/src/test/resources/gitCommitsToChangelogStyleTest.txt b/src/test/resources/gitCommitsToChangelogStyleTest.txt index 677e0fd..e3ed667 100644 --- a/src/test/resources/gitCommitsToChangelogStyleTest.txt +++ b/src/test/resources/gitCommitsToChangelogStyleTest.txt @@ -1,4 +1,4 @@ - (HEAD -> master, tag: 1.0.4, origin/master, origin/HEAD);117826a;feat(core): Converts: now, replace -;1788569;feat(core): add debug mode -;1ee4312;docs(common): update doc -;b676feb;fix(core): print error +zhangsan; (HEAD -> master, tag: 1.0.4, origin/master, origin/HEAD);117826a;feat(core): Converts: now, replace +cofcool;1788569;feat(core): add debug mode +lisi;1ee4312;docs(common): update doc +lisa;b676feb;fix(core): print error diff --git a/src/test/resources/gitCommitsToChangelogTest.txt b/src/test/resources/gitCommitsToChangelogTest.txt index 00a45a1..56def52 100644 --- a/src/test/resources/gitCommitsToChangelogTest.txt +++ b/src/test/resources/gitCommitsToChangelogTest.txt @@ -1,16 +1,16 @@ - (HEAD -> master, tag: 1.0.4, origin/master, origin/HEAD);117826a;Converts: now, replace -;1788569;add debug mode -;1ee4312;update doc -;b676feb;update doc - (tag: 1.0.1);a9d3e04;add Converts - (tag: 1.0.0);1b67da0;Update maven.yml -;6474b63;Update maven.yml -;97a383e;Update maven.yml -;52ba1b8;Update maven.yml -;2e71e27;Update maven.yml -;61bfdff;Update maven.yml -;6e26d48;github action -;c92e596;fix action -;24f7178;github action -;8f989ce;fix readme -;dc723bc;init +; (HEAD -> master, tag: 1.0.4, origin/master, origin/HEAD);117826a;Converts: now, replace +;;1788569;add debug mode +;;1ee4312;update doc +;;b676feb;update doc +; (tag: 1.0.1);a9d3e04;add Converts +; (tag: 1.0.0);1b67da0;Update maven.yml +;;6474b63;Update maven.yml +;;97a383e;Update maven.yml +;;52ba1b8;Update maven.yml +;;2e71e27;Update maven.yml +;;61bfdff;Update maven.yml +;;6e26d48;github action +;;c92e596;fix action +;;24f7178;github action +;;8f989ce;fix readme +;;dc723bc;init