clean up pointerisms, fix building real client

google github library returns *Foo in singular case and []Foo if there
are many results. seems like the best approach is to pass them around
by-value, since *Foo seems to only be so that they can return 'nil'
instead of a zero-value.
This commit is contained in:
Alex Suraci
2015-08-08 11:22:43 -07:00
parent 79d0da629f
commit d2c9a5e136
6 changed files with 47 additions and 48 deletions

View File

@@ -34,19 +34,19 @@ type FakeGitHub struct {
result1 *github.RepositoryRelease result1 *github.RepositoryRelease
result2 error result2 error
} }
CreateReleaseStub func(release *github.RepositoryRelease) (*github.RepositoryRelease, error) CreateReleaseStub func(release github.RepositoryRelease) (*github.RepositoryRelease, error)
createReleaseMutex sync.RWMutex createReleaseMutex sync.RWMutex
createReleaseArgsForCall []struct { createReleaseArgsForCall []struct {
release *github.RepositoryRelease release github.RepositoryRelease
} }
createReleaseReturns struct { createReleaseReturns struct {
result1 *github.RepositoryRelease result1 *github.RepositoryRelease
result2 error result2 error
} }
UpdateReleaseStub func(release *github.RepositoryRelease) (*github.RepositoryRelease, error) UpdateReleaseStub func(release github.RepositoryRelease) (*github.RepositoryRelease, error)
updateReleaseMutex sync.RWMutex updateReleaseMutex sync.RWMutex
updateReleaseArgsForCall []struct { updateReleaseArgsForCall []struct {
release *github.RepositoryRelease release github.RepositoryRelease
} }
updateReleaseReturns struct { updateReleaseReturns struct {
result1 *github.RepositoryRelease result1 *github.RepositoryRelease
@@ -61,10 +61,10 @@ type FakeGitHub struct {
result1 []github.ReleaseAsset result1 []github.ReleaseAsset
result2 error result2 error
} }
UploadReleaseAssetStub func(release *github.RepositoryRelease, name string, file *os.File) error UploadReleaseAssetStub func(release github.RepositoryRelease, name string, file *os.File) error
uploadReleaseAssetMutex sync.RWMutex uploadReleaseAssetMutex sync.RWMutex
uploadReleaseAssetArgsForCall []struct { uploadReleaseAssetArgsForCall []struct {
release *github.RepositoryRelease release github.RepositoryRelease
name string name string
file *os.File file *os.File
} }
@@ -79,10 +79,10 @@ type FakeGitHub struct {
deleteReleaseAssetReturns struct { deleteReleaseAssetReturns struct {
result1 error result1 error
} }
DownloadReleaseAssetStub func(asset *github.ReleaseAsset) (io.ReadCloser, error) DownloadReleaseAssetStub func(asset github.ReleaseAsset) (io.ReadCloser, error)
downloadReleaseAssetMutex sync.RWMutex downloadReleaseAssetMutex sync.RWMutex
downloadReleaseAssetArgsForCall []struct { downloadReleaseAssetArgsForCall []struct {
asset *github.ReleaseAsset asset github.ReleaseAsset
} }
downloadReleaseAssetReturns struct { downloadReleaseAssetReturns struct {
result1 io.ReadCloser result1 io.ReadCloser
@@ -173,10 +173,10 @@ func (fake *FakeGitHub) GetReleaseByTagReturns(result1 *github.RepositoryRelease
}{result1, result2} }{result1, result2}
} }
func (fake *FakeGitHub) CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) { func (fake *FakeGitHub) CreateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error) {
fake.createReleaseMutex.Lock() fake.createReleaseMutex.Lock()
fake.createReleaseArgsForCall = append(fake.createReleaseArgsForCall, struct { fake.createReleaseArgsForCall = append(fake.createReleaseArgsForCall, struct {
release *github.RepositoryRelease release github.RepositoryRelease
}{release}) }{release})
fake.createReleaseMutex.Unlock() fake.createReleaseMutex.Unlock()
if fake.CreateReleaseStub != nil { if fake.CreateReleaseStub != nil {
@@ -192,7 +192,7 @@ func (fake *FakeGitHub) CreateReleaseCallCount() int {
return len(fake.createReleaseArgsForCall) return len(fake.createReleaseArgsForCall)
} }
func (fake *FakeGitHub) CreateReleaseArgsForCall(i int) *github.RepositoryRelease { func (fake *FakeGitHub) CreateReleaseArgsForCall(i int) github.RepositoryRelease {
fake.createReleaseMutex.RLock() fake.createReleaseMutex.RLock()
defer fake.createReleaseMutex.RUnlock() defer fake.createReleaseMutex.RUnlock()
return fake.createReleaseArgsForCall[i].release return fake.createReleaseArgsForCall[i].release
@@ -206,10 +206,10 @@ func (fake *FakeGitHub) CreateReleaseReturns(result1 *github.RepositoryRelease,
}{result1, result2} }{result1, result2}
} }
func (fake *FakeGitHub) UpdateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) { func (fake *FakeGitHub) UpdateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error) {
fake.updateReleaseMutex.Lock() fake.updateReleaseMutex.Lock()
fake.updateReleaseArgsForCall = append(fake.updateReleaseArgsForCall, struct { fake.updateReleaseArgsForCall = append(fake.updateReleaseArgsForCall, struct {
release *github.RepositoryRelease release github.RepositoryRelease
}{release}) }{release})
fake.updateReleaseMutex.Unlock() fake.updateReleaseMutex.Unlock()
if fake.UpdateReleaseStub != nil { if fake.UpdateReleaseStub != nil {
@@ -225,7 +225,7 @@ func (fake *FakeGitHub) UpdateReleaseCallCount() int {
return len(fake.updateReleaseArgsForCall) return len(fake.updateReleaseArgsForCall)
} }
func (fake *FakeGitHub) UpdateReleaseArgsForCall(i int) *github.RepositoryRelease { func (fake *FakeGitHub) UpdateReleaseArgsForCall(i int) github.RepositoryRelease {
fake.updateReleaseMutex.RLock() fake.updateReleaseMutex.RLock()
defer fake.updateReleaseMutex.RUnlock() defer fake.updateReleaseMutex.RUnlock()
return fake.updateReleaseArgsForCall[i].release return fake.updateReleaseArgsForCall[i].release
@@ -272,10 +272,10 @@ func (fake *FakeGitHub) ListReleaseAssetsReturns(result1 []github.ReleaseAsset,
}{result1, result2} }{result1, result2}
} }
func (fake *FakeGitHub) UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error { func (fake *FakeGitHub) UploadReleaseAsset(release github.RepositoryRelease, name string, file *os.File) error {
fake.uploadReleaseAssetMutex.Lock() fake.uploadReleaseAssetMutex.Lock()
fake.uploadReleaseAssetArgsForCall = append(fake.uploadReleaseAssetArgsForCall, struct { fake.uploadReleaseAssetArgsForCall = append(fake.uploadReleaseAssetArgsForCall, struct {
release *github.RepositoryRelease release github.RepositoryRelease
name string name string
file *os.File file *os.File
}{release, name, file}) }{release, name, file})
@@ -293,7 +293,7 @@ func (fake *FakeGitHub) UploadReleaseAssetCallCount() int {
return len(fake.uploadReleaseAssetArgsForCall) return len(fake.uploadReleaseAssetArgsForCall)
} }
func (fake *FakeGitHub) UploadReleaseAssetArgsForCall(i int) (*github.RepositoryRelease, string, *os.File) { func (fake *FakeGitHub) UploadReleaseAssetArgsForCall(i int) (github.RepositoryRelease, string, *os.File) {
fake.uploadReleaseAssetMutex.RLock() fake.uploadReleaseAssetMutex.RLock()
defer fake.uploadReleaseAssetMutex.RUnlock() defer fake.uploadReleaseAssetMutex.RUnlock()
return fake.uploadReleaseAssetArgsForCall[i].release, fake.uploadReleaseAssetArgsForCall[i].name, fake.uploadReleaseAssetArgsForCall[i].file return fake.uploadReleaseAssetArgsForCall[i].release, fake.uploadReleaseAssetArgsForCall[i].name, fake.uploadReleaseAssetArgsForCall[i].file
@@ -338,10 +338,10 @@ func (fake *FakeGitHub) DeleteReleaseAssetReturns(result1 error) {
}{result1} }{result1}
} }
func (fake *FakeGitHub) DownloadReleaseAsset(asset *github.ReleaseAsset) (io.ReadCloser, error) { func (fake *FakeGitHub) DownloadReleaseAsset(asset github.ReleaseAsset) (io.ReadCloser, error) {
fake.downloadReleaseAssetMutex.Lock() fake.downloadReleaseAssetMutex.Lock()
fake.downloadReleaseAssetArgsForCall = append(fake.downloadReleaseAssetArgsForCall, struct { fake.downloadReleaseAssetArgsForCall = append(fake.downloadReleaseAssetArgsForCall, struct {
asset *github.ReleaseAsset asset github.ReleaseAsset
}{asset}) }{asset})
fake.downloadReleaseAssetMutex.Unlock() fake.downloadReleaseAssetMutex.Unlock()
if fake.DownloadReleaseAssetStub != nil { if fake.DownloadReleaseAssetStub != nil {
@@ -357,7 +357,7 @@ func (fake *FakeGitHub) DownloadReleaseAssetCallCount() int {
return len(fake.downloadReleaseAssetArgsForCall) return len(fake.downloadReleaseAssetArgsForCall)
} }
func (fake *FakeGitHub) DownloadReleaseAssetArgsForCall(i int) *github.ReleaseAsset { func (fake *FakeGitHub) DownloadReleaseAssetArgsForCall(i int) github.ReleaseAsset {
fake.downloadReleaseAssetMutex.RLock() fake.downloadReleaseAssetMutex.RLock()
defer fake.downloadReleaseAssetMutex.RUnlock() defer fake.downloadReleaseAssetMutex.RUnlock()
return fake.downloadReleaseAssetArgsForCall[i].asset return fake.downloadReleaseAssetArgsForCall[i].asset

View File

@@ -17,13 +17,13 @@ type GitHub interface {
ListReleases() ([]github.RepositoryRelease, error) ListReleases() ([]github.RepositoryRelease, error)
LatestRelease() (*github.RepositoryRelease, error) LatestRelease() (*github.RepositoryRelease, error)
GetReleaseByTag(tag string) (*github.RepositoryRelease, error) GetReleaseByTag(tag string) (*github.RepositoryRelease, error)
CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) CreateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error)
UpdateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) UpdateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error)
ListReleaseAssets(release github.RepositoryRelease) ([]github.ReleaseAsset, error) ListReleaseAssets(release github.RepositoryRelease) ([]github.ReleaseAsset, error)
UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error UploadReleaseAsset(release github.RepositoryRelease, name string, file *os.File) error
DeleteReleaseAsset(asset github.ReleaseAsset) error DeleteReleaseAsset(asset github.ReleaseAsset) error
DownloadReleaseAsset(asset *github.ReleaseAsset) (io.ReadCloser, error) DownloadReleaseAsset(asset github.ReleaseAsset) (io.ReadCloser, error)
} }
type GitHubClient struct { type GitHubClient struct {
@@ -105,8 +105,8 @@ func (g *GitHubClient) GetReleaseByTag(tag string) (*github.RepositoryRelease, e
return release, nil return release, nil
} }
func (g *GitHubClient) CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) { func (g *GitHubClient) CreateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error) {
createdRelease, res, err := g.client.Repositories.CreateRelease(g.user, g.repository, release) createdRelease, res, err := g.client.Repositories.CreateRelease(g.user, g.repository, &release)
if err != nil { if err != nil {
return &github.RepositoryRelease{}, err return &github.RepositoryRelease{}, err
} }
@@ -119,12 +119,12 @@ func (g *GitHubClient) CreateRelease(release *github.RepositoryRelease) (*github
return createdRelease, nil return createdRelease, nil
} }
func (g *GitHubClient) UpdateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) { func (g *GitHubClient) UpdateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error) {
if release.ID == nil { if release.ID == nil {
return nil, errors.New("release did not have an ID: has it been saved yet?") return nil, errors.New("release did not have an ID: has it been saved yet?")
} }
updatedRelease, res, err := g.client.Repositories.EditRelease(g.user, g.repository, *release.ID, release) updatedRelease, res, err := g.client.Repositories.EditRelease(g.user, g.repository, *release.ID, &release)
if err != nil { if err != nil {
return &github.RepositoryRelease{}, err return &github.RepositoryRelease{}, err
} }
@@ -137,7 +137,7 @@ func (g *GitHubClient) UpdateRelease(release *github.RepositoryRelease) (*github
return updatedRelease, nil return updatedRelease, nil
} }
func (g *GitHubClient) ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error) { func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]github.ReleaseAsset, error) {
assets, res, err := g.client.Repositories.ListReleaseAssets(g.user, g.repository, *release.ID, nil) assets, res, err := g.client.Repositories.ListReleaseAssets(g.user, g.repository, *release.ID, nil)
if err != nil { if err != nil {
return []github.ReleaseAsset{}, nil return []github.ReleaseAsset{}, nil
@@ -151,7 +151,7 @@ func (g *GitHubClient) ListReleaseAssets(release *github.RepositoryRelease) ([]g
return assets, nil return assets, nil
} }
func (g *GitHubClient) UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error { func (g *GitHubClient) UploadReleaseAsset(release github.RepositoryRelease, name string, file *os.File) error {
_, res, err := g.client.Repositories.UploadReleaseAsset( _, res, err := g.client.Repositories.UploadReleaseAsset(
g.user, g.user,
g.repository, g.repository,

View File

@@ -95,8 +95,7 @@ func (c *InCommand) Run(destDir string, request InRequest) (InResponse, error) {
fmt.Fprintf(c.writer, "downloading asset: %s\n", *asset.Name) fmt.Fprintf(c.writer, "downloading asset: %s\n", *asset.Name)
assetToDownload := asset err := c.downloadFile(asset, path)
err := c.downloadFile(&assetToDownload, path)
if err != nil { if err != nil {
return InResponse{}, err return InResponse{}, err
} }
@@ -110,7 +109,7 @@ func (c *InCommand) Run(destDir string, request InRequest) (InResponse, error) {
}, nil }, nil
} }
func (c *InCommand) downloadFile(asset *github.ReleaseAsset, destPath string) error { func (c *InCommand) downloadFile(asset github.ReleaseAsset, destPath string) error {
out, err := os.Create(destPath) out, err := os.Create(destPath)
if err != nil { if err != nil {
return err return err

View File

@@ -109,8 +109,8 @@ var _ = Describe("In Command", func() {
}) })
It("downloads only the files that match the globs", func() { It("downloads only the files that match the globs", func() {
Ω(*githubClient.DownloadReleaseAssetArgsForCall(0)).Should(Equal(buildAsset(0, "example.txt"))) Ω(githubClient.DownloadReleaseAssetArgsForCall(0)).Should(Equal(buildAsset(0, "example.txt")))
Ω(*githubClient.DownloadReleaseAssetArgsForCall(1)).Should(Equal(buildAsset(1, "example.rtf"))) Ω(githubClient.DownloadReleaseAssetArgsForCall(1)).Should(Equal(buildAsset(1, "example.rtf")))
}) })
}) })
@@ -151,9 +151,9 @@ var _ = Describe("In Command", func() {
}) })
It("downloads all of the files", func() { It("downloads all of the files", func() {
Ω(*githubClient.DownloadReleaseAssetArgsForCall(0)).Should(Equal(buildAsset(0, "example.txt"))) Ω(githubClient.DownloadReleaseAssetArgsForCall(0)).Should(Equal(buildAsset(0, "example.txt")))
Ω(*githubClient.DownloadReleaseAssetArgsForCall(1)).Should(Equal(buildAsset(1, "example.rtf"))) Ω(githubClient.DownloadReleaseAssetArgsForCall(1)).Should(Equal(buildAsset(1, "example.rtf")))
Ω(*githubClient.DownloadReleaseAssetArgsForCall(2)).Should(Equal(buildAsset(2, "example.wtf"))) Ω(githubClient.DownloadReleaseAssetArgsForCall(2)).Should(Equal(buildAsset(2, "example.wtf")))
}) })
}) })
@@ -232,7 +232,7 @@ var _ = Describe("In Command", func() {
}) })
It("fetches from the latest release", func() { It("fetches from the latest release", func() {
Ω(*githubClient.DownloadReleaseAssetArgsForCall(0)).Should(Equal(buildAsset(0, "something.tgz"))) Ω(githubClient.DownloadReleaseAssetArgsForCall(0)).Should(Equal(buildAsset(0, "something.tgz")))
}) })
}) })
}) })

