@@ -260,30 +260,48 @@ func InstallWithProgress(cliPkgs, caskPkgs []string, dryRun bool) (installedForm
260260
261261 if len (newCli ) > 0 {
262262 ui .Info (fmt .Sprintf ("Installing %d CLI packages..." , len (newCli )))
263-
263+
264264 args := append ([]string {"install" }, newCli ... )
265265 cmd := brewInstallCmd (args ... )
266266 cmd .Stdout = os .Stdout
267267 cmd .Stderr = os .Stderr
268- err := cmd .Run ()
269-
270- // Track as completed - we rely on brew's exit code for errors
271- for _ , pkg := range newCli {
272- progress .IncrementWithStatus (err == nil )
273- if err == nil {
274- installedFormulae = append (installedFormulae , pkg )
275- } else {
276- allFailed = append (allFailed , failedJob {
277- installJob : installJob {name : pkg , isCask : false },
278- errMsg : "install failed" ,
279- })
268+ cmdErr := cmd .Run ()
269+
270+ // Re-check installed packages to determine actual success
271+ postFormulae , _ , postErr := GetInstalledPackages ()
272+ if postErr != nil {
273+ // Fallback: use command error to determine status
274+ for _ , pkg := range newCli {
275+ progress .IncrementWithStatus (cmdErr == nil )
276+ if cmdErr == nil {
277+ installedFormulae = append (installedFormulae , pkg )
278+ } else {
279+ allFailed = append (allFailed , failedJob {
280+ installJob : installJob {name : pkg , isCask : false },
281+ errMsg : "install failed" ,
282+ })
283+ }
284+ }
285+ } else {
286+ // Check each package individually
287+ for _ , pkg := range newCli {
288+ isInstalled := postFormulae [pkg ]
289+ progress .IncrementWithStatus (isInstalled )
290+ if isInstalled {
291+ installedFormulae = append (installedFormulae , pkg )
292+ } else {
293+ allFailed = append (allFailed , failedJob {
294+ installJob : installJob {name : pkg , isCask : false },
295+ errMsg : "install failed" ,
296+ })
297+ }
280298 }
281299 }
282300 }
283301
284302 if len (newCask ) > 0 {
285303 ui .Info (fmt .Sprintf ("Installing %d GUI apps..." , len (newCask )))
286-
304+
287305 args := append ([]string {"install" , "--cask" }, newCask ... )
288306 cmd := brewInstallCmd (args ... )
289307 cmd .Stdout = os .Stdout
@@ -293,20 +311,39 @@ func InstallWithProgress(cliPkgs, caskPkgs []string, dryRun bool) (installedForm
293311 if opened {
294312 cmd .Stdin = tty
295313 }
296- err := cmd .Run ()
314+ cmdErr := cmd .Run ()
297315 if opened {
298316 tty .Close ()
299317 }
300-
301- for _ , pkg := range newCask {
302- progress .IncrementWithStatus (err == nil )
303- if err == nil {
304- installedCasks = append (installedCasks , pkg )
305- } else {
306- allFailed = append (allFailed , failedJob {
307- installJob : installJob {name : pkg , isCask : true },
308- errMsg : "install failed" ,
309- })
318+
319+ // Re-check installed casks to determine actual success
320+ _ , postCasks , postErr := GetInstalledPackages ()
321+ if postErr != nil {
322+ // Fallback: use command error to determine status
323+ for _ , pkg := range newCask {
324+ progress .IncrementWithStatus (cmdErr == nil )
325+ if cmdErr == nil {
326+ installedCasks = append (installedCasks , pkg )
327+ } else {
328+ allFailed = append (allFailed , failedJob {
329+ installJob : installJob {name : pkg , isCask : true },
330+ errMsg : "install failed" ,
331+ })
332+ }
333+ }
334+ } else {
335+ // Check each cask individually
336+ for _ , pkg := range newCask {
337+ isInstalled := postCasks [pkg ]
338+ progress .IncrementWithStatus (isInstalled )
339+ if isInstalled {
340+ installedCasks = append (installedCasks , pkg )
341+ } else {
342+ allFailed = append (allFailed , failedJob {
343+ installJob : installJob {name : pkg , isCask : true },
344+ errMsg : "install failed" ,
345+ })
346+ }
310347 }
311348 }
312349 }
0 commit comments