From 42e85d18cf568080aea0e1a7a894c8d00a22748e Mon Sep 17 00:00:00 2001 From: Craig Peterson Date: Fri, 22 May 2015 13:07:01 -0600 Subject: [PATCH] Adding GetReleaseByTag --- github/repos_releases.go | 26 +++++++++++++------------- github/repos_releases_test.go | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/github/repos_releases.go b/github/repos_releases.go index 7496353..d0e041b 100644 --- a/github/repos_releases.go +++ b/github/repos_releases.go @@ -85,18 +85,7 @@ func (s *RepositoriesService) ListReleases(owner, repo string, opt *ListOptions) // GitHub API docs: http://developer.github.com/v3/repos/releases/#get-a-single-release func (s *RepositoriesService) GetRelease(owner, repo string, id int) (*RepositoryRelease, *Response, error) { u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - release := new(RepositoryRelease) - resp, err := s.client.Do(req, release) - if err != nil { - return nil, resp, err - } - return release, resp, err + return s.getSingleRelease(u) } // GetLatestRelease fetches the latest published release for the repository. @@ -104,8 +93,19 @@ func (s *RepositoriesService) GetRelease(owner, repo string, id int) (*Repositor // GitHub API docs: https://developer.github.com/v3/repos/releases/#get-the-latest-release func (s *RepositoriesService) GetLatestRelease(owner, repo string) (*RepositoryRelease, *Response, error) { u := fmt.Sprintf("repos/%s/%s/releases/latest", owner, repo) + return s.getSingleRelease(u) +} - req, err := s.client.NewRequest("GET", u, nil) +// GetLatestReleaseByTag fetches a release with the specified tag. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name +func (s *RepositoriesService) GetReleaseByTag(owner, repo, tag string) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/tags/%s", owner, repo, tag) + return s.getSingleRelease(u) +} + +func (s *RepositoriesService) getSingleRelease(url string) (*RepositoryRelease, *Response, error) { + req, err := s.client.NewRequest("GET", url, nil) if err != nil { return nil, nil, err } diff --git a/github/repos_releases_test.go b/github/repos_releases_test.go index 2e670a0..21808b7 100644 --- a/github/repos_releases_test.go +++ b/github/repos_releases_test.go @@ -75,6 +75,26 @@ func TestRepositoriesService_GetLatestRelease(t *testing.T) { } } +func TestRepositoriesService_GetReleaseByTag(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/releases/tags/foo", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"id":13}`) + }) + + release, resp, err := client.Repositories.GetReleaseByTag("o", "r", "foo") + if err != nil { + t.Errorf("Repositories.GetReleaseByTag returned error: %v\n%v", err, resp.Body) + } + + want := &RepositoryRelease{ID: Int(13)} + if !reflect.DeepEqual(release, want) { + t.Errorf("Repositories.GetReleaseByTag returned %+v, want %+v", release, want) + } +} + func TestRepositoriesService_CreateRelease(t *testing.T) { setup() defer teardown()