Compare commits

...

12 Commits

Author SHA1 Message Date
Kohsuke Kawaguchi
e8b8971b72 [maven-release-plugin] prepare release github-api-1.37 2013-03-14 19:06:05 -07:00
Kohsuke Kawaguchi
d5f5fa0e0a doc improvement 2013-03-14 19:02:05 -07:00
Kohsuke Kawaguchi
c284f90a1a adding some more type-safe overloads 2013-03-14 18:56:37 -07:00
Michael Clarke
349df60ce8 Adding in support for the refs command and filters in the API 2013-02-15 23:55:04 +00:00
Michael Clarke
5ccc3f4ccd Adding in support for the compare command in the API 2013-02-15 09:43:27 +00:00
johnou
8ba61bb3a6 Revert 2ef5dec466 and add source encoding to deter build warnings. 2013-01-24 17:31:43 +01:00
Johno Crawford
cb3d413e5e [maven-release-plugin] prepare for next development iteration 2013-01-24 17:23:07 +01:00
Johno Crawford
1837699d8c [maven-release-plugin] prepare release github-api-1.36 2013-01-24 17:22:58 +01:00
johnou
2ef5dec466 Temporary change for release. 2013-01-24 17:20:16 +01:00
Johno Crawford
a46c7acbd2 Merge branch 'master' of github.com:kohsuke/github-api 2013-01-24 16:58:42 +01:00
johnou
769d645237 Normalize api url for oauth constructor. 2013-01-24 16:57:51 +01:00
Kohsuke Kawaguchi
389330df2e [maven-release-plugin] prepare for next development iteration 2013-01-06 16:47:29 -08:00
5 changed files with 264 additions and 3 deletions

View File

@@ -7,7 +7,7 @@
</parent>
<artifactId>github-api</artifactId>
<version>1.35</version>
<version>1.37</version>
<name>GitHub API for Java</name>
<url>http://github-api.kohsuke.org/</url>
<description>GitHub API for Java</description>
@@ -25,6 +25,10 @@
</site>
</distributionManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>

View File

@@ -0,0 +1,156 @@
package org.kohsuke.github;
import java.net.URL;
import java.util.Date;
/**
* The model user for comparing 2 commits in the GitHub API.
*
* @author Michael Clarke
*/
public class GHCompare {
private String url, html_url, permalink_url, diff_url, patch_url;
public Status status;
private int ahead_by, behind_by, total_commits;
private Commit base_commit, merge_base_commit;
private Commit[] commits;
private GHCommit.File[] files;
private GHRepository owner;
public URL getUrl() {
return GitHub.parseURL(url);
}
public URL getHtmlUrl() {
return GitHub.parseURL(html_url);
}
public URL getPermalinkUrl() {
return GitHub.parseURL(permalink_url);
}
public URL getDiffUrl() {
return GitHub.parseURL(diff_url);
}
public URL getPatchUrl() {
return GitHub.parseURL(patch_url);
}
public Status getStatus() {
return status;
}
public int getAheadBy() {
return ahead_by;
}
public int getBehindBy() {
return behind_by;
}
public int getTotalCommits() {
return total_commits;
}
public Commit getBaseCommit() {
return base_commit;
}
public Commit getMergeBaseCommit() {
return merge_base_commit;
}
public Commit[] getCommits() {
return commits;
}
public GHCompare wrap(GHRepository owner) {
this.owner = owner;
for (Commit commit : commits) {
commit.wrapUp(owner);
}
merge_base_commit.wrapUp(owner);
base_commit.wrapUp(owner);
return this;
}
/**
* Compare commits had a child commit element with additional details we want to capture.
* This extenstion of GHCommit provides that.
*/
public static class Commit extends GHCommit {
private InnerCommit commit;
public InnerCommit getCommit() {
return commit;
}
}
public static class InnerCommit {
private String url, sha, message;
private User author, committer;
private Tree tree;
public String getUrl() {
return url;
}
public String getSha() {
return sha;
}
public String getMessage() {
return message;
}
public User getAuthor() {
return author;
}
public User getCommitter() {
return committer;
}
public Tree getTree() {
return tree;
}
}
public static class Tree {
private String url, sha;
public String getUrl() {
return url;
}
public String getSha() {
return sha;
}
}
public static class User {
private String name, email, date;
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public Date getDate() {
return GitHub.parseDate(date);
}
}
public static enum Status {
behind, ahead, identical;
}
}

