Skip to content

Commit a2feb60

Browse files
authored
Treat dest as a dir (#659)
1 parent 0139d79 commit a2feb60

File tree

1 file changed

+31
-17
lines changed

1 file changed

+31
-17
lines changed

cli/cmd/release_download.go

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -164,19 +164,42 @@ func (r *runners) releaseDownload(command *cobra.Command, args []string) error {
164164
log.ActionWithoutSpinner("Latest release is sequence %d", seq)
165165
}
166166

167-
// Determine destination
167+
// Determine destination and whether to save as file or directory
168168
dest := r.args.releaseDownloadDest
169+
saveAsFile := false
170+
169171
if dest == "" {
170-
// Auto-generate filename
172+
// Auto-generate filename for .tgz
171173
dest = r.generateDownloadFilename()
174+
saveAsFile = true
175+
} else {
176+
// Check if dest is an existing directory or should be treated as a file
177+
destInfo, statErr := os.Stat(dest)
178+
if statErr == nil {
179+
// Path exists - check if it's a directory
180+
saveAsFile = !destInfo.IsDir()
181+
} else {
182+
// Path doesn't exist - determine intent based on file extension
183+
// If it has .tgz or .tar.gz extension, treat as file; otherwise treat as directory
184+
if filepath.Ext(dest) == ".tgz" || filepath.Ext(dest) == ".gz" {
185+
saveAsFile = true
186+
} else {
187+
saveAsFile = false
188+
}
189+
}
172190
}
173191

174-
// Check if dest is a directory or file
175-
destInfo, statErr := os.Stat(dest)
176-
isDir := statErr == nil && destInfo.IsDir()
177-
178-
if isDir {
179-
// Legacy behavior: unpack to directory
192+
if saveAsFile {
193+
// Download as .tgz file
194+
log.ActionWithSpinner("Downloading Release %d as %s", seq, dest)
195+
if err := r.downloadReleaseArchive(seq, dest); err != nil {
196+
log.FinishSpinnerWithError()
197+
return errors.Wrap(err, "download release archive")
198+
}
199+
log.FinishSpinner()
200+
log.ActionWithoutSpinner("Release %d downloaded to %s", seq, dest)
201+
} else {
202+
// Unpack to directory
180203
log.ActionWithSpinner("Fetching Release %d", seq)
181204
release, err := r.api.GetRelease(r.appID, r.appType, seq)
182205
if err != nil {
@@ -190,15 +213,6 @@ func (r *runners) releaseDownload(command *cobra.Command, args []string) error {
190213
if err != nil {
191214
return errors.Wrap(err, "save release")
192215
}
193-
} else {
194-
// Download as .tgz file
195-
log.ActionWithSpinner("Downloading Release %d as %s", seq, dest)
196-
if err := r.downloadReleaseArchive(seq, dest); err != nil {
197-
log.FinishSpinnerWithError()
198-
return errors.Wrap(err, "download release archive")
199-
}
200-
log.FinishSpinner()
201-
log.ActionWithoutSpinner("Release %d downloaded to %s", seq, dest)
202216
}
203217

204218
return nil

0 commit comments

Comments
 (0)