fix upload retry logic

[#126926555]
This commit is contained in:
Alex Suraci
2016-07-23 09:39:01 -07:00
parent d93d0370bc
commit 084c3e2359
2 changed files with 75 additions and 32 deletions

View File

@@ -130,40 +130,10 @@ func (c *OutCommand) Run(sourceDir string, request OutRequest) (OutResponse, err
}
for _, filePath := range matches {
file, err := os.Open(filePath)
err := c.upload(release, filePath)
if err != nil {
return OutResponse{}, err
}
fmt.Fprintf(c.writer, "uploading %s\n", filePath)
name := filepath.Base(filePath)
err = c.github.UploadReleaseAsset(*release, name, file)
for i := 0; i < 9 && err != nil; i++ {
assets, err := c.github.ListReleaseAssets(*release)
if err != nil {
return OutResponse{}, err
}
for _, asset := range assets {
if asset.Name != nil && *asset.Name == name {
err = c.github.DeleteReleaseAsset(*asset)
if err != nil {
return OutResponse{}, err
}
break
}
}
err = c.github.UploadReleaseAsset(*release, name, file)
}
if err != nil {
return OutResponse{}, err
}
file.Close()
}
}
@@ -181,3 +151,42 @@ func (c *OutCommand) fileContents(path string) (string, error) {
return strings.TrimSpace(string(contents)), nil
}
func (c *OutCommand) upload(release *github.RepositoryRelease, filePath string) error {
file, err := os.Open(filePath)
if err != nil {
return err
}
defer file.Close()
fmt.Fprintf(c.writer, "uploading %s\n", filePath)
name := filepath.Base(filePath)
retryErr := c.github.UploadReleaseAsset(*release, name, file)
for i := 0; i < 9 && retryErr != nil; i++ {
assets, err := c.github.ListReleaseAssets(*release)
if err != nil {
return err
}
for _, asset := range assets {
if asset.Name != nil && *asset.Name == name {
err = c.github.DeleteReleaseAsset(*asset)
if err != nil {
return err
}
break
}
}
retryErr = c.github.UploadReleaseAsset(*release, name, file)
}
if retryErr != nil {
return retryErr
}
return nil
}