View File

@@ -0,0 +1,61 @@
package org.kohsuke.github;
import java.net.URL;
/**
* Provides information on a Git ref from GitHub.
*
* @author Michael Clarke
*/
public class GHRef {
private String ref, url;
private GHObject object;
/**
* Name of the ref, such as "refs/tags/abc"
*/
public String getRef() {
return ref;
}
/**
* The API URL of this tag, such as https://api.github.com/repos/jenkinsci/jenkins/git/refs/tags/1.312
*/
public URL getUrl() {
return GitHub.parseURL(url);
}
/**
* The object that this ref points to.
*/
public GHObject getObject() {
return object;
}
public static class GHObject {
private String type, sha, url;
/**
* Type of the object, such as "commit"
*/
public String getType() {
return type;
}
/**
* SHA1 of this object.
*/
public String getSha() {
return sha;
}
/**
* API URL to this Git data, such as https://api.github.com/repos/jenkinsci/jenkins/git/commits/b72322675eb0114363a9a86e9ad5a170d1d07ac0
*/
public URL getUrl() {
return GitHub.parseURL(url);
}
}
}

View File

@@ -393,6 +393,46 @@ public class GHRepository {
return root.retrieve().to(String.format("/repos/%s/%s/hooks/%d", owner.login, name, id), GHHook.class).wrap(this);
}
/**
* Gets a comparison between 2 points in the repository. This would be similar
* to calling <tt>git log id1...id2</tt> against a local repository.
* @param id1 an identifier for the first point to compare from, this can be a sha1 ID (for a commit, tag etc) or a direct tag name
* @param id2 an identifier for the second point to compare to. Can be the same as the first point.
* @return the comparison output
* @throws IOException on failure communicating with GitHub
*/
public GHCompare getCompare(String id1, String id2) throws IOException {
GHCompare compare = root.retrieve().to(String.format("/repos/%s/%s/compare/%s...%s", owner.login, name, id1, id2), GHCompare.class);
return compare.wrap(this);
}
public GHCompare getCompare(GHCommit id1, GHCommit id2) throws IOException {
return getCompare(id1.getSHA1(),id2.getSHA1());
}
public GHCompare getCompare(GHBranch id1, GHBranch id2) throws IOException {
return getCompare(id1.getName(),id2.getName());
}
/**
* Retrieves all refs for the github repository.
* @return an array of GHRef elements coresponding with the refs in the remote repository.
* @throws IOException on failure communicating with GitHub
*/
public GHRef[] getRefs() throws IOException {
return root.retrieve().to(String.format("/repos/%s/%s/git/refs", owner.login, name), GHRef[].class);
}
/**
* Retrienved all refs of the given type for the current GitHub repository.
* @param refType the type of reg to search for e.g. <tt>tags</tt> or <tt>commits</tt>
* @return an array of all refs matching the request type
* @throws IOException on failure communicating with GitHub, potentially due to an invalid ref type being requested
*/
public GHRef[] getRefs(String refType) throws IOException {
return root.retrieve().to(String.format("/repos/%s/%s/git/refs/%s", owner.login, name, refType), GHRef[].class);
}
/**
* Gets a commit object in this repository.
*/

View File

@@ -92,8 +92,8 @@ public class GitHub {
}
private GitHub (String apiUrl, String oauthAccessToken) throws IOException {
this.apiUrl = apiUrl;
if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize
this.apiUrl = apiUrl;
this.encodedAuthorization = null;
this.oauthAccessToken = oauthAccessToken;