@@ -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