From 39631461ae66be7da0dd2d4879279e569557976b Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 24 Apr 2012 16:30:01 -0700 Subject: [PATCH] added list commits --- .../java/org/kohsuke/github/GHRepository.java | 13 +++- .../org/kohsuke/github/PagedIterable.java | 8 +++ .../org/kohsuke/github/PagedIterator.java | 61 +++++++++++++++++++ src/test/java/org/kohsuke/AppTest.java | 12 ++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/kohsuke/github/PagedIterable.java create mode 100644 src/main/java/org/kohsuke/github/PagedIterator.java diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index c20355501..3a1144b05 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -272,7 +272,7 @@ public class GHRepository { String url = "/repos/delete/" + owner.login +"/"+name; DeleteToken token = poster.to(url, DeleteToken.class); - poster.with("delete_token",token.delete_token).to(url); + poster.with("delete_token", token.delete_token).to(url); } /** @@ -373,6 +373,17 @@ public class GHRepository { return c; } + /** + * Lists all the commits. + */ + public PagedIterable listCommits() { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrievePaged(String.format("/repos/%s/%s/commits",owner.login,name),GHCommit[].class,false,V3)); + } + }; + } + /** * * See https://api.github.com/hooks for possible names and their configuration scheme. diff --git a/src/main/java/org/kohsuke/github/PagedIterable.java b/src/main/java/org/kohsuke/github/PagedIterable.java new file mode 100644 index 000000000..2470ca729 --- /dev/null +++ b/src/main/java/org/kohsuke/github/PagedIterable.java @@ -0,0 +1,8 @@ +package org.kohsuke.github; + +/** + * @author Kohsuke Kawaguchi + */ +public interface PagedIterable extends Iterable { + PagedIterator iterator(); +} diff --git a/src/main/java/org/kohsuke/github/PagedIterator.java b/src/main/java/org/kohsuke/github/PagedIterator.java new file mode 100644 index 000000000..7e84588dd --- /dev/null +++ b/src/main/java/org/kohsuke/github/PagedIterator.java @@ -0,0 +1,61 @@ +package org.kohsuke.github; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +/** + * Iterator over a pagenated data source. + * + * Aside from the normal iterator operation, this method exposes {@link #nextPage()} + * that allows the caller to retrieve items per page. + * + * @author Kohsuke Kawaguchi + */ +public class PagedIterator implements Iterator { + private final Iterator base; + + /** + * Current batch that we retrieved but haven't returned to the caller. + */ + private T[] current; + private int pos; + + public PagedIterator(Iterator base) { + this.base = base; + } + + public boolean hasNext() { + return (current!=null && pos nextPage() { + fetch(); + List r = Arrays.asList(current); + r = r.subList(pos,r.size()); + current = null; + pos = 0; + return r; + } +} diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 02598d0d0..dac2ea0b0 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -19,6 +19,7 @@ import org.kohsuke.github.GitHub; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; import java.util.Map; import java.util.Set; import java.util.List; @@ -89,6 +90,17 @@ public class AppTest extends TestCase { assertEquals("changelog.html",f.getFileName()); } + public void testListCommits() throws Exception { + GitHub gitHub = GitHub.connect(); + List sha1 = new ArrayList(); + for (GHCommit c : gitHub.getUser("kohsuke").getRepository("empty-commit").listCommits()) { + System.out.println(c.getSha()); + sha1.add(c.getSha()); + } + assertEquals("fdfad6be4db6f96faea1f153fb447b479a7a9cb7",sha1.get(0)); + assertEquals(1,sha1.size()); + } + public void testBranches() throws Exception { GitHub gitHub = GitHub.connect(); Map b =