@@ -2,6 +2,7 @@ package main
22
33import (
44 "bytes"
5+ "flag"
56 "fmt"
67 "io"
78 "macup/macup"
@@ -16,36 +17,53 @@ func main() {
1617 os .Exit (1 )
1718 }
1819
20+ // Define flags for each update function
21+ brewFlag := flag .Bool ("brew" , false , "Update Homebrew packages" )
22+ vscodeFlag := flag .Bool ("vscode" , false , "Update VSCode extensions" )
23+ gemFlag := flag .Bool ("gem" , false , "Update Ruby gems" )
24+ nodeFlag := flag .Bool ("node" , false , "Update Node.js packages" )
25+ cargoFlag := flag .Bool ("cargo" , false , "Update Rust packages" )
26+ appstoreFlag := flag .Bool ("appstore" , false , "Update Mac App Store apps" )
27+ macosFlag := flag .Bool ("macos" , false , "Update macOS system" )
28+ flag .Parse ()
29+
1930 // List of update functions to run in parallel
2031 updateFuncs := []struct {
21- fn func (writer io.Writer )
32+ fn func (writer io.Writer )
33+ flag bool
2234 }{
23- {macup .UpdateBrew }, // Update Homebrew packages
24- {macup .UpdateVSCodeExt }, // Update VSCode extensions
25- {macup .UpdateGem }, // Update Ruby gems
26- {macup .UpdateNodePkg }, // Update Node.js packages
27- {macup .UpdateCargo }, // Update Rust packages
28- {macup .UpdateAppStore }, // Update Mac App Store apps
29- {macup .UpdateMacOS }, // Update macOS system
35+ {macup .UpdateBrew , * brewFlag },
36+ {macup .UpdateVSCodeExt , * vscodeFlag },
37+ {macup .UpdateGem , * gemFlag },
38+ {macup .UpdateNodePkg , * nodeFlag },
39+ {macup .UpdateCargo , * cargoFlag },
40+ {macup .UpdateAppStore , * appstoreFlag },
41+ {macup .UpdateMacOS , * macosFlag },
3042 }
3143
44+ runAll := flag .NFlag () == 0
45+
3246 var wg sync.WaitGroup
3347 buffers := make ([]* bytes.Buffer , len (updateFuncs ))
3448
3549 // Run each update function in a separate goroutine
3650 for i , u := range updateFuncs {
37- wg .Add (1 )
38- buffers [i ] = & bytes.Buffer {}
39- go func (fn func (writer io.Writer ), buffer * bytes.Buffer ) {
40- defer wg .Done ()
41- fn (buffer ) // Execute update and write output to buffer
42- }(u .fn , buffers [i ])
51+ if runAll || u .flag {
52+ wg .Add (1 )
53+ buffers [i ] = & bytes.Buffer {}
54+ go func (fn func (writer io.Writer ), buffer * bytes.Buffer ) {
55+ defer wg .Done ()
56+ fn (buffer ) // Execute update and write output to buffer
57+ }(u .fn , buffers [i ])
58+ }
4359 }
4460
4561 wg .Wait () // Wait for all updates to finish
4662
4763 // Print the output of each update function
48- for i := range updateFuncs {
49- fmt .Println (buffers [i ].String ())
64+ for i , u := range updateFuncs {
65+ if (runAll || u .flag ) && buffers [i ] != nil {
66+ fmt .Println (buffers [i ].String ())
67+ }
5068 }
51- }
69+ }
0 commit comments