View File

@@ -88,10 +88,10 @@ func (c *OutCommand) Run(sourceDir string, request OutRequest) (OutResponse, err
fmt.Fprintf(c.writer, "updating release %s\n", name) fmt.Fprintf(c.writer, "updating release %s\n", name)
release, err = c.github.UpdateRelease(existingRelease) release, err = c.github.UpdateRelease(*existingRelease)
} else { } else {
fmt.Fprintf(c.writer, "creating release %s\n", name) fmt.Fprintf(c.writer, "creating release %s\n", name)
release, err = c.github.CreateRelease(release) release, err = c.github.CreateRelease(*release)
} }
if err != nil { if err != nil {
@@ -117,7 +117,7 @@ func (c *OutCommand) Run(sourceDir string, request OutRequest) (OutResponse, err
fmt.Fprintf(c.writer, "uploading %s\n", filePath) fmt.Fprintf(c.writer, "uploading %s\n", filePath)
name := filepath.Base(filePath) name := filepath.Base(filePath)
err = c.github.UploadReleaseAsset(release, name, file) err = c.github.UploadReleaseAsset(*release, name, file)
if err != nil { if err != nil {
return OutResponse{}, err return OutResponse{}, err
} }

View File

@@ -38,8 +38,8 @@ var _ = Describe("Out Command", func() {
sourcesDir, err = ioutil.TempDir("", "github-release") sourcesDir, err = ioutil.TempDir("", "github-release")
Ω(err).ShouldNot(HaveOccurred()) Ω(err).ShouldNot(HaveOccurred())
githubClient.CreateReleaseStub = func(gh *github.RepositoryRelease) (*github.RepositoryRelease, error) { githubClient.CreateReleaseStub = func(gh github.RepositoryRelease) (*github.RepositoryRelease, error) {
createdRel := *gh createdRel := gh
createdRel.ID = github.Int(112) createdRel.ID = github.Int(112)
createdRel.HTMLURL = github.String("http://google.com") createdRel.HTMLURL = github.String("http://google.com")
createdRel.Name = github.String("release-name") createdRel.Name = github.String("release-name")
@@ -47,8 +47,8 @@ var _ = Describe("Out Command", func() {
return &createdRel, nil return &createdRel, nil
} }
githubClient.UpdateReleaseStub = func(gh *github.RepositoryRelease) (*github.RepositoryRelease, error) { githubClient.UpdateReleaseStub = func(gh github.RepositoryRelease) (*github.RepositoryRelease, error) {
return gh, nil return &gh, nil
} }
}) })