diff --git a/pom.xml b/pom.xml index 015506a02a..bba5978ae8 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.28 + 1.29 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java diff --git a/src/main/java/org/kohsuke/github/GHOrganization.java b/src/main/java/org/kohsuke/github/GHOrganization.java index d2c124d4ec..f15626370c 100644 --- a/src/main/java/org/kohsuke/github/GHOrganization.java +++ b/src/main/java/org/kohsuke/github/GHOrganization.java @@ -45,7 +45,7 @@ public Map getTeams() throws IOException { GHTeam[] teams = root.retrieveWithAuth("/orgs/" + login + "/teams", GHTeam[].class); Map r = new TreeMap(); for (GHTeam t : teams) { - r.put(t.getName(),t); + r.put(t.getName(),t.wrapUp(this)); } return r; } diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 031a6d65bf..6ff0553580 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -32,6 +32,7 @@ import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import java.io.IOException; +import java.io.InterruptedIOException; import java.net.URL; import java.util.AbstractSet; import java.util.ArrayList; @@ -269,8 +270,11 @@ public void setEmailServiceHook(String address) throws IOException { } private void edit(String key, String value) throws IOException { - new Poster(root).withCredential().with(key,value) - .to("/repos/" + owner.login + "/" + name,null,"PATCH"); + Poster poster = new Poster(root).withCredential(); + if (!key.equals("name")) + poster.with("name", name); // even when we don't change the name, we need to send it in + poster.with(key, value) + .to("/repos/" + owner.login + "/" + name, null, "PATCH"); } /** @@ -310,12 +314,7 @@ public void setHomepage(String value) throws IOException { * Deletes this repository. */ public void delete() throws IOException { - throw new UnsupportedOperationException(); // doesn't appear to be available in V3 -// Poster poster = new Poster(root).withCredential(); -// String url = "/repos/delete/" + owner.login +"/"+name; -// -// DeleteToken token = poster.to(url, DeleteToken.class); -// poster.with("delete_token", token.delete_token).to(url); + new Poster(root).withCredential().to("/repos/" + owner.login +"/"+name, null, "DELETE"); } /** @@ -336,7 +335,18 @@ public GHRepository fork() throws IOException { */ public GHRepository forkTo(GHOrganization org) throws IOException { new Poster(root).withCredential().to(String.format("/repos/%s/%s/forks?org=%s",owner.login,name,org.getLogin())); - return org.getRepository(name); + + // this API is asynchronous. we need to wait for a bit + for (int i=0; i<10; i++) { + GHRepository r = org.getRepository(name); + if (r!=null) return r; + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + throw (IOException)new InterruptedIOException().initCause(e); + } + } + throw new IOException(this+" was forked into "+org.getLogin()+" but can't find the new repository"); } /** diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 687e414c5a..9f8d1df240 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -285,12 +285,12 @@ private HttpURLConnection setupConnection(String method, boolean withAuth, URL u uc.setRequestProperty("Authorization", "Basic " + encodedAuthorization); uc.setRequestMethod(method); + uc.setRequestProperty("Accept-Encoding", "gzip"); if (method.equals("PUT")) { uc.setDoOutput(true); uc.setRequestProperty("Content-Length","0"); uc.getOutputStream().close(); } - uc.setRequestProperty("Accept-Encoding", "gzip"); return uc; } diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index ae64a3600e..120ef0e7c1 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -31,6 +31,16 @@ * Unit test for simple App. */ public class AppTest extends TestCase { + public void testRepoCRUD() throws Exception { + GitHub hub = GitHub.connect(); + GHRepository r = hub.createRepository("github-api-test", "a test repository", "http://github-api.kohsuke.org/", true); + r.enableIssueTracker(false); + r.enableDownloads(false); + r.enableWiki(false); + r.renameTo("github-api-test2"); + hub.getMyself().getRepository("github-api-test2").delete(); + } + public void testCredentialValid() throws IOException { assertTrue(GitHub.connect().isCredentialValid()); assertFalse(GitHub.connect("totally","bogus").isCredentialValid()); @@ -253,11 +263,6 @@ private void tryRenaming(GitHub gitHub) throws IOException { gitHub.getUser("kohsuke").getRepository("test").renameTo("test2"); } - private void tryOrgFork(GitHub gitHub) throws IOException { - GHOrganization o = gitHub.getOrganization("HudsonLabs"); - System.out.println(gitHub.getUser("rtyler").getRepository("memcache-ada").forkTo(o).getUrl()); - } - private void tryTeamCreation(GitHub gitHub) throws IOException { GHOrganization o = gitHub.getOrganization("HudsonLabs"); GHTeam t = o.createTeam("auto team", Permission.PUSH);