diff --git a/pom.xml b/pom.xml index a8b2e87842..a57550ca7c 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.25 + 1.26 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java diff --git a/src/main/java/org/kohsuke/github/GHRateLimit.java b/src/main/java/org/kohsuke/github/GHRateLimit.java new file mode 100644 index 0000000000..9d54953d54 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHRateLimit.java @@ -0,0 +1,21 @@ +package org.kohsuke.github; + +/** + * Rate limit. + * @author Kohsuke Kawaguchi + */ +public class GHRateLimit { + /** + * Remaining calls that can be made. + */ + public int remaining; + /** + * Alotted API call per hour. + */ + public int limit; + + @Override + public String toString() { + return remaining+"/"+limit; + } +} diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index faffd27d79..faf1ddc66e 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -288,7 +288,10 @@ private void findNextURL(HttpURLConnection uc) throws MalformedURLException { private HttpURLConnection setupConnection(String method, boolean withAuth, URL url) throws IOException { HttpURLConnection uc = (HttpURLConnection) url.openConnection(); - if (withAuth && this.oauthAccessToken == null) + // if the authentication is needed but no credential is given, try it anyway (so that some calls + // that do work with anonymous access in the reduced form should still work.) + // if OAuth token is present, it'll be set in the URL, so need to set the Authorization header + if (withAuth && encodedAuthorization!=null && this.oauthAccessToken == null) uc.setRequestProperty("Authorization", "Basic " + encodedAuthorization); uc.setRequestMethod(method); @@ -355,6 +358,13 @@ private InputStream wrapStream(HttpURLConnection uc, InputStream in) throws IOEx } } + /** + * Gets the current rate limit. + */ + public GHRateLimit getRateLimit() throws IOException { + return retrieveWithAuth3("/rate_limit",JsonRateLimit.class).rate; + } + /** * Gets the {@link GHUser} that represents yourself. */ diff --git a/src/main/java/org/kohsuke/github/JsonRateLimit.java b/src/main/java/org/kohsuke/github/JsonRateLimit.java new file mode 100644 index 0000000000..6276ae9b87 --- /dev/null +++ b/src/main/java/org/kohsuke/github/JsonRateLimit.java @@ -0,0 +1,8 @@ +package org.kohsuke.github; + +/** + * @author Kohsuke Kawaguchi + */ +class JsonRateLimit { + GHRateLimit rate; +} diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 75d40d1712..139e905e3b 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -36,6 +36,10 @@ public void testCredentialValid() throws IOException { assertFalse(GitHub.connect("totally","bogus").isCredentialValid()); } + public void testRateLimit() throws IOException { + System.out.println(GitHub.connect().getRateLimit()); + } + public void testFetchPullRequest() throws Exception { GitHub gh = GitHub.connect(); GHRepository r = gh.getOrganization("jenkinsci").getRepository("jenkins");