@@ -21,19 +21,17 @@ var updateCmd = &cobra.Command{
21
21
return
22
22
}
23
23
if strings .Contains (distro , "debian" ) {
24
- err = updateDebianPackage ("swiftwave" )
24
+ isUpdated , err = updateDebianPackage ("swiftwave" )
25
25
if err != nil {
26
26
fmt .Println ("Error: " , err )
27
27
return
28
28
}
29
- isUpdated = true
30
29
} else if strings .Contains (distro , "redhat" ) {
31
- err = updateRedHatPackage ("swiftwave" )
30
+ isUpdated , err = updateRedHatPackage ("swiftwave" )
32
31
if err != nil {
33
32
fmt .Println ("Error: " , err )
34
33
return
35
34
}
36
- isUpdated = true
37
35
} else {
38
36
fmt .Println ("Error: unknown distribution" )
39
37
return
@@ -67,18 +65,33 @@ func detectDistro() (string, error) {
67
65
return "" , fmt .Errorf ("unknown distribution" )
68
66
}
69
67
70
- func updateDebianPackage (packageName string ) error {
71
- cmd := exec .Command ("apt" , "install" , "--only-upgrade" , packageName )
72
- cmd .Stdin = os .Stdin
73
- cmd .Stdout = os .Stdout
74
- cmd .Stderr = os .Stderr
75
- return cmd .Run ()
68
+ func updateDebianPackage (packageName string ) (bool , error ) {
69
+ // run apt update first
70
+ output , err := exec .Command ("apt" , "update" , "-y" ).Output ()
71
+ fmt .Println (string (output ))
72
+ if err != nil {
73
+ return false , err
74
+ }
75
+ output , err = exec .Command ("apt" , "install" , "--only-upgrade" , packageName ).Output ()
76
+ fmt .Println (string (output ))
77
+ if err != nil {
78
+ return false , err
79
+ }
80
+ // check if the package is already up to date
81
+ line := "swiftwave is already the newest version"
82
+ if strings .Contains (string (output ), line ) {
83
+ return false , nil
84
+ }
85
+ return true , nil
76
86
}
77
87
78
- func updateRedHatPackage (packageName string ) error {
79
- cmd := exec .Command ("dnf" , "update" , packageName )
80
- cmd .Stdin = os .Stdin
81
- cmd .Stdout = os .Stdout
82
- cmd .Stderr = os .Stderr
83
- return cmd .Run ()
88
+ func updateRedHatPackage (packageName string ) (bool , error ) {
89
+ output , err := exec .Command ("dnf" , "update" , packageName ).Output ()
90
+ if err != nil {
91
+ return false , err
92
+ }
93
+ if strings .Contains (string (output ), "Nothing to do." ) {
94
+ return false , nil
95
+ }
96
+ return true , nil
84
97
}
0 commit comments