From 2e5a9479a844054d9c35c21aa8cc559c09bad7db Mon Sep 17 00:00:00 2001 From: Francois Berthault Date: Mon, 21 Apr 2014 10:45:10 +0200 Subject: [PATCH 01/31] create a Release & Branch --- .../java/org/kohsuke/github/GHRefBuilder.java | 22 ++++++++ .../java/org/kohsuke/github/GHRepository.java | 20 +++++++ src/main/java/org/kohsuke/github/GHTag.java | 56 +++++++++++++++++++ src/test/java/org/kohsuke/AppTest.java | 37 ++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 src/main/java/org/kohsuke/github/GHRefBuilder.java create mode 100644 src/main/java/org/kohsuke/github/GHTag.java diff --git a/src/main/java/org/kohsuke/github/GHRefBuilder.java b/src/main/java/org/kohsuke/github/GHRefBuilder.java new file mode 100644 index 0000000000..232989f9bd --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHRefBuilder.java @@ -0,0 +1,22 @@ +package org.kohsuke.github; + + +import java.io.IOException; + +public class GHRefBuilder { + + private final GHRepository repo; + private final Requester builder; + + public GHRefBuilder(GHRepository ghRepository, String ref, String sha) { + this.repo = ghRepository; + this.builder = new Requester(repo.root); + builder.with("ref", "refs/heads/" +ref); + builder.with("sha", sha); + } + + public void create() throws IOException { + builder.method("POST").to(repo.getApiTailUrl("git/refs")); + } + +} diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 6a6b93ae73..cfb1442170 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -183,6 +183,11 @@ public List getReleases() throws IOException { GHRelease[].class), this)); } + public List getTags() throws IOException { + return Arrays.asList(GHTag.wrap(root.retrieve().to("/repos/" + owner.login + "/" + name + "/tags", + GHTag[].class), this)); + } + protected String getOwnerName() { return owner.login; } @@ -498,6 +503,21 @@ protected void wrapUp(GHCommit[] page) { }; } + private String sha; + public PagedIterable listCommitsSinceSha(String pSha) { + sha=pSha; + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/commits?sha=%s", owner.login, name, sha), GHCommit[].class)) { + protected void wrapUp(GHCommit[] page) { + for (GHCommit c : page) + c.wrapUp(GHRepository.this); + } + }; + } + }; + } + /** * Lists up all the commit comments in this repository. */ diff --git a/src/main/java/org/kohsuke/github/GHTag.java b/src/main/java/org/kohsuke/github/GHTag.java new file mode 100644 index 0000000000..1ec0161350 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHTag.java @@ -0,0 +1,56 @@ +package org.kohsuke.github; + + +public class GHTag { + private GHRepository owner; + private GitHub root; + + private String name; + private GHCommit commit; + + GHTag wrap(GHRepository owner) { + this.owner = owner; + this.root = owner.root; + return this; + } + + static GHTag[] wrap(GHTag[] tags, GHRepository owner) { + for (GHTag tag : tags) { + tag.wrap(owner); + } + return tags; + } + + + public GHRepository getOwner() { + return owner; + } + + public void setOwner(GHRepository owner) { + this.owner = owner; + } + + public GitHub getRoot() { + return root; + } + + public void setRoot(GitHub root) { + this.root = root; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public GHCommit getCommit() { + return commit; + } + + public void setCommit(GHCommit commit) { + this.commit = commit; + } +} diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 2847c0f8ec..fe3c163fe1 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -6,12 +6,15 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -34,7 +37,9 @@ import org.kohsuke.github.GHOrganization; import org.kohsuke.github.GHOrganization.Permission; import org.kohsuke.github.GHPullRequest; +import org.kohsuke.github.GHRefBuilder; import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GHTag; import org.kohsuke.github.GHTeam; import org.kohsuke.github.GHUser; import org.kohsuke.github.GitHub; @@ -489,6 +494,38 @@ public void testCheckMembership() throws Exception { assertFalse(j.hasPublicMember(b)); } + @Test + public void testCreateRelease() throws Exception { + + String tagName = UUID.randomUUID().toString(); + String releaseName = "release-" + tagName; + String repo = "fanfansama/github-api-test-1"; + + + gitHub.getRepository(repo) + .createRelease(tagName) + .name(releaseName) + .prerelease(false) + .create(); + + for(GHTag tag : gitHub.getRepository(repo).getTags()){ + if(tagName.equals(tag.getName())){ + String ash = tag.getCommit().getSHA1(); + new GHRefBuilder(gitHub.getRepository(repo), releaseName, ash ).create(); // create a release branch + + for (Map.Entry entry : gitHub.getRepository(repo).getBranches().entrySet()) + { + System.out.println(entry.getKey() + "/" + entry.getValue()); + if(releaseName.equals(entry.getValue().getName())){ + return; + } + } + fail("banch not found"); + } + } + fail("release creation failed ! tag not found"); + } + private void kohsuke() { Assume.assumeTrue(getUser().getLogin().equals("kohsuke")); } From f68bfcb3e22c402914e224a5f90eae4868f2bb30 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Fri, 9 May 2014 18:39:33 -0700 Subject: [PATCH 02/31] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a3b27867e0..992a311ee9 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.52 + 1.53-SNAPSHOT GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java From c62bc8d5daf47e4aff6f81d92889272a7068ea70 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 11:58:22 -0700 Subject: [PATCH 03/31] subsumed by GHRepository.queryCommits() --- .../java/org/kohsuke/github/GHRepository.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index cfb1442170..8aea5cdebc 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -503,21 +503,6 @@ protected void wrapUp(GHCommit[] page) { }; } - private String sha; - public PagedIterable listCommitsSinceSha(String pSha) { - sha=pSha; - return new PagedIterable() { - public PagedIterator iterator() { - return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/commits?sha=%s", owner.login, name, sha), GHCommit[].class)) { - protected void wrapUp(GHCommit[] page) { - for (GHCommit c : page) - c.wrapUp(GHRepository.this); - } - }; - } - }; - } - /** * Lists up all the commit comments in this repository. */ From 6f6583772d05c1961efdb714653d8a4a5fdfa7eb Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 11:59:46 -0700 Subject: [PATCH 04/31] Should support pagination --- .../java/org/kohsuke/github/GHRepository.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 8aea5cdebc..d6dbd86f78 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -183,9 +183,18 @@ public List getReleases() throws IOException { GHRelease[].class), this)); } - public List getTags() throws IOException { - return Arrays.asList(GHTag.wrap(root.retrieve().to("/repos/" + owner.login + "/" + name + "/tags", - GHTag[].class), this)); + public PagedIterable listTags() throws IOException { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("tags"), GHTag[].class)) { + @Override + protected void wrapUp(GHTag[] page) { + for (GHTag c : page) + c.wrap(GHRepository.this); + } + }; + } + }; } protected String getOwnerName() { From 4340c8cb000a60e7f41d311ec26f845a5b983ccc Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:00:44 -0700 Subject: [PATCH 05/31] Support pagination in releases just like tags --- .../java/org/kohsuke/github/GHRepository.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index d6dbd86f78..f20a752571 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -178,9 +178,26 @@ public GHReleaseBuilder createRelease(String tag) { return new GHReleaseBuilder(this,tag); } + /** + * @deprecated + * use {@link #listReleases()} + */ public List getReleases() throws IOException { - return Arrays.asList(GHRelease.wrap(root.retrieve().to("/repos/" + owner.login + "/" + name + "/releases", - GHRelease[].class), this)); + return listReleases().asList(); + } + + public PagedIterable listReleases() throws IOException { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("releases"), GHRelease[].class)) { + @Override + protected void wrapUp(GHRelease[] page) { + for (GHRelease c : page) + c.wrap(GHRepository.this); + } + }; + } + }; } public PagedIterable listTags() throws IOException { From 7cbd7f999abdc3a12f5c92fdfdad091a5afca1d1 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:08:17 -0700 Subject: [PATCH 06/31] Pointless to define a builder that doesn't take parameters --- .../java/org/kohsuke/github/GHRefBuilder.java | 22 ------------- .../java/org/kohsuke/github/GHRepository.java | 14 ++++++++ src/main/java/org/kohsuke/github/GHTag.java | 32 ++++--------------- 3 files changed, 20 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/org/kohsuke/github/GHRefBuilder.java diff --git a/src/main/java/org/kohsuke/github/GHRefBuilder.java b/src/main/java/org/kohsuke/github/GHRefBuilder.java deleted file mode 100644 index 232989f9bd..0000000000 --- a/src/main/java/org/kohsuke/github/GHRefBuilder.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.kohsuke.github; - - -import java.io.IOException; - -public class GHRefBuilder { - - private final GHRepository repo; - private final Requester builder; - - public GHRefBuilder(GHRepository ghRepository, String ref, String sha) { - this.repo = ghRepository; - this.builder = new Requester(repo.root); - builder.with("ref", "refs/heads/" +ref); - builder.with("sha", sha); - } - - public void create() throws IOException { - builder.method("POST").to(repo.getApiTailUrl("git/refs")); - } - -} diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index f20a752571..e6a970f832 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -178,6 +178,20 @@ public GHReleaseBuilder createRelease(String tag) { return new GHReleaseBuilder(this,tag); } + /** + * Creates a named ref, such as tag, branch, etc. + * + * @param name + * The name of the fully qualified reference (ie: refs/heads/master). + * If it doesn't start with 'refs' and have at least two slashes, it will be rejected. + * @param sha + * The SHA1 value to set this reference to + */ + public GHRef createRef(String name, String sha) throws IOException { + return new Requester(root) + .with("ref", name).with("sha", sha).method("POST").to(getApiTailUrl("git/refs"), GHRef.class); + } + /** * @deprecated * use {@link #listReleases()} diff --git a/src/main/java/org/kohsuke/github/GHTag.java b/src/main/java/org/kohsuke/github/GHTag.java index 1ec0161350..60d4566cc8 100644 --- a/src/main/java/org/kohsuke/github/GHTag.java +++ b/src/main/java/org/kohsuke/github/GHTag.java @@ -1,6 +1,10 @@ package org.kohsuke.github; - +/** + * Represents a tag in {@link GHRepository} + * + * @see GHRepository#listTags() + */ public class GHTag { private GHRepository owner; private GitHub root; @@ -8,49 +12,25 @@ public class GHTag { private String name; private GHCommit commit; - GHTag wrap(GHRepository owner) { + /*package*/ GHTag wrap(GHRepository owner) { this.owner = owner; this.root = owner.root; return this; } - static GHTag[] wrap(GHTag[] tags, GHRepository owner) { - for (GHTag tag : tags) { - tag.wrap(owner); - } - return tags; - } - - public GHRepository getOwner() { return owner; } - public void setOwner(GHRepository owner) { - this.owner = owner; - } - public GitHub getRoot() { return root; } - public void setRoot(GitHub root) { - this.root = root; - } - public String getName() { return name; } - public void setName(String name) { - this.name = name; - } - public GHCommit getCommit() { return commit; } - - public void setCommit(GHCommit commit) { - this.commit = commit; - } } From 8c193d004e7133aab0aca96723f088d1f9dcbc48 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:11:20 -0700 Subject: [PATCH 07/31] Updated test cases to reflect my changes --- src/test/java/org/kohsuke/AppTest.java | 47 +++++++++++++------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index fe3c163fe1..65cd66388e 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -22,7 +22,6 @@ import org.kohsuke.github.GHCommit; import org.kohsuke.github.GHCommit.File; import org.kohsuke.github.GHCommitComment; -import org.kohsuke.github.GHCommitState; import org.kohsuke.github.GHCommitStatus; import org.kohsuke.github.GHEvent; import org.kohsuke.github.GHEventInfo; @@ -37,7 +36,7 @@ import org.kohsuke.github.GHOrganization; import org.kohsuke.github.GHOrganization.Permission; import org.kohsuke.github.GHPullRequest; -import org.kohsuke.github.GHRefBuilder; +import org.kohsuke.github.GHRef; import org.kohsuke.github.GHRepository; import org.kohsuke.github.GHTag; import org.kohsuke.github.GHTeam; @@ -496,34 +495,36 @@ public void testCheckMembership() throws Exception { @Test public void testCreateRelease() throws Exception { + GHRepository r = gitHub.createRepository("github-api-testCreateRelease", "for testing", null, true); - String tagName = UUID.randomUUID().toString(); - String releaseName = "release-" + tagName; - String repo = "fanfansama/github-api-test-1"; - - - gitHub.getRepository(repo) - .createRelease(tagName) - .name(releaseName) - .prerelease(false) - .create(); + try { + String tagName = UUID.randomUUID().toString(); + String releaseName = "release-" + tagName; - for(GHTag tag : gitHub.getRepository(repo).getTags()){ - if(tagName.equals(tag.getName())){ - String ash = tag.getCommit().getSHA1(); - new GHRefBuilder(gitHub.getRepository(repo), releaseName, ash ).create(); // create a release branch + r.createRelease(tagName) + .name(releaseName) + .prerelease(false) + .create(); - for (Map.Entry entry : gitHub.getRepository(repo).getBranches().entrySet()) - { - System.out.println(entry.getKey() + "/" + entry.getValue()); - if(releaseName.equals(entry.getValue().getName())){ - return; + for (GHTag tag : r.listTags()) { + if (tagName.equals(tag.getName())) { + String ash = tag.getCommit().getSHA1(); + GHRef ref = r.createRef("refs/heads/"+releaseName, ash); + assertEquals(ref.getRef(),"refs/heads/"+releaseName); + + for (Map.Entry entry : r.getBranches().entrySet()) { + System.out.println(entry.getKey() + "/" + entry.getValue()); + if (releaseName.equals(entry.getValue().getName())) { + return; + } } + fail("branch not found"); } - fail("banch not found"); } + fail("release creation failed! tag not found"); + } finally { + r.delete(); } - fail("release creation failed ! tag not found"); } private void kohsuke() { From 9c66d9465e6f977ecb205912abe56ed1de0f7e0b Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:27:18 -0700 Subject: [PATCH 08/31] Added removal of release --- .../java/org/kohsuke/github/GHRelease.java | 13 +++++- src/test/java/org/kohsuke/AppTest.java | 42 ++++++++++++++----- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHRelease.java b/src/main/java/org/kohsuke/github/GHRelease.java index 0c405b33e2..1702ab7c93 100644 --- a/src/main/java/org/kohsuke/github/GHRelease.java +++ b/src/main/java/org/kohsuke/github/GHRelease.java @@ -207,7 +207,18 @@ public List getAssets() throws IOException { GHAsset[] assets = builder .method("GET") - .to(owner.getApiTailUrl(format("releases/%d/assets", id)), GHAsset[].class); + .to(getApiTailUrl("assets"), GHAsset[].class); return Arrays.asList(GHAsset.wrap(assets, this)); } + + /** + * Deletes this release. + */ + public void delete() throws IOException { + new Requester(root).method("DELETE").to(owner.getApiTailUrl("releases/"+id)); + } + + private String getApiTailUrl(String end) { + return owner.getApiTailUrl(format("releases/%s/%s",id,end)); + } } diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 65cd66388e..8726071968 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -1,10 +1,12 @@ package org.kohsuke; +import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.UUID; @@ -15,6 +17,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import org.apache.commons.io.IOUtils; import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -37,6 +40,7 @@ import org.kohsuke.github.GHOrganization.Permission; import org.kohsuke.github.GHPullRequest; import org.kohsuke.github.GHRef; +import org.kohsuke.github.GHRelease; import org.kohsuke.github.GHRepository; import org.kohsuke.github.GHTag; import org.kohsuke.github.GHTeam; @@ -53,7 +57,19 @@ public class AppTest { @Before public void setUp() throws Exception { - gitHub = GitHub.connect(); + Properties props = new Properties(); + java.io.File f = new java.io.File(System.getProperty("user.home"), ".github.kohsuke2"); + if (f.exists()) { + FileInputStream in = new FileInputStream(f); + try { + props.load(in); + gitHub = GitHub.connect(props.getProperty("login"),props.getProperty("oauth")); + } finally { + IOUtils.closeQuietly(in); + } + } else { + gitHub = GitHub.connect(); + } } private String getTestRepositoryName() throws IOException { @@ -495,16 +511,19 @@ public void testCheckMembership() throws Exception { @Test public void testCreateRelease() throws Exception { - GHRepository r = gitHub.createRepository("github-api-testCreateRelease", "for testing", null, true); + kohsuke(); - try { - String tagName = UUID.randomUUID().toString(); - String releaseName = "release-" + tagName; + GHRepository r = gitHub.getRepository("kohsuke2/testCreateRelease"); - r.createRelease(tagName) - .name(releaseName) - .prerelease(false) - .create(); + String tagName = UUID.randomUUID().toString(); + String releaseName = "release-" + tagName; + + GHRelease rel = r.createRelease(tagName) + .name(releaseName) + .prerelease(false) + .create(); + + try { for (GHTag tag : r.listTags()) { if (tagName.equals(tag.getName())) { @@ -523,11 +542,12 @@ public void testCreateRelease() throws Exception { } fail("release creation failed! tag not found"); } finally { - r.delete(); + rel.delete(); } } private void kohsuke() { - Assume.assumeTrue(getUser().getLogin().equals("kohsuke")); + String login = getUser().getLogin(); + Assume.assumeTrue(login.equals("kohsuke") || login.equals("kohsuke2")); } } From db1dde533f60c526399e62fe9101a8b78baeb568 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:42:19 -0700 Subject: [PATCH 09/31] Updated tests to use a separate account --- src/test/java/org/kohsuke/AppTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 8726071968..a7787a485d 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -258,13 +258,13 @@ public void testPublicKeys() throws Exception { @Test public void testOrgFork() throws Exception { kohsuke(); - getUser().getRepository("rubywm").forkTo(gitHub.getOrganization("jenkinsci")); + gitHub.getRepository("kohsuke/rubywm").forkTo(gitHub.getOrganization("github-api-test-org")); } @Test public void testGetTeamsForRepo() throws Exception { kohsuke(); - assertEquals(1,gitHub.getOrganization("stapler").getRepository("stapler").getTeams().size()); + assertEquals(1,gitHub.getOrganization("github-api-test-org").getRepository("testGetTeamsForRepo").getTeams().size()); } @Test @@ -456,7 +456,7 @@ public void testOrgRepositories() throws IOException { @Test public void testOrganization() throws IOException { kohsuke(); - GHOrganization j = gitHub.getOrganization("jenkinsci"); + GHOrganization j = gitHub.getOrganization("github-api-test-org"); GHTeam t = j.getTeams().get("Core Developers"); assertNotNull(j.getRepository("jenkins")); From d64453b661c2e40945250bfeee59d58919360dfc Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:44:52 -0700 Subject: [PATCH 10/31] Fixing tests --- src/test/java/org/kohsuke/AppTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 7923c8f209..88f621261e 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -291,16 +291,17 @@ public void testMemberOrgs() throws Exception { public void testOrgTeams() throws Exception { kohsuke(); int sz=0; - for (GHTeam t : gitHub.getOrganization("jenkinsci").listTeams()) { + for (GHTeam t : gitHub.getOrganization("github-api-test-org").listTeams()) { assertNotNull(t.getName()); sz++; } - assertTrue(sz>1000); + assertTrue(sz<100); } + @Test public void testOrgTeamByName() throws Exception { kohsuke(); - GHTeam e = gitHub.getOrganization("jenkinsci").getTeamByName("Everyone"); + GHTeam e = gitHub.getOrganization("github-api-test-org").getTeamByName("Core Developers"); assertNotNull(e); } From c564dc5f294175c65ef127cc79b5e77a227571cc Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:47:28 -0700 Subject: [PATCH 11/31] All tests should use the secondary account --- .../kohsuke/AbstractGitHubApiTestBase.java | 34 +++++++++++++++++++ src/test/java/org/kohsuke/AppTest.java | 22 +----------- src/test/java/org/kohsuke/LifecycleTest.java | 14 ++------ 3 files changed, 38 insertions(+), 32 deletions(-) create mode 100644 src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java diff --git a/src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java b/src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java new file mode 100644 index 0000000000..85bbfe05ef --- /dev/null +++ b/src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java @@ -0,0 +1,34 @@ +package org.kohsuke; + +import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Before; +import org.kohsuke.github.GitHub; + +import java.io.FileInputStream; +import java.util.Properties; + +/** + * @author Kohsuke Kawaguchi + */ +public abstract class AbstractGitHubApiTestBase extends Assert { + + protected GitHub gitHub; + + @Before + public void setUp() throws Exception { + Properties props = new Properties(); + java.io.File f = new java.io.File(System.getProperty("user.home"), ".github.kohsuke2"); + if (f.exists()) { + FileInputStream in = new FileInputStream(f); + try { + props.load(in); + gitHub = GitHub.connect(props.getProperty("login"),props.getProperty("oauth")); + } finally { + IOUtils.closeQuietly(in); + } + } else { + gitHub = GitHub.connect(); + } + } +} diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 88f621261e..e34357a2ed 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -59,27 +59,7 @@ /** * Unit test for simple App. */ -public class AppTest { - - private GitHub gitHub; - - @Before - public void setUp() throws Exception { - Properties props = new Properties(); - java.io.File f = new java.io.File(System.getProperty("user.home"), ".github.kohsuke2"); - if (f.exists()) { - FileInputStream in = new FileInputStream(f); - try { - props.load(in); - gitHub = GitHub.connect(props.getProperty("login"),props.getProperty("oauth")); - } finally { - IOUtils.closeQuietly(in); - } - } else { - gitHub = GitHub.connect(); - } - } - +public class AppTest extends AbstractGitHubApiTestBase { private String getTestRepositoryName() throws IOException { return getUser().getLogin() + "/github-api-test"; } diff --git a/src/test/java/org/kohsuke/LifecycleTest.java b/src/test/java/org/kohsuke/LifecycleTest.java index c248ec4db8..bde868e8b8 100644 --- a/src/test/java/org/kohsuke/LifecycleTest.java +++ b/src/test/java/org/kohsuke/LifecycleTest.java @@ -1,18 +1,17 @@ package org.kohsuke; -import junit.framework.TestCase; import org.apache.commons.io.IOUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import org.junit.Test; import org.kohsuke.github.GHAsset; import org.kohsuke.github.GHIssue; import org.kohsuke.github.GHMilestone; import org.kohsuke.github.GHMyself; import org.kohsuke.github.GHRelease; import org.kohsuke.github.GHRepository; -import org.kohsuke.github.GitHub; import java.io.File; import java.io.FileInputStream; @@ -22,15 +21,8 @@ import java.util.List; import java.util.Properties; -public class LifecycleTest extends TestCase { - private GitHub gitHub; - - @Override - public void setUp() throws Exception { - super.setUp(); - gitHub = GitHub.connect(); - } - +public class LifecycleTest extends AbstractGitHubApiTestBase { + @Test public void testCreateRepository() throws IOException, GitAPIException, InterruptedException { GHMyself myself = gitHub.getMyself(); GHRepository repository = myself.getRepository("github-api-test"); From 3dcd82745ed3f7f63f9275272b7136960ada3545 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 12:52:00 -0700 Subject: [PATCH 12/31] Resolved issue #54 --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 992a311ee9..93819aa2c5 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,6 @@ com.infradna.tool bridge-method-annotation 1.8 - true org.kohsuke.stapler From ed5e3f13a1a26f3e63fc2cd988417876f4673875 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 13:25:33 -0700 Subject: [PATCH 13/31] exposed via getter. This fixes issue #52. --- src/main/java/org/kohsuke/github/GHPerson.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/kohsuke/github/GHPerson.java b/src/main/java/org/kohsuke/github/GHPerson.java index fbabd1dcb6..9ace9f01db 100644 --- a/src/main/java/org/kohsuke/github/GHPerson.java +++ b/src/main/java/org/kohsuke/github/GHPerson.java @@ -206,6 +206,10 @@ public String getBlog() throws IOException { return blog; } + public String getHtmlUrl() { + return html_url; + } + /** * Gets the e-mail address of the user. */ From c784ab6632dadbeae8b43a99438e78a7c31244b1 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 13:52:36 -0700 Subject: [PATCH 14/31] Added Gist support --- src/main/java/org/kohsuke/github/GHGist.java | 164 ++++++++++++++++++ .../org/kohsuke/github/GHGistBuilder.java | 47 +++++ src/main/java/org/kohsuke/github/GHUser.java | 17 ++ src/main/java/org/kohsuke/github/GitHub.java | 11 ++ .../java/org/kohsuke/github/Requester.java | 65 ++++--- 5 files changed, 282 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/kohsuke/github/GHGist.java create mode 100644 src/main/java/org/kohsuke/github/GHGistBuilder.java diff --git a/src/main/java/org/kohsuke/github/GHGist.java b/src/main/java/org/kohsuke/github/GHGist.java new file mode 100644 index 0000000000..ee8f0023e2 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHGist.java @@ -0,0 +1,164 @@ +package org.kohsuke.github; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.io.IOException; +import java.util.Date; + +/** + * Gist + * + * @author Kohsuke Kawaguchi + * @see GHUser#listGists() + * @see GitHub#getGist(String) + */ +public final class GHGist { + /*package almost final*/ GHUser owner; + /*package almost final*/ GitHub root; + + private String url, forks_url, commits_url, id, git_pull_url, git_push_url, html_url; + + @JsonProperty("public") + private boolean _public; + + private String created_at, updated_at, description; + + private int comments; + + private String comments_url; + + /** + * User that owns this Gist. + */ + public GHUser getOwner() { + return owner; + } + + /** + * API URL of this gist, such as 'https://api.github.com/gists/12345' + */ + public String getUrl() { + return url; + } + + public String getForksUrl() { + return forks_url; + } + + public String getCommitsUrl() { + return commits_url; + } + + /** + * ID of this gist, such as '12345' + */ + public String getId() { + return id; + } + + /** + * URL like https://gist.github.com/gists/12345.git + */ + public String getGitPullUrl() { + return git_pull_url; + } + + public String getGitPushUrl() { + return git_push_url; + } + + public String getHtmlUrl() { + return html_url; + } + + public boolean isPublic() { + return _public; + } + + public Date getCreatedAt() { + return GitHub.parseDate(created_at); + } + + public Date getUpdatedAt() { + return GitHub.parseDate(updated_at); + } + + public String getDescription() { + return description; + } + + public int getCommentCount() { + return comments; + } + + /** + * API URL of listing comments. + */ + public String getCommentsUrl() { + return comments_url; + } + + /*package*/ GHGist wrapUp(GHUser owner) { + this.owner = owner; + this.root = owner.root; + return this; + } + + /** + * Used when caller obtains {@link GHGist} without knowing its owner. + * A partially constructed owner object is interned. + */ + /*package*/ GHGist wrapUp(GitHub root) throws IOException { + this.owner = root.getUser(owner); + this.root = root; + return this; + } + + String getApiTailUrl(String tail) { + return "/gist/" + id + '/' + tail; + } + + public void star() throws IOException { + new Requester(root).method("PUT").to(getApiTailUrl("star")); + } + + public void unstar() throws IOException { + new Requester(root).method("DELETE").to(getApiTailUrl("star")); + } + + public boolean isStarred() throws IOException { + return root.retrieve().asHttpStatusCode(getApiTailUrl("star"))/100==2; + } + + /** + * Forks this gist into your own. + */ + public GHGist fork() throws IOException { + return new Requester(root).to(getApiTailUrl("forks"),GHGist.class).wrapUp(root); + } + + public PagedIterable listForks() { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("forks"), GHGist[].class)) { + @Override + protected void wrapUp(GHGist[] page) { + try { + for (GHGist c : page) + c.wrapUp(root); + } catch (IOException e) { + throw new Error(e); + } + } + }; + } + }; + } + + /** + * Deletes this gist. + */ + public void delete() throws IOException { + new Requester(root).method("DELETE").to("/gist/" + id); + } +} diff --git a/src/main/java/org/kohsuke/github/GHGistBuilder.java b/src/main/java/org/kohsuke/github/GHGistBuilder.java new file mode 100644 index 0000000000..ab2fb51c13 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHGistBuilder.java @@ -0,0 +1,47 @@ +package org.kohsuke.github; + +import java.io.IOException; +import java.util.Collections; +import java.util.LinkedHashMap; + +/** + * Builder pattern for creating a new Gist. + * + * @author Kohsuke Kawaguchi + * @see GitHub#createGist() + */ +public class GHGistBuilder { + private final GitHub root; + private final Requester req; + private final LinkedHashMap files = new LinkedHashMap(); + + public GHGistBuilder(GitHub root) { + this.root = root; + req = new Requester(root); + } + + public GHGistBuilder description(String desc) { + req.with("description",desc); + return this; + } + + public GHGistBuilder public_(boolean v) { + req.with("public",v); + return this; + } + + /** + * Adds a new file. + */ + public GHGistBuilder file(String fileName, String content) { + files.put(fileName, Collections.singletonMap("content", content)); + return this; + } + + /** + * Creates a Gist based on the parameters specified thus far. + */ + public GHGist create() throws IOException { + return req.to("/gists",GHGist.class).wrapUp(root); + } +} diff --git a/src/main/java/org/kohsuke/github/GHUser.java b/src/main/java/org/kohsuke/github/GHUser.java index 55c528e3b1..7ebd356d9b 100644 --- a/src/main/java/org/kohsuke/github/GHUser.java +++ b/src/main/java/org/kohsuke/github/GHUser.java @@ -127,6 +127,23 @@ protected void wrapUp(GHEventInfo[] page) { }; } + /** + * Lists Gists created by this user. + */ + public PagedIterable listGists() throws IOException { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator(String.format("/users/%s/gists", login), GHGist[].class)) { + @Override + protected void wrapUp(GHGist[] page) { + for (GHGist c : page) + c.wrapUp(GHUser.this); + } + }; + } + }; + } + @Override public String toString() { return "User:"+login; diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 00f94bd04b..1b990e0368 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -329,6 +329,17 @@ public List getEvents() throws IOException { return Arrays.asList(events); } + /** + * Gets a sigle gist by ID. + */ + public GHGist getGist(String id) throws IOException { + return retrieve().to("/gists/"+id,GHGist.class).wrapUp(this); + } + + public GHGistBuilder createGist() { + return new GHGistBuilder(this); + } + /** * Parses the GitHub event object. * diff --git a/src/main/java/org/kohsuke/github/Requester.java b/src/main/java/org/kohsuke/github/Requester.java index e7e3e4674a..10cb2bfb74 100644 --- a/src/main/java/org/kohsuke/github/Requester.java +++ b/src/main/java/org/kohsuke/github/Requester.java @@ -174,28 +174,7 @@ private T _to(String tailApiUrl, Class type, T instance) throws IOExcepti while (true) {// loop while API rate limit is hit HttpURLConnection uc = setupConnection(root.getApiURL(tailApiUrl)); - if (!method.equals("GET")) { - uc.setDoOutput(true); - uc.setRequestProperty("Content-type", contentType); - - if (body == null) { - Map json = new HashMap(); - for (Entry e : args) { - json.put(e.key, e.value); - } - MAPPER.writeValue(uc.getOutputStream(), json); - } else { - try { - byte[] bytes = new byte[32768]; - int read = 0; - while ((read = body.read(bytes)) != -1) { - uc.getOutputStream().write(bytes, 0, read); - } - } finally { - body.close(); - } - } - } + buildRequest(uc); try { return parse(uc,type,instance); @@ -205,6 +184,48 @@ private T _to(String tailApiUrl, Class type, T instance) throws IOExcepti } } + /** + * Makes a request and just obtains the HTTP status code. + */ + public int asHttpStatusCode(String tailApiUrl) throws IOException { + while (true) {// loop while API rate limit is hit + HttpURLConnection uc = setupConnection(root.getApiURL(tailApiUrl)); + + buildRequest(uc); + + try { + return uc.getResponseCode(); + } catch (IOException e) { + handleApiError(e,uc); + } + } + } + + private void buildRequest(HttpURLConnection uc) throws IOException { + if (!method.equals("GET")) { + uc.setDoOutput(true); + uc.setRequestProperty("Content-type", contentType); + + if (body == null) { + Map json = new HashMap(); + for (Entry e : args) { + json.put(e.key, e.value); + } + MAPPER.writeValue(uc.getOutputStream(), json); + } else { + try { + byte[] bytes = new byte[32768]; + int read = 0; + while ((read = body.read(bytes)) != -1) { + uc.getOutputStream().write(bytes, 0, read); + } + } finally { + body.close(); + } + } + } + } + /** * Loads pagenated resources. * From 9d91ebc47ad67e9d15fc9b2516a4d8980e7e6f34 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 13:53:13 -0700 Subject: [PATCH 15/31] Not sure why tests weren't in the right package --- .../AbstractGitHubApiTestBase.java | 2 +- .../org/kohsuke/{ => github}/AppTest.java | 36 +------------------ .../kohsuke/{ => github}/LifecycleTest.java | 8 +---- 3 files changed, 3 insertions(+), 43 deletions(-) rename src/test/java/org/kohsuke/{ => github}/AbstractGitHubApiTestBase.java (96%) rename src/test/java/org/kohsuke/{ => github}/AppTest.java (94%) rename src/test/java/org/kohsuke/{ => github}/LifecycleTest.java (95%) diff --git a/src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java b/src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java similarity index 96% rename from src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java rename to src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java index 85bbfe05ef..c52dcda461 100644 --- a/src/test/java/org/kohsuke/AbstractGitHubApiTestBase.java +++ b/src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java @@ -1,4 +1,4 @@ -package org.kohsuke; +package org.kohsuke.github; import org.apache.commons.io.IOUtils; import org.junit.Assert; diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java similarity index 94% rename from src/test/java/org/kohsuke/AppTest.java rename to src/test/java/org/kohsuke/github/AppTest.java index e34357a2ed..d12b44683f 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/github/AppTest.java @@ -1,12 +1,10 @@ -package org.kohsuke; +package org.kohsuke.github; -import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import java.util.UUID; @@ -17,44 +15,12 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import org.apache.commons.io.IOUtils; import org.junit.Assume; -import org.junit.Before; import org.junit.Test; -import org.kohsuke.github.GHBranch; -import org.kohsuke.github.GHCommit; import org.kohsuke.github.GHCommit.File; -import org.kohsuke.github.GHCommitComment; -import org.kohsuke.github.GHCommitStatus; -import org.kohsuke.github.GHEvent; -import org.kohsuke.github.GHEventInfo; -import org.kohsuke.github.GHEventPayload; -import org.kohsuke.github.GHHook; -import org.kohsuke.github.GHIssue; -import org.kohsuke.github.GHIssueComment; -import org.kohsuke.github.GHIssueState; -import org.kohsuke.github.GHKey; -import org.kohsuke.github.GHMilestone; -import org.kohsuke.github.GHMyself; -import org.kohsuke.github.GHOrganization; import org.kohsuke.github.GHOrganization.Permission; -import org.kohsuke.github.GHPullRequest; -import org.kohsuke.github.GHRef; -import org.kohsuke.github.GHRelease; -import org.kohsuke.github.GHRepository; -import org.kohsuke.github.GHTag; -import org.kohsuke.github.GHTeam; -import org.kohsuke.github.GHUser; -import org.kohsuke.github.GitHub; -import org.kohsuke.github.PagedIterable; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; import java.util.Date; -import java.util.Map; -import java.util.Set; -import java.util.List; /** * Unit test for simple App. diff --git a/src/test/java/org/kohsuke/LifecycleTest.java b/src/test/java/org/kohsuke/github/LifecycleTest.java similarity index 95% rename from src/test/java/org/kohsuke/LifecycleTest.java rename to src/test/java/org/kohsuke/github/LifecycleTest.java index bde868e8b8..dd75cef627 100644 --- a/src/test/java/org/kohsuke/LifecycleTest.java +++ b/src/test/java/org/kohsuke/github/LifecycleTest.java @@ -1,4 +1,4 @@ -package org.kohsuke; +package org.kohsuke.github; import org.apache.commons.io.IOUtils; import org.eclipse.jgit.api.Git; @@ -6,12 +6,6 @@ import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.junit.Test; -import org.kohsuke.github.GHAsset; -import org.kohsuke.github.GHIssue; -import org.kohsuke.github.GHMilestone; -import org.kohsuke.github.GHMyself; -import org.kohsuke.github.GHRelease; -import org.kohsuke.github.GHRepository; import java.io.File; import java.io.FileInputStream; From 25d426f4834851e6e0328f1153d18ef06c2177de Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 14:03:12 -0700 Subject: [PATCH 16/31] Bug fix based on tests --- src/main/java/org/kohsuke/github/GHGist.java | 18 +++++- .../org/kohsuke/github/GHGistBuilder.java | 1 + .../java/org/kohsuke/github/GistTest.java | 58 +++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/kohsuke/github/GistTest.java diff --git a/src/main/java/org/kohsuke/github/GHGist.java b/src/main/java/org/kohsuke/github/GHGist.java index ee8f0023e2..f9b79db12f 100644 --- a/src/main/java/org/kohsuke/github/GHGist.java +++ b/src/main/java/org/kohsuke/github/GHGist.java @@ -115,7 +115,7 @@ public String getCommentsUrl() { } String getApiTailUrl(String tail) { - return "/gist/" + id + '/' + tail; + return "/gists/" + id + '/' + tail; } public void star() throws IOException { @@ -159,6 +159,20 @@ protected void wrapUp(GHGist[] page) { * Deletes this gist. */ public void delete() throws IOException { - new Requester(root).method("DELETE").to("/gist/" + id); + new Requester(root).method("DELETE").to("/gists/" + id); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GHGist ghGist = (GHGist) o; + return id.equals(ghGist.id); + + } + + @Override + public int hashCode() { + return id.hashCode(); } } diff --git a/src/main/java/org/kohsuke/github/GHGistBuilder.java b/src/main/java/org/kohsuke/github/GHGistBuilder.java index ab2fb51c13..57fd255031 100644 --- a/src/main/java/org/kohsuke/github/GHGistBuilder.java +++ b/src/main/java/org/kohsuke/github/GHGistBuilder.java @@ -42,6 +42,7 @@ public GHGistBuilder file(String fileName, String content) { * Creates a Gist based on the parameters specified thus far. */ public GHGist create() throws IOException { + req._with("files",files); return req.to("/gists",GHGist.class).wrapUp(root); } } diff --git a/src/test/java/org/kohsuke/github/GistTest.java b/src/test/java/org/kohsuke/github/GistTest.java new file mode 100644 index 0000000000..ec80d4a0f2 --- /dev/null +++ b/src/test/java/org/kohsuke/github/GistTest.java @@ -0,0 +1,58 @@ +package org.kohsuke.github; + +import org.junit.Test; + +/** + * @author Kohsuke Kawaguchi + */ +public class GistTest extends AbstractGitHubApiTestBase { + /** + * CRUD operation. + */ + @Test + public void lifecycleTest() throws Exception { + GHGist gist = gitHub.createGist() + .public_(false) + .description("Test Gist") + .file("abc.txt","abc") + .file("def.txt","def") + .create(); + + assertNotNull(gist.getCreatedAt()); + assertNotNull(gist.getUpdatedAt()); + + assertNotNull(gist.getCommentsUrl()); + assertNotNull(gist.getCommitsUrl()); + assertNotNull(gist.getGitPullUrl()); + assertNotNull(gist.getGitPushUrl()); + assertNotNull(gist.getHtmlUrl()); + + gist.delete(); + } + + @Test + public void starTest() throws Exception { + GHGist gist = gitHub.getGist("9903708"); + assertEquals("rtyler",gist.getOwner().getLogin()); + + gist.star(); + assertTrue(gist.isStarred()); + gist.unstar(); + assertFalse(gist.isStarred()); + + GHGist newGist = gist.fork(); + + try { + for (GHGist g : gist.listForks()) { + if (g.equals(newGist)) { + // expected to find it in the clone list + return; + } + } + + fail("Expected to find a newly cloned gist"); + } finally { + newGist.delete(); + } + } +} From 3ec25683f7d2ba916bb4233f250f62a83c4f9786 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 14:03:49 -0700 Subject: [PATCH 17/31] doc improvement --- src/main/java/org/kohsuke/github/GHGist.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/kohsuke/github/GHGist.java b/src/main/java/org/kohsuke/github/GHGist.java index f9b79db12f..6872e7b589 100644 --- a/src/main/java/org/kohsuke/github/GHGist.java +++ b/src/main/java/org/kohsuke/github/GHGist.java @@ -11,6 +11,7 @@ * @author Kohsuke Kawaguchi * @see GHUser#listGists() * @see GitHub#getGist(String) + * @see GitHub#createGist() */ public final class GHGist { /*package almost final*/ GHUser owner; From 2ddb4018b83b2e9d0f04b6b1568d1a1b294e663c Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 14:07:53 -0700 Subject: [PATCH 18/31] added data binding for a file in gist --- src/main/java/org/kohsuke/github/GHGist.java | 21 +++++++ .../java/org/kohsuke/github/GHGistFile.java | 58 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/main/java/org/kohsuke/github/GHGistFile.java diff --git a/src/main/java/org/kohsuke/github/GHGist.java b/src/main/java/org/kohsuke/github/GHGist.java index 6872e7b589..9f757be73b 100644 --- a/src/main/java/org/kohsuke/github/GHGist.java +++ b/src/main/java/org/kohsuke/github/GHGist.java @@ -3,7 +3,11 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.io.IOException; +import java.util.Collections; import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; /** * Gist @@ -28,6 +32,8 @@ public final class GHGist { private String comments_url; + private Map files = new HashMap(); + /** * User that owns this Gist. */ @@ -99,9 +105,18 @@ public String getCommentsUrl() { return comments_url; } + public GHGistFile getFile(String name) { + return files.get(name); + } + + public Map getFiles() { + return Collections.unmodifiableMap(files); + } + /*package*/ GHGist wrapUp(GHUser owner) { this.owner = owner; this.root = owner.root; + wrapUp(); return this; } @@ -112,9 +127,15 @@ public String getCommentsUrl() { /*package*/ GHGist wrapUp(GitHub root) throws IOException { this.owner = root.getUser(owner); this.root = root; + wrapUp(); return this; } + private void wrapUp() { + for (Entry e : files.entrySet()) { + e.getValue().fileName = e.getKey(); + } + } String getApiTailUrl(String tail) { return "/gists/" + id + '/' + tail; } diff --git a/src/main/java/org/kohsuke/github/GHGistFile.java b/src/main/java/org/kohsuke/github/GHGistFile.java new file mode 100644 index 0000000000..3ca324f168 --- /dev/null +++ b/src/main/java/org/kohsuke/github/GHGistFile.java @@ -0,0 +1,58 @@ +package org.kohsuke.github; + +/** + * A file inside {@link GHGist} + * + * @author Kohsuke Kawaguchi + */ +public class GHGistFile { + /*package almost final*/ String fileName; + + private int size; + private String raw_url, type, language, content; + private boolean truncated; + + + public String getFileName() { + return fileName; + } + + /** + * File size in bytes. + */ + public int getSize() { + return size; + } + + /** + * URL that serves this file as-is. + */ + public String getRawUrl() { + return raw_url; + } + + /** + * Content type of this Gist, such as "text/plain" + */ + public String getType() { + return type; + } + + public String getLanguage() { + return language; + } + + /** + * Content of this file. + */ + public String getContent() { + return content; + } + + /** + * (?) indicates if {@link #getContent()} contains a truncated content. + */ + public boolean isTruncated() { + return truncated; + } +} From 688d8ed7bc3d919d462ee7df236c4110c13ec2a5 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 14:11:41 -0700 Subject: [PATCH 19/31] Added databinding for files --- src/main/java/org/kohsuke/github/GHGistFile.java | 2 ++ src/test/java/org/kohsuke/github/GistTest.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/org/kohsuke/github/GHGistFile.java b/src/main/java/org/kohsuke/github/GHGistFile.java index 3ca324f168..605afc993a 100644 --- a/src/main/java/org/kohsuke/github/GHGistFile.java +++ b/src/main/java/org/kohsuke/github/GHGistFile.java @@ -4,6 +4,8 @@ * A file inside {@link GHGist} * * @author Kohsuke Kawaguchi + * @see GHGist#getFile(String) + * @see GHGist#getFiles() */ public class GHGistFile { /*package almost final*/ String fileName; diff --git a/src/test/java/org/kohsuke/github/GistTest.java b/src/test/java/org/kohsuke/github/GistTest.java index ec80d4a0f2..df3baf8eeb 100644 --- a/src/test/java/org/kohsuke/github/GistTest.java +++ b/src/test/java/org/kohsuke/github/GistTest.java @@ -55,4 +55,19 @@ public void starTest() throws Exception { newGist.delete(); } } + + @Test + public void gistFile() throws Exception { + GHGist gist = gitHub.getGist("9903708"); + + assertTrue(gist.isPublic()); + + assertEquals(1,gist.getFiles().size()); + GHGistFile f = gist.getFile("keybase.md"); + + assertEquals("text/plain", f.getType()); + assertEquals("Markdown", f.getLanguage()); + assertTrue(f.getContent().contains("### Keybase proof")); + assertNotNull(f.getContent()); + } } From f2c08bc1e8a7c4873fc59f788bd5c1a643a03197 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:05:48 -0700 Subject: [PATCH 20/31] Added ability to create a pull request. This fixes issue #79. --- pom.xml | 6 +++++ .../java/org/kohsuke/github/GHRepository.java | 27 +++++++++++++++++-- .../github/AbstractGitHubApiTestBase.java | 4 ++- .../org/kohsuke/github/PullRequestTest.java | 18 +++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/test/java/org/kohsuke/github/PullRequestTest.java diff --git a/pom.xml b/pom.xml index 93819aa2c5..4551c03abf 100644 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,12 @@ 1.5.3 true + + org.kohsuke + wordnet-random-name + 1.2 + test + diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index cb3346e4cf..f8c3598e72 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -153,7 +153,7 @@ public List getIssues(GHIssueState state) throws IOException { public List getIssues(GHIssueState state, GHMilestone milestone) throws IOException { return Arrays.asList(GHIssue.wrap(root.retrieve() .to(String.format("/repos/%s/%s/issues?state=%s&milestone=%s", owner.login, name, - state.toString().toLowerCase(), milestone == null ? "none" : "" + milestone.getNumber()), + state.toString().toLowerCase(), milestone == null ? "none" : "" + milestone.getNumber()), GHIssue[].class ), this)); } @@ -469,6 +469,29 @@ protected void wrapUp(GHPullRequest[] page) { }; } + /** + * Creates a new pull request. + * + * @param title + * Required. The title of the pull request. + * @param head + * Required. The name of the branch where your changes are implemented. + * For cross-repository pull requests in the same network, + * namespace head with a user like this: username:branch. + * @param base + * Required. The name of the branch you want your changes pulled into. + * This should be an existing branch on the current repository. + * @param body + * The contents of the pull request. This is the markdown description + * of a pull request. + */ + public GHPullRequest createPullRequest(String title, String head, String base, String body) throws IOException { + return new Requester(root).with("title",title) + .with("head",head) + .with("base",base) + .with("body",body).to(getApiTailUrl("pulls"),GHPullRequest.class).wrapUp(this); + } + /** * Retrieves the currently configured hooks. */ @@ -498,7 +521,7 @@ public GHCompare getCompare(String id1, String id2) throws IOException { } public GHCompare getCompare(GHCommit id1, GHCommit id2) throws IOException { - return getCompare(id1.getSHA1(),id2.getSHA1()); + return getCompare(id1.getSHA1(), id2.getSHA1()); } public GHCompare getCompare(GHBranch id1, GHBranch id2) throws IOException { diff --git a/src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java b/src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java index c52dcda461..e45895d66e 100644 --- a/src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java +++ b/src/test/java/org/kohsuke/github/AbstractGitHubApiTestBase.java @@ -3,7 +3,7 @@ import org.apache.commons.io.IOUtils; import org.junit.Assert; import org.junit.Before; -import org.kohsuke.github.GitHub; +import org.kohsuke.randname.RandomNameGenerator; import java.io.FileInputStream; import java.util.Properties; @@ -31,4 +31,6 @@ public void setUp() throws Exception { gitHub = GitHub.connect(); } } + + protected static final RandomNameGenerator rnd = new RandomNameGenerator(); } diff --git a/src/test/java/org/kohsuke/github/PullRequestTest.java b/src/test/java/org/kohsuke/github/PullRequestTest.java new file mode 100644 index 0000000000..18f4a160f7 --- /dev/null +++ b/src/test/java/org/kohsuke/github/PullRequestTest.java @@ -0,0 +1,18 @@ +package org.kohsuke.github; + +import org.junit.Test; + +/** + * @author Kohsuke Kawaguchi + */ +public class PullRequestTest extends AbstractGitHubApiTestBase { + @Test + public void createPullRequest() throws Exception { + GHRepository j = gitHub.getOrganization("github-api-test-org").getRepository("jenkins"); + String name = rnd.next(); + GHPullRequest p = j.createPullRequest(name, "stable", "master", "## test"); + System.out.println(p.getUrl()); + assertEquals(name, p.getTitle()); + p.close(); + } +} From d33609ee5711cf42d1884b39597486562e8d037f Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:16:12 -0700 Subject: [PATCH 21/31] Make sure getRepositories() for the user himself returns private repositories This fixes issue #88 --- src/main/java/org/kohsuke/github/GHMyself.java | 11 ++++++++++- src/main/java/org/kohsuke/github/GHPerson.java | 11 +++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHMyself.java b/src/main/java/org/kohsuke/github/GHMyself.java index 85c75c0971..06e61f83d3 100644 --- a/src/main/java/org/kohsuke/github/GHMyself.java +++ b/src/main/java/org/kohsuke/github/GHMyself.java @@ -102,7 +102,8 @@ public synchronized Map getAllRepositories() throws IOExcep * * Unlike {@link #getAllRepositories()}, this does not wait until all the repositories are returned. */ - public PagedIterable listAllRepositories() { + @Override + public PagedIterable listRepositories() { return new PagedIterable() { public PagedIterator iterator() { return new PagedIterator(root.retrieve().asIterator("/user/repos", GHRepository[].class)) { @@ -116,6 +117,14 @@ protected void wrapUp(GHRepository[] page) { }; } + /** + * @deprecated + * Use {@link #listRepositories()} + */ + public PagedIterable listAllRepositories() { + return listRepositories(); + } + // public void addEmails(Collection emails) throws IOException { //// new Requester(root,ApiVersion.V3).withCredential().to("/user/emails"); // root.retrieveWithAuth3() diff --git a/src/main/java/org/kohsuke/github/GHPerson.java b/src/main/java/org/kohsuke/github/GHPerson.java index 9ace9f01db..7e17341517 100644 --- a/src/main/java/org/kohsuke/github/GHPerson.java +++ b/src/main/java/org/kohsuke/github/GHPerson.java @@ -43,13 +43,16 @@ protected void populate() throws IOException { } /** - * Gets the repositories this user owns. + * Gets the public repositories this user owns. + * + *

+ * To list your own repositories, including private repositories, + * use {@link GHMyself#listRepositories()} */ public synchronized Map getRepositories() throws IOException { Map repositories = new TreeMap(); - for (List batch : iterateRepositories(100)) { - for (GHRepository r : batch) - repositories.put(r.getName(),r); + for (GHRepository r : listRepositories()) { + repositories.put(r.getName(),r); } return Collections.unmodifiableMap(repositories); } From a071f8bb8602cfc561edbda10bd03cef545cb0e7 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:21:59 -0700 Subject: [PATCH 22/31] Exposed more endpoints. This fixes issue #64. --- .../java/org/kohsuke/github/GHRepository.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index f8c3598e72..7a9fd28eb6 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -59,6 +59,7 @@ public class GHRepository { private String description, homepage, name; private String url; // this is the API url private String html_url; // this is the UI + private String git_url, ssh_url, clone_url, svn_url; private GHUser owner; // not fully populated. beware. private boolean has_issues, has_wiki, fork, has_downloads; @JsonProperty("private") @@ -97,7 +98,7 @@ public String getUrl() { * This URL is read-only. */ public String getGitTransportUrl() { - return "git://github.com/"+getOwnerName()+"/"+name+".git"; + return git_url; } /** @@ -105,7 +106,21 @@ public String getGitTransportUrl() { * This URL is read-only. */ public String gitHttpTransportUrl() { - return "https://github.com/"+getOwnerName()+"/"+name+".git"; + return clone_url; + } + + /** + * Gets the Subversion URL to access this repository: https://github.com/rails/rails + */ + public String getSvnUrl() { + return svn_url; + } + + /** + * Gets the SSH URL to access this repository, such as git@github.com:rails/rails.git + */ + public String getSshUrl() { + return ssh_url; } /** From f58f15925f751cecef45cb87b43bf77ee1a759b3 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:30:33 -0700 Subject: [PATCH 23/31] Fake a big rate limit This fixes issue #78 --- src/main/java/org/kohsuke/github/GitHub.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 1b990e0368..5fb9f7ec58 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -27,6 +27,7 @@ import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.Reader; import java.net.MalformedURLException; @@ -239,7 +240,16 @@ public void setConnector(HttpConnector connector) { * Gets the current rate limit. */ public GHRateLimit getRateLimit() throws IOException { - return retrieve().to("/rate_limit", JsonRateLimit.class).rate; + try { + return retrieve().to("/rate_limit", JsonRateLimit.class).rate; + } catch (FileNotFoundException e) { + // GitHub Enterprise doesn't have the rate limit, so in that case + // return some big number that's not too big. + // see issue #78 + GHRateLimit r = new GHRateLimit(); + r.limit = r.remaining = 1000000; + return r; + } } /** From f39a47f35476b2f484d73ccf0f1da4fbfb492390 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:32:58 -0700 Subject: [PATCH 24/31] This test seems to fail randomly --- src/test/java/org/kohsuke/github/LifecycleTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/org/kohsuke/github/LifecycleTest.java b/src/test/java/org/kohsuke/github/LifecycleTest.java index dd75cef627..b2b10cb448 100644 --- a/src/test/java/org/kohsuke/github/LifecycleTest.java +++ b/src/test/java/org/kohsuke/github/LifecycleTest.java @@ -26,6 +26,7 @@ public void testCreateRepository() throws IOException, GitAPIException, Interrup } repository = gitHub.createRepository("github-api-test", "a test repository used to test kohsuke's github-api", "http://github-api.kohsuke.org/", true); + Thread.sleep(1000); // wait for the repository to become ready assertTrue(repository.getReleases().isEmpty()); try { From 1249199b22c6fba3d9af29b1334e390d319df801 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:34:57 -0700 Subject: [PATCH 25/31] push fails with HTTPS --- src/test/java/org/kohsuke/github/LifecycleTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/kohsuke/github/LifecycleTest.java b/src/test/java/org/kohsuke/github/LifecycleTest.java index b2b10cb448..15afa6fabc 100644 --- a/src/test/java/org/kohsuke/github/LifecycleTest.java +++ b/src/test/java/org/kohsuke/github/LifecycleTest.java @@ -41,7 +41,7 @@ public void testCreateRepository() throws IOException, GitAPIException, Interrup delete(repoDir); Git origin = Git.cloneRepository() .setBare(false) - .setURI(repository.gitHttpTransportUrl()) + .setURI(repository.getSshUrl()) .setDirectory(repoDir) .setCredentialsProvider(getCredentialsProvider(myself)) .call(); From b3580002d0b3d8fb4914c060622134e439ff0a6e Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:37:21 -0700 Subject: [PATCH 26/31] doc improvement --- src/main/java/org/kohsuke/github/GitHub.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 5fb9f7ec58..2488c982a2 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -366,6 +366,9 @@ public T parseEventPayload(Reader r, Class type) t /** * Creates a new repository. * + * To create a repository in an organization, see + * {@link GHOrganization#createRepository(String, String, String, GHTeam, boolean)} + * * @return * Newly created repository. */ From 8c8ba47ef936116f3d7b07a44e854007ff507ef4 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:38:13 -0700 Subject: [PATCH 27/31] Fork into an org to simplify access control --- src/test/java/org/kohsuke/github/LifecycleTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/kohsuke/github/LifecycleTest.java b/src/test/java/org/kohsuke/github/LifecycleTest.java index 15afa6fabc..9f3983e0ff 100644 --- a/src/test/java/org/kohsuke/github/LifecycleTest.java +++ b/src/test/java/org/kohsuke/github/LifecycleTest.java @@ -24,8 +24,8 @@ public void testCreateRepository() throws IOException, GitAPIException, Interrup repository.delete(); Thread.sleep(1000); } - repository = gitHub.createRepository("github-api-test", - "a test repository used to test kohsuke's github-api", "http://github-api.kohsuke.org/", true); + repository = gitHub.getOrganization("github-api-test-org").createRepository("github-api-test", + "a test repository used to test kohsuke's github-api", "http://github-api.kohsuke.org/", "Core Developers", true); Thread.sleep(1000); // wait for the repository to become ready assertTrue(repository.getReleases().isEmpty()); From bf44232d5cbbc3e35666be1ebb2aa44589c9de38 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:42:42 -0700 Subject: [PATCH 28/31] Updated test case --- .../github/GHContentIntegrationTest.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java b/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java index d375f85403..5391de8639 100644 --- a/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java +++ b/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java @@ -1,28 +1,26 @@ package org.kohsuke.github; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; import java.util.List; -import java.util.UUID; /** * Integration test for {@link GHContent}. */ -public class GHContentIntegrationTest extends TestCase { +public class GHContentIntegrationTest extends AbstractGitHubApiTestBase { - private GitHub gitHub; private GHRepository repo; - private String createdFilename; + private String createdFilename = rnd.next(); + @Before @Override public void setUp() throws Exception { super.setUp(); - - gitHub = GitHub.connect(); - repo = gitHub.getRepository("acollign/github-api-test").fork(); - createdFilename = UUID.randomUUID().toString(); + repo = gitHub.getRepository("github-api-test-org/github-api-test").fork(); } + @Test public void testGetFileContent() throws Exception { GHContent content = repo.getFileContent("ghcontent-ro/a-file-with-content"); @@ -30,6 +28,7 @@ public void testGetFileContent() throws Exception { assertEquals("thanks for reading me\n", content.getContent()); } + @Test public void testGetEmptyFileContent() throws Exception { GHContent content = repo.getFileContent("ghcontent-ro/an-empty-file"); @@ -37,12 +36,14 @@ public void testGetEmptyFileContent() throws Exception { assertEquals("", content.getContent()); } + @Test public void testGetDirectoryContent() throws Exception { List entries = repo.getDirectoryContent("ghcontent-ro/a-dir-with-3-entries"); assertTrue(entries.size() == 3); } + @Test public void testCRUDContent() throws Exception { GHContentUpdateResponse created = repo.createContent("this is an awesome file I created\n", "Creating a file for integration tests.", createdFilename); GHContent createdContent = created.getContent(); From f8fe1dda6dbf78cf6683c61991841ea83290eed4 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:46:14 -0700 Subject: [PATCH 29/31] Presence check needs to run on the same repo --- src/test/java/org/kohsuke/github/LifecycleTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/kohsuke/github/LifecycleTest.java b/src/test/java/org/kohsuke/github/LifecycleTest.java index 9f3983e0ff..c4e1d1e0d9 100644 --- a/src/test/java/org/kohsuke/github/LifecycleTest.java +++ b/src/test/java/org/kohsuke/github/LifecycleTest.java @@ -19,12 +19,13 @@ public class LifecycleTest extends AbstractGitHubApiTestBase { @Test public void testCreateRepository() throws IOException, GitAPIException, InterruptedException { GHMyself myself = gitHub.getMyself(); - GHRepository repository = myself.getRepository("github-api-test"); + GHOrganization org = gitHub.getOrganization("github-api-test-org"); + GHRepository repository = org.getRepository("github-api-test"); if (repository != null) { repository.delete(); Thread.sleep(1000); } - repository = gitHub.getOrganization("github-api-test-org").createRepository("github-api-test", + repository = org.createRepository("github-api-test", "a test repository used to test kohsuke's github-api", "http://github-api.kohsuke.org/", "Core Developers", true); Thread.sleep(1000); // wait for the repository to become ready From 8a1f11630543ec321e2821c7a29f1f32dd6ccd94 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:49:31 -0700 Subject: [PATCH 30/31] Renamed to avoid colliding with LifecycleTest --- src/test/java/org/kohsuke/github/GHContentIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java b/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java index 5391de8639..39f8545aaa 100644 --- a/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java +++ b/src/test/java/org/kohsuke/github/GHContentIntegrationTest.java @@ -17,7 +17,7 @@ public class GHContentIntegrationTest extends AbstractGitHubApiTestBase { @Override public void setUp() throws Exception { super.setUp(); - repo = gitHub.getRepository("github-api-test-org/github-api-test").fork(); + repo = gitHub.getRepository("github-api-test-org/GHContentIntegrationTest").fork(); } @Test From c7c1cd8bb35653e068cad7b5b14058c31c46f406 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 10 May 2014 15:52:12 -0700 Subject: [PATCH 31/31] [maven-release-plugin] prepare release github-api-1.53 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4551c03abf..1e1161d95b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.53-SNAPSHOT + 1.53 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java @@ -16,7 +16,7 @@ scm:git:git@github.com/kohsuke/${project.artifactId}.git scm:git:ssh://git@github.com/kohsuke/${project.artifactId}.git http://${project.artifactId}.kohsuke.org/ - HEAD + github-api-1.53