From 64af13f40d7c97862a1379758e3c157445c7095e Mon Sep 17 00:00:00 2001 From: mdeverdelhan Date: Thu, 30 Mar 2017 12:55:55 +0200 Subject: [PATCH 1/2] Add the Commit search API (still in preview) --- .../kohsuke/github/GHCommitSearchBuilder.java | 115 ++++++++++++++++++ .../org/kohsuke/github/GHQueryBuilder.java | 2 +- src/main/java/org/kohsuke/github/GitHub.java | 8 ++ .../java/org/kohsuke/github/Previews.java | 1 + src/test/java/org/kohsuke/github/AppTest.java | 6 + 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java diff --git a/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java b/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java new file mode 100644 index 0000000000..790c06149d --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java @@ -0,0 +1,115 @@ +package org.kohsuke.github; + +import java.util.Locale; + +/** + * Search commits. + * + * @author Marc de Verdelhan + * @see GitHub#searchCommits() + */ +@Preview @Deprecated +public class GHCommitSearchBuilder extends GHSearchBuilder { + /*package*/ GHCommitSearchBuilder(GitHub root) { + super(root,CommitSearchResult.class); + req = req.withPreview(Previews.CLOAK); + } + + /** + * Search terms. + */ + public GHCommitSearchBuilder q(String term) { + super.q(term); + return this; + } + + public GHCommitSearchBuilder author(String v) { + return q("author:"+v); + } + + public GHCommitSearchBuilder committer(String v) { + return q("committer:"+v); + } + + public GHCommitSearchBuilder authorName(String v) { + return q("author-name:"+v); + } + + public GHCommitSearchBuilder committerName(String v) { + return q("committer-name:"+v); + } + + public GHCommitSearchBuilder authorEmail(String v) { + return q("author-email:"+v); + } + + public GHCommitSearchBuilder committerEmail(String v) { + return q("committer-email:"+v); + } + + public GHCommitSearchBuilder authorDate(String v) { + return q("author-date:"+v); + } + + public GHCommitSearchBuilder committerDate(String v) { + return q("committer-date:"+v); + } + + public GHCommitSearchBuilder merge(boolean merge) { + return q("merge:"+Boolean.valueOf(merge).toString().toLowerCase()); + } + + public GHCommitSearchBuilder hash(String v) { + return q("hash:"+v); + } + + public GHCommitSearchBuilder parent(String v) { + return q("parent:"+v); + } + + public GHCommitSearchBuilder tree(String v) { + return q("tree:"+v); + } + + public GHCommitSearchBuilder is(String v) { + return q("is:"+v); + } + + public GHCommitSearchBuilder user(String v) { + return q("user:"+v); + } + + public GHCommitSearchBuilder org(String v) { + return q("org:"+v); + } + + public GHCommitSearchBuilder repo(String v) { + return q("repo:"+v); + } + + public GHCommitSearchBuilder order(GHDirection v) { + req.with("order",v); + return this; + } + + public GHCommitSearchBuilder sort(Sort sort) { + req.with("sort",sort); + return this; + } + + public enum Sort { AUTHOR_DATE, COMMITTER_DATE } + + private static class CommitSearchResult extends SearchResult { + private GHCommit[] items; + + @Override + /*package*/ GHCommit[] getItems(GitHub root) { + return items; + } + } + + @Override + protected String getApiUrl() { + return "/search/commits"; + } +} diff --git a/src/main/java/org/kohsuke/github/GHQueryBuilder.java b/src/main/java/org/kohsuke/github/GHQueryBuilder.java index bb85fbbe95..5eca4278a1 100644 --- a/src/main/java/org/kohsuke/github/GHQueryBuilder.java +++ b/src/main/java/org/kohsuke/github/GHQueryBuilder.java @@ -7,7 +7,7 @@ */ public abstract class GHQueryBuilder { protected final GitHub root; - protected final Requester req; + protected Requester req; /*package*/ GHQueryBuilder(GitHub root) { this.root = root; diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 896fb36c63..49c860e4dc 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -719,6 +719,14 @@ private boolean isPrivateModeEnabled() { } } + /** + * Search commits. + */ + @Preview @Deprecated + public GHCommitSearchBuilder searchCommits() { + return new GHCommitSearchBuilder(this); + } + /** * Search issues. */ diff --git a/src/main/java/org/kohsuke/github/Previews.java b/src/main/java/org/kohsuke/github/Previews.java index 238b062b8b..b663122d4b 100644 --- a/src/main/java/org/kohsuke/github/Previews.java +++ b/src/main/java/org/kohsuke/github/Previews.java @@ -8,4 +8,5 @@ static final String DRAX = "application/vnd.github.drax-preview+json"; static final String SQUIRREL_GIRL = "application/vnd.github.squirrel-girl-preview"; static final String KORRA = "application/vnd.github.korra-preview"; + static final String CLOAK = "application/vnd.github.cloak-preview"; } diff --git a/src/test/java/org/kohsuke/github/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java index a20b2eccf3..08a6188d66 100755 --- a/src/test/java/org/kohsuke/github/AppTest.java +++ b/src/test/java/org/kohsuke/github/AppTest.java @@ -685,6 +685,12 @@ public void testMemberPagenation() throws IOException { assertFalse(all.isEmpty()); } + @Test + public void testCommitSearch() throws IOException { + PagedSearchIterable r = gitHub.searchCommits().author("kohsuke").list(); + assertTrue(r.getTotalCount() > 0); + } + @Test public void testIssueSearch() throws IOException { PagedSearchIterable r = gitHub.searchIssues().mentions("kohsuke").isOpen().list(); From c9b5074bc40efc6a97deef5f48812807dc3a305e Mon Sep 17 00:00:00 2001 From: mdeverdelhan Date: Thu, 11 May 2017 12:32:34 +0200 Subject: [PATCH 2/2] Fix the wrapping of retrieved commits (owner/repository) --- .../kohsuke/github/GHCommitSearchBuilder.java | 23 +++++++++++++++++++ src/test/java/org/kohsuke/github/AppTest.java | 3 +++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java b/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java index 790c06149d..1385b0c67e 100644 --- a/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java +++ b/src/main/java/org/kohsuke/github/GHCommitSearchBuilder.java @@ -1,7 +1,10 @@ package org.kohsuke.github; +import java.io.IOException; import java.util.Locale; +import org.apache.commons.lang.StringUtils; + /** * Search commits. * @@ -104,9 +107,29 @@ private static class CommitSearchResult extends SearchResult { @Override /*package*/ GHCommit[] getItems(GitHub root) { + for (GHCommit commit : items) { + String repoName = getRepoName(commit.url); + try { + GHRepository repo = root.getRepository(repoName); + commit.wrapUp(repo); + } catch (IOException ioe) {} + } return items; } } + + /** + * @param commitUrl a commit URL + * @return the repo name ("username/reponame") + */ + private static String getRepoName(String commitUrl) { + if (StringUtils.isBlank(commitUrl)) { + return null; + } + int indexOfUsername = (GitHub.GITHUB_URL + "/repos/").length(); + String[] tokens = commitUrl.substring(indexOfUsername).split("/", 3); + return tokens[0] + '/' + tokens[1]; + } @Override protected String getApiUrl() { diff --git a/src/test/java/org/kohsuke/github/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java index 08a6188d66..248bd0ef11 100755 --- a/src/test/java/org/kohsuke/github/AppTest.java +++ b/src/test/java/org/kohsuke/github/AppTest.java @@ -689,6 +689,9 @@ public void testMemberPagenation() throws IOException { public void testCommitSearch() throws IOException { PagedSearchIterable r = gitHub.searchCommits().author("kohsuke").list(); assertTrue(r.getTotalCount() > 0); + + GHCommit firstCommit = r.iterator().next(); + assertTrue(firstCommit.getFiles().size() > 0); } @Test