Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 31 additions & 17 deletions cli/cmd/release_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,19 +164,42 @@ func (r *runners) releaseDownload(command *cobra.Command, args []string) error {
log.ActionWithoutSpinner("Latest release is sequence %d", seq)
}

// Determine destination
// Determine destination and whether to save as file or directory
dest := r.args.releaseDownloadDest
saveAsFile := false

if dest == "" {
// Auto-generate filename
// Auto-generate filename for .tgz
dest = r.generateDownloadFilename()
saveAsFile = true
} else {
// Check if dest is an existing directory or should be treated as a file
destInfo, statErr := os.Stat(dest)
if statErr == nil {
// Path exists - check if it's a directory
saveAsFile = !destInfo.IsDir()
} else {
// Path doesn't exist - determine intent based on file extension
// If it has .tgz or .tar.gz extension, treat as file; otherwise treat as directory
if filepath.Ext(dest) == ".tgz" || filepath.Ext(dest) == ".gz" {
saveAsFile = true
} else {
saveAsFile = false
}
}
}

// Check if dest is a directory or file
destInfo, statErr := os.Stat(dest)
isDir := statErr == nil && destInfo.IsDir()

if isDir {
// Legacy behavior: unpack to directory
if saveAsFile {
// Download as .tgz file
log.ActionWithSpinner("Downloading Release %d as %s", seq, dest)
if err := r.downloadReleaseArchive(seq, dest); err != nil {
log.FinishSpinnerWithError()
return errors.Wrap(err, "download release archive")
}
log.FinishSpinner()
log.ActionWithoutSpinner("Release %d downloaded to %s", seq, dest)
} else {
// Unpack to directory
log.ActionWithSpinner("Fetching Release %d", seq)
release, err := r.api.GetRelease(r.appID, r.appType, seq)
if err != nil {
Expand All @@ -190,15 +213,6 @@ func (r *runners) releaseDownload(command *cobra.Command, args []string) error {
if err != nil {
return errors.Wrap(err, "save release")
}
} else {
// Download as .tgz file
log.ActionWithSpinner("Downloading Release %d as %s", seq, dest)
if err := r.downloadReleaseArchive(seq, dest); err != nil {
log.FinishSpinnerWithError()
return errors.Wrap(err, "download release archive")
}
log.FinishSpinner()
log.ActionWithoutSpinner("Release %d downloaded to %s", seq, dest)
}

return nil
Expand Down
Loading