re-open file on each attempt

otherwise it'll be partially upload if the connection was interrupted
This commit is contained in:
Alex Suraci
2016-07-23 09:58:49 -07:00
parent 084c3e2359
commit 2f7e52d3cb
2 changed files with 19 additions and 8 deletions

View File

@@ -164,8 +164,20 @@ func (c *OutCommand) upload(release *github.RepositoryRelease, filePath string)
name := filepath.Base(filePath) name := filepath.Base(filePath)
retryErr := c.github.UploadReleaseAsset(*release, name, file) var retryErr error
for i := 0; i < 9 && retryErr != nil; i++ { for i := 0; i < 10; i++ {
file, err := os.Open(filePath)
if err != nil {
return err
}
defer file.Close()
retryErr = c.github.UploadReleaseAsset(*release, name, file)
if retryErr == nil {
break
}
assets, err := c.github.ListReleaseAssets(*release) assets, err := c.github.ListReleaseAssets(*release)
if err != nil { if err != nil {
return err return err
@@ -180,8 +192,6 @@ func (c *OutCommand) upload(release *github.RepositoryRelease, filePath string)
break break
} }
} }
retryErr = c.github.UploadReleaseAsset(*release, name, file)
} }
if retryErr != nil { if retryErr != nil {

View File

@@ -423,7 +423,8 @@ var _ = Describe("Out Command", func() {
}, },
}, nil) }, nil)
githubClient.UploadReleaseAssetStub = func(github.RepositoryRelease, string, *os.File) error { githubClient.UploadReleaseAssetStub = func(rel github.RepositoryRelease, name string, file *os.File) error {
Expect(ioutil.ReadAll(file)).To(Equal([]byte("matching")))
Expect(existingAsset).To(BeFalse()) Expect(existingAsset).To(BeFalse())
existingAsset = true existingAsset = true
return errors.New("some-error") return errors.New("some-error")
@@ -435,15 +436,15 @@ var _ = Describe("Out Command", func() {
Expect(err).To(Equal(errors.New("some-error"))) Expect(err).To(Equal(errors.New("some-error")))
Ω(githubClient.UploadReleaseAssetCallCount()).Should(Equal(10)) Ω(githubClient.UploadReleaseAssetCallCount()).Should(Equal(10))
Ω(githubClient.ListReleaseAssetsCallCount()).Should(Equal(9)) Ω(githubClient.ListReleaseAssetsCallCount()).Should(Equal(10))
Ω(*githubClient.ListReleaseAssetsArgsForCall(8).ID).Should(Equal(112)) Ω(*githubClient.ListReleaseAssetsArgsForCall(9).ID).Should(Equal(112))
actualRelease, actualName, actualFile := githubClient.UploadReleaseAssetArgsForCall(9) actualRelease, actualName, actualFile := githubClient.UploadReleaseAssetArgsForCall(9)
Ω(*actualRelease.ID).Should(Equal(112)) Ω(*actualRelease.ID).Should(Equal(112))
Ω(actualName).Should(Equal("great-file.tgz")) Ω(actualName).Should(Equal("great-file.tgz"))
Ω(actualFile.Name()).Should(Equal(filepath.Join(sourcesDir, "great-file.tgz"))) Ω(actualFile.Name()).Should(Equal(filepath.Join(sourcesDir, "great-file.tgz")))
Ω(githubClient.DeleteReleaseAssetCallCount()).Should(Equal(9)) Ω(githubClient.DeleteReleaseAssetCallCount()).Should(Equal(10))
actualAsset := githubClient.DeleteReleaseAssetArgsForCall(8) actualAsset := githubClient.DeleteReleaseAssetArgsForCall(8)
Expect(*actualAsset.ID).To(Equal(456789)) Expect(*actualAsset.ID).To(Equal(456789))
}) })