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");