Skip to content
This repository has been archived by the owner on Apr 26, 2021. It is now read-only.

Commit

Permalink
Merge pull request #129 from scorphus/get-branch-handler
Browse files Browse the repository at this point in the history
Add handler for `GET /repository/repo/branch` (fix #123)
  • Loading branch information
andrewsmedina committed Jul 25, 2014
2 parents 0e85330 + 7688d53 commit 10461ab
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 0 deletions.
22 changes: 22 additions & 0 deletions api/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,3 +333,25 @@ func GetTree(w http.ResponseWriter, r *http.Request) {
}
w.Write(b)
}

func GetBranch(w http.ResponseWriter, r *http.Request) {
repo := r.URL.Query().Get(":name")
if repo == "" {
err := fmt.Errorf("Error when trying to obtain the branches of repository %s (repository is required).", repo)
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
branches, err := repository.GetBranch(repo)
if err != nil {
err := fmt.Errorf("Error when trying to obtain the branches of repository %s (%s).", repo, err)
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
b, err := json.Marshal(branches)
if err != nil {
err := fmt.Errorf("Error when trying to obtain the branches of repository %s (%s).", repo, err)
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
w.Write(b)
}
75 changes: 75 additions & 0 deletions api/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -971,3 +971,78 @@ func (s *S) TestGetTreeWhenCommandFails(c *gocheck.C) {
c.Assert(recorder.Code, gocheck.Equals, http.StatusBadRequest)
c.Assert(recorder.Body.String(), gocheck.Equals, "Error when trying to obtain tree for path /test on ref master of repository repo (output error).\n")
}

func (s *S) TestGetBranch(c *gocheck.C) {
url := "/repository/repo/branch?:name=repo"
refs := make([]map[string]string, 1)
refs[0] = make(map[string]string)
refs[0]["ref"] = "a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9"
refs[0]["name"] = "doge_barks"
refs[0]["commiterName"] = "doge"
refs[0]["commiterEmail"] = "<much@email.com>"
refs[0]["authorName"] = "doge"
refs[0]["authorEmail"] = "<much@email.com>"
refs[0]["subject"] = "will bark"
mockRetriever := repository.MockContentRetriever{
Refs: refs,
}
repository.Retriever = &mockRetriever
defer func() {
repository.Retriever = nil
}()
request, err := http.NewRequest("GET", url, nil)
c.Assert(err, gocheck.IsNil)
recorder := httptest.NewRecorder()
GetBranch(recorder, request)
c.Assert(recorder.Code, gocheck.Equals, http.StatusOK)
var obj []map[string]string
json.Unmarshal(recorder.Body.Bytes(), &obj)
c.Assert(len(obj), gocheck.Equals, 1)
c.Assert(obj[0]["ref"], gocheck.Equals, refs[0]["ref"])
c.Assert(obj[0]["name"], gocheck.Equals, refs[0]["name"])
c.Assert(obj[0]["commiterName"], gocheck.Equals, refs[0]["commiterName"])
c.Assert(obj[0]["commiterEmail"], gocheck.Equals, refs[0]["commiterEmail"])
c.Assert(obj[0]["authorName"], gocheck.Equals, refs[0]["authorName"])
c.Assert(obj[0]["authorEmail"], gocheck.Equals, refs[0]["authorEmail"])
c.Assert(obj[0]["subject"], gocheck.Equals, refs[0]["subject"])
}

func (s *S) TestGetBranchWhenRepoNotSupplied(c *gocheck.C) {
url := "/repository//branch?:name="
request, err := http.NewRequest("GET", url, nil)
c.Assert(err, gocheck.IsNil)
recorder := httptest.NewRecorder()
GetBranch(recorder, request)
c.Assert(recorder.Code, gocheck.Equals, http.StatusBadRequest)
expected := "Error when trying to obtain the branches of repository (repository is required).\n"
c.Assert(recorder.Body.String(), gocheck.Equals, expected)
}

func (s *S) TestGetBranchWhenRepoNonExistent(c *gocheck.C) {
url := "/repository/repo/branch?:name=repo"
request, err := http.NewRequest("GET", url, nil)
c.Assert(err, gocheck.IsNil)
recorder := httptest.NewRecorder()
GetBranch(recorder, request)
c.Assert(recorder.Code, gocheck.Equals, http.StatusBadRequest)
expected := "Error when trying to obtain the branches of repository repo (Error when trying to obtain the refs of repository repo (Repository does not exist).).\n"
c.Assert(recorder.Body.String(), gocheck.Equals, expected)
}

func (s *S) TestGetBranchWhenCommandFails(c *gocheck.C) {
url := "/repository/repo/branch/?:name=repo"
expected := fmt.Errorf("output error")
mockRetriever := repository.MockContentRetriever{
OutputError: expected,
}
repository.Retriever = &mockRetriever
defer func() {
repository.Retriever = nil
}()
request, err := http.NewRequest("GET", url, nil)
c.Assert(err, gocheck.IsNil)
recorder := httptest.NewRecorder()
GetBranch(recorder, request)
c.Assert(recorder.Code, gocheck.Equals, http.StatusBadRequest)
c.Assert(recorder.Body.String(), gocheck.Equals, "Error when trying to obtain the branches of repository repo (output error).\n")
}
17 changes: 17 additions & 0 deletions docs/source/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,20 @@ Example URLs (http://gandalf-server omitted for clarity)::
$ curl /repository/myrepository/archive/master.zip # gets master and zip format
$ curl /repository/myrepository/archive/master.tar.gz # gets master and tar.gz format
$ curl /repository/myrepository/archive/0.1.0.zip # gets 0.1.0 tag and zip format

Get branch
-----------

Returns a list of all the branches of the specified `repository`.

* Method: GET
* URI: /repository/`:name`/branch
* Format: JSON

Where:

* `:name` is the name of the repository.

Example URL (http://gandalf-server omitted for clarity)::

$ curl /repository/myrepository/branch # gets list of branches
1 change: 1 addition & 0 deletions webserver/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ For an example conf check gandalf/etc/gandalf.conf file.\n %s`
router.Get("/repository/:name/contents", http.HandlerFunc(api.GetFileContents))
router.Get("/repository/:name/tree/:path", http.HandlerFunc(api.GetTree))
router.Get("/repository/:name/tree", http.HandlerFunc(api.GetTree))
router.Get("/repository/:name/branch", http.HandlerFunc(api.GetTree))
router.Get("/healthcheck/", http.HandlerFunc(api.HealthCheck))
router.Post("/hook/:name", http.HandlerFunc(api.AddHook))

Expand Down

0 comments on commit 10461ab

Please sign in to comment.