diff --git a/pom.xml b/pom.xml
index b8aadaafff..7675cf7dee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
github-api
- 1.17
+ 1.18
GitHub API for Java
http://github-api.kohsuke.org/
GitHub API for Java
diff --git a/src/main/java/org/kohsuke/github/GHMilestone.java b/src/main/java/org/kohsuke/github/GHMilestone.java
new file mode 100644
index 0000000000..e32f13843b
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHMilestone.java
@@ -0,0 +1,73 @@
+package org.kohsuke.github;
+
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ *
+ * @author Yusuke Kokubo
+ *
+ */
+public class GHMilestone {
+ GitHub root;
+ GHRepository owner;
+
+ GHUser creator;
+ private String state, due_on, title, url, created_at, description;
+ private int closed_issues, open_issues, number;
+
+ public GitHub getRoot() {
+ return root;
+ }
+
+ public GHRepository getOwner() {
+ return owner;
+ }
+
+ public GHUser getCreator() {
+ return creator;
+ }
+
+ public Date getDueOn() {
+ if (due_on == null) return null;
+ return GitHub.parseDate(due_on);
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public Date getCreatedAt() {
+ return GitHub.parseDate(created_at);
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public int getClosedIssues() {
+ return closed_issues;
+ }
+
+ public int getOpenIssues() {
+ return open_issues;
+ }
+
+ public int getNumber() {
+ return number;
+ }
+
+ public GHMilestoneState getState() {
+ return Enum.valueOf(GHMilestoneState.class, state.toUpperCase(Locale.ENGLISH));
+ }
+
+ public GHMilestone wrap(GHRepository repo) {
+ this.owner = repo;
+ this.root = repo.root;
+ return this;
+ }
+}
diff --git a/src/main/java/org/kohsuke/github/GHMilestoneState.java b/src/main/java/org/kohsuke/github/GHMilestoneState.java
new file mode 100644
index 0000000000..92194546cb
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHMilestoneState.java
@@ -0,0 +1,11 @@
+package org.kohsuke.github;
+
+/**
+ *
+ * @author Yusuke Kokubo
+ *
+ */
+public enum GHMilestoneState {
+ OPEN,
+ CLOSED
+}
\ No newline at end of file
diff --git a/src/main/java/org/kohsuke/github/GHMyself.java b/src/main/java/org/kohsuke/github/GHMyself.java
new file mode 100644
index 0000000000..fe00518e96
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHMyself.java
@@ -0,0 +1,34 @@
+package org.kohsuke.github;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Represents the account that's logging into GitHub.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class GHMyself extends GHUser {
+ /**
+ * Returns the read-only list of e-mail addresses configured for you.
+ *
+ * This corresponds to the stuff you configure in https://github.com/settings/emails,
+ * and not to be confused with {@link #getEmail()} that shows your public e-mail address
+ * set in https://github.com/settings/profile
+ *
+ * @return
+ * Always non-null.
+ */
+ public List getEmails() throws IOException {
+ String[] addresses = root.retrieveWithAuth3("/user/emails",String[].class);
+ return Collections.unmodifiableList(Arrays.asList(addresses));
+ }
+
+// public void addEmails(Collection emails) throws IOException {
+//// new Poster(root,ApiVersion.V3).withCredential().to("/user/emails");
+// root.retrieveWithAuth3()
+// }
+}
diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java
index 20392d1192..83eb21ad91 100644
--- a/src/main/java/org/kohsuke/github/GHRepository.java
+++ b/src/main/java/org/kohsuke/github/GHRepository.java
@@ -42,12 +42,14 @@
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import java.util.TreeMap;
import static java.util.Arrays.*;
import static org.kohsuke.github.ApiVersion.V3;
@@ -68,6 +70,7 @@ public class GHRepository {
private boolean has_issues, has_wiki, fork, _private, has_downloads;
private int watchers,forks,open_issues;
private String created_at, pushed_at;
+ private Map milestones = new HashMap();
public String getDescription() {
return description;
@@ -458,6 +461,34 @@ public boolean remove(Object url) {
return this;
}
+ public Map getMilestones() throws IOException {
+ Map milestones = new TreeMap();
+ GHMilestone[] ms = root.retrieve3("/repos/"+owner.login+"/"+name+"/milestones", GHMilestone[].class);
+ for (GHMilestone m : ms) {
+ m.owner = this;
+ m.root = root;
+ milestones.put(m.getNumber(), m);
+ }
+ return milestones;
+ }
+
+ public GHMilestone getMilestone(int number) throws IOException {
+ GHMilestone m = milestones.get(number);
+ if (m == null) {
+ m = root.retrieve3("/repos/"+owner.login+"/"+name+"/milestones/"+number, GHMilestone.class);
+ m.owner = this;
+ m.root = root;
+ milestones.put(m.getNumber(), m);
+ }
+ return m;
+ }
+
+ public GHMilestone createMilestone(String title, String description) throws IOException {
+ return new Poster(root,V3).withCredential()
+ .with("title", title).with("description", description)
+ .to("/repos/"+owner.login+"/"+name+"/milestones", GHMilestone.class,"POST").wrap(this);
+ }
+
@Override
public String toString() {
return "Repository:"+owner.login+":"+name;
diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java
index 8f3c472c58..d95287f243 100644
--- a/src/main/java/org/kohsuke/github/GitHub.java
+++ b/src/main/java/org/kohsuke/github/GitHub.java
@@ -49,6 +49,7 @@
import java.util.Properties;
import java.util.TimeZone;
+import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import org.apache.commons.io.IOUtils;
import org.codehaus.jackson.map.DeserializationConfig.Feature;
import org.codehaus.jackson.map.ObjectMapper;
@@ -240,19 +241,16 @@ private T _retrieve(String tailApiUrl, Class type, String method, boolean
/**
* Gets the {@link GHUser} that represents yourself.
*/
- public GHUser getMyself() throws IOException {
+ @WithBridgeMethods(GHUser.class)
+ public GHMyself getMyself() throws IOException {
requireCredential();
- if (oauthAccessToken != null) {
- GHUser u = retrieveWithAuth("/user/show", JsonUser.class).user;
-
- u.root = this;
- users.put(u.getLogin(), u);
-
- return u;
- } else {
- return getUser(login);
- }
+ GHMyself u = retrieveWithAuth("/user/show", JsonMyself.class).user;
+
+ u.root = this;
+ users.put(u.getLogin(), u);
+
+ return u;
}
/**
diff --git a/src/main/java/org/kohsuke/github/JsonMyself.java b/src/main/java/org/kohsuke/github/JsonMyself.java
new file mode 100644
index 0000000000..419d840d49
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/JsonMyself.java
@@ -0,0 +1,8 @@
+package org.kohsuke.github;
+
+/**
+ * @author Kohsuke Kawaguchi
+ */
+class JsonMyself {
+ GHMyself user;
+}
diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java
index 8e49623f93..a9af305266 100644
--- a/src/test/java/org/kohsuke/AppTest.java
+++ b/src/test/java/org/kohsuke/AppTest.java
@@ -64,8 +64,8 @@ public void tryHook() throws Exception {
for (GHHook h : r.getHooks())
h.delete();
}
-
- public void testApp() throws IOException {
+
+ public void testEventApi() throws Exception {
GitHub gitHub = GitHub.connect();
for (GHEventInfo ev : gitHub.getEvents()) {
System.out.println(ev);
@@ -75,6 +75,11 @@ public void testApp() throws IOException {
System.out.println(pr.getPullRequest());
}
}
+ }
+
+ public void testApp() throws IOException {
+ GitHub gitHub = GitHub.connect();
+ System.out.println(gitHub.getMyself().getEmails());
// GHRepository r = gitHub.connect().getOrganization("jenkinsci").createRepository("kktest4", "Kohsuke's test", "http://kohsuke.org/", "Everyone", true);
// r.fork();