···1717 let tap_name = Homebrew.tap_name config in
1818 let status = Sys.command (Fmt.str "brew update") in
1919 if status <> 0 then Fmt.epr "Warning: brew update failed (exit %d)@." status;
2020- (* Upgrade each binary *)
2020+ (* Only upgrade binaries that are already installed *)
2121+ let installed =
2222+ List.filter
2323+ (fun (b : Homebrew.binary) ->
2424+ let formula = Fmt.str "%s/%s" tap_name b.name in
2525+ Sys.command (Fmt.str "brew list %s >/dev/null 2>&1" formula) = 0)
2626+ binaries
2727+ in
2828+ if installed = [] then (
2929+ Fmt.pr "No installed binaries to upgrade.@.";
3030+ exit 0);
2131 List.iter
2232 (fun (b : Homebrew.binary) ->
2333 let formula = Fmt.str "%s/%s" tap_name b.name in
2434 Fmt.pr "Upgrading %s...@." b.name;
2525- let status = Sys.command (Fmt.str "brew upgrade %s 2>&1" formula) in
2626- if status <> 0 then
2727- (* Try install if not installed yet *)
2828- let status = Sys.command (Fmt.str "brew install %s 2>&1" formula) in
2929- if status <> 0 then Fmt.epr " Failed to upgrade/install %s@." b.name)
3030- binaries;
3131- Fmt.pr "Done.@."
3535+ ignore (Sys.command (Fmt.str "brew upgrade %s" formula)))
3636+ installed;
3737+ Fmt.pr "Done. %d binaries upgraded.@." (List.length installed)
32383339let cmd =
3440 let doc = "Upgrade all bottled binaries via brew." in