Skip to content

Commit 240bcab

Browse files
committed
Merge pull request hub4j#351
2 parents 2f8c399 + cda27d5 commit 240bcab

4 files changed

Lines changed: 155 additions & 0 deletions

File tree

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
package org.kohsuke.github;
2+
3+
import java.io.IOException;
4+
5+
import org.apache.commons.lang.StringUtils;
6+
7+
/**
8+
* Search commits.
9+
*
10+
* @author Marc de Verdelhan
11+
* @see GitHub#searchCommits()
12+
*/
13+
@Preview @Deprecated
14+
public class GHCommitSearchBuilder extends GHSearchBuilder<GHCommit> {
15+
/*package*/ GHCommitSearchBuilder(GitHub root) {
16+
super(root,CommitSearchResult.class);
17+
req.withPreview(Previews.CLOAK);
18+
}
19+
20+
/**
21+
* Search terms.
22+
*/
23+
public GHCommitSearchBuilder q(String term) {
24+
super.q(term);
25+
return this;
26+
}
27+
28+
public GHCommitSearchBuilder author(String v) {
29+
return q("author:"+v);
30+
}
31+
32+
public GHCommitSearchBuilder committer(String v) {
33+
return q("committer:"+v);
34+
}
35+
36+
public GHCommitSearchBuilder authorName(String v) {
37+
return q("author-name:"+v);
38+
}
39+
40+
public GHCommitSearchBuilder committerName(String v) {
41+
return q("committer-name:"+v);
42+
}
43+
44+
public GHCommitSearchBuilder authorEmail(String v) {
45+
return q("author-email:"+v);
46+
}
47+
48+
public GHCommitSearchBuilder committerEmail(String v) {
49+
return q("committer-email:"+v);
50+
}
51+
52+
public GHCommitSearchBuilder authorDate(String v) {
53+
return q("author-date:"+v);
54+
}
55+
56+
public GHCommitSearchBuilder committerDate(String v) {
57+
return q("committer-date:"+v);
58+
}
59+
60+
public GHCommitSearchBuilder merge(boolean merge) {
61+
return q("merge:"+Boolean.valueOf(merge).toString().toLowerCase());
62+
}
63+
64+
public GHCommitSearchBuilder hash(String v) {
65+
return q("hash:"+v);
66+
}
67+
68+
public GHCommitSearchBuilder parent(String v) {
69+
return q("parent:"+v);
70+
}
71+
72+
public GHCommitSearchBuilder tree(String v) {
73+
return q("tree:"+v);
74+
}
75+
76+
public GHCommitSearchBuilder is(String v) {
77+
return q("is:"+v);
78+
}
79+
80+
public GHCommitSearchBuilder user(String v) {
81+
return q("user:"+v);
82+
}
83+
84+
public GHCommitSearchBuilder org(String v) {
85+
return q("org:"+v);
86+
}
87+
88+
public GHCommitSearchBuilder repo(String v) {
89+
return q("repo:"+v);
90+
}
91+
92+
public GHCommitSearchBuilder order(GHDirection v) {
93+
req.with("order",v);
94+
return this;
95+
}
96+
97+
public GHCommitSearchBuilder sort(Sort sort) {
98+
req.with("sort",sort);
99+
return this;
100+
}
101+
102+
public enum Sort { AUTHOR_DATE, COMMITTER_DATE }
103+
104+
private static class CommitSearchResult extends SearchResult<GHCommit> {
105+
private GHCommit[] items;
106+
107+
@Override
108+
/*package*/ GHCommit[] getItems(GitHub root) {
109+
for (GHCommit commit : items) {
110+
String repoName = getRepoName(commit.url);
111+
try {
112+
GHRepository repo = root.getRepository(repoName);
113+
commit.wrapUp(repo);
114+
} catch (IOException ioe) {}
115+
}
116+
return items;
117+
}
118+
}
119+
120+
/**
121+
* @param commitUrl a commit URL
122+
* @return the repo name ("username/reponame")
123+
*/
124+
private static String getRepoName(String commitUrl) {
125+
if (StringUtils.isBlank(commitUrl)) {
126+
return null;
127+
}
128+
int indexOfUsername = (GitHub.GITHUB_URL + "/repos/").length();
129+
String[] tokens = commitUrl.substring(indexOfUsername).split("/", 3);
130+
return tokens[0] + '/' + tokens[1];
131+
}
132+
133+
@Override
134+
protected String getApiUrl() {
135+
return "/search/commits";
136+
}
137+
}

src/main/java/org/kohsuke/github/GitHub.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,14 @@ private boolean isPrivateModeEnabled() {
719719
}
720720
}
721721

722+
/**
723+
* Search commits.
724+
*/
725+
@Preview @Deprecated
726+
public GHCommitSearchBuilder searchCommits() {
727+
return new GHCommitSearchBuilder(this);
728+
}
729+
722730
/**
723731
* Search issues.
724732
*/

src/main/java/org/kohsuke/github/Previews.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
static final String LOKI = "application/vnd.github.loki-preview+json";
88
static final String DRAX = "application/vnd.github.drax-preview+json";
99
static final String SQUIRREL_GIRL = "application/vnd.github.squirrel-girl-preview";
10+
static final String CLOAK = "application/vnd.github.cloak-preview";
1011
}

src/test/java/org/kohsuke/github/AppTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,15 @@ public void testMemberPagenation() throws IOException {
685685
assertFalse(all.isEmpty());
686686
}
687687

688+
@Test
689+
public void testCommitSearch() throws IOException {
690+
PagedSearchIterable<GHCommit> r = gitHub.searchCommits().author("kohsuke").list();
691+
assertTrue(r.getTotalCount() > 0);
692+
693+
GHCommit firstCommit = r.iterator().next();
694+
assertTrue(firstCommit.getFiles().size() > 0);
695+
}
696+
688697
@Test
689698
public void testIssueSearch() throws IOException {
690699
PagedSearchIterable<GHIssue> r = gitHub.searchIssues().mentions("kohsuke").isOpen().list();

0 commit comments

Comments
 (0)