Browse Source

Fixes path escaping for Repositories.GetContents

Fixes #308.
Fixes #309.

Change-Id: I71d1422c90f32cc6e6834ed428a311a2b2b88778
Piotr Zurek 10 years ago
committed by Glenn Lewis
parent
commit
44e82c5a7a
2 changed files with 27 additions and 3 deletions
  1. +1
    -3
      github/repos_contents.go
  2. +26
    -0
      github/repos_contents_test.go

+ 1
- 3
github/repos_contents.go View File

@ -128,9 +128,7 @@ func (s *RepositoriesService) DownloadContents(owner, repo, filepath string, opt
//
// GitHub API docs: http://developer.github.com/v3/repos/contents/#get-contents
func (s *RepositoriesService) GetContents(owner, repo, path string, opt *RepositoryContentGetOptions) (fileContent *RepositoryContent, directoryContent []*RepositoryContent, resp *Response, err error) {
// escape characters not allowed in URL path. This actually escapes a
// lot more, but seems to be harmless.
escapedPath := url.QueryEscape(path)
escapedPath := (&url.URL{Path: path}).String()
u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, escapedPath)
u, err = addOptions(u, opt)
if err != nil {


+ 26
- 0
github/repos_contents_test.go View File

@ -154,6 +154,32 @@ func TestRepositoriesService_GetContents_FilenameNeedsEscape(t *testing.T) {
}
}
func TestRepositoriesService_GetContents_DirectoryWithSpaces(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/repos/o/r/contents/some directory/file.go", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{}`)
})
_, _, _, err := client.Repositories.GetContents("o", "r", "some directory/file.go", &RepositoryContentGetOptions{})
if err != nil {
t.Fatalf("Repositories.GetContents returned error: %v", err)
}
}
func TestRepositoriesService_GetContents_DirectoryWithPlusChars(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/repos/o/r/contents/some directory+name/file.go", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{}`)
})
_, _, _, err := client.Repositories.GetContents("o", "r", "some directory+name/file.go", &RepositoryContentGetOptions{})
if err != nil {
t.Fatalf("Repositories.GetContents returned error: %v", err)
}
}
func TestRepositoriesService_GetContents_Directory(t *testing.T) {
setup()
defer teardown()


Loading…
Cancel
Save