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