re-open file on each attempt
otherwise it'll be partially upload if the connection was interrupted
This commit is contained in:
@@ -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 {
|
||||||
|
@@ -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))
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user