@@ -5,27 +5,35 @@ import (
5
5
"log/slog"
6
6
"os"
7
7
8
- "github.com/jedib0t/go-pretty/v6/progress"
9
8
"github.com/spf13/cobra"
10
9
"github.com/ublue-os/uupd/checks"
11
- "github.com/ublue-os/uupd/drv"
10
+ "github.com/ublue-os/uupd/drv/brew"
11
+ "github.com/ublue-os/uupd/drv/distrobox"
12
+ "github.com/ublue-os/uupd/drv/flatpak"
13
+ drv "github.com/ublue-os/uupd/drv/generic"
14
+ "github.com/ublue-os/uupd/drv/system"
15
+
12
16
"github.com/ublue-os/uupd/pkg/filelock"
13
17
"github.com/ublue-os/uupd/pkg/percent"
14
18
"github.com/ublue-os/uupd/pkg/session"
15
19
)
16
20
17
21
func Update (cmd * cobra.Command , args []string ) {
18
- lock , err := filelock .AcquireLock ( )
22
+ lockfile , err := filelock .OpenLockfile ( filelock . GetDefaultLockfile () )
19
23
if err != nil {
20
- slog .Error (fmt . Sprintf ( "%v, is uupd already running?" , err ))
24
+ slog .Error ("Failed creating and opening lockfile. Is uupd already running?" , slog . Any ( "error " , err ))
21
25
return
22
26
}
23
- defer func () {
24
- err := filelock .ReleaseLock (lock )
27
+ defer func (lockfile * os. File ) {
28
+ err := filelock .ReleaseLock (lockfile )
25
29
if err != nil {
26
- slog .Error ("Failed releasing lock" )
30
+ slog .Error ("Failed releasing lock" , slog . Any ( "error" , err ) )
27
31
}
28
- }()
32
+ }(lockfile )
33
+ if err := filelock .AcquireLock (lockfile , filelock.TimeoutConfig {Tries : 5 }); err != nil {
34
+ slog .Error (fmt .Sprintf ("%v, is uupd already running?" , err ))
35
+ return
36
+ }
29
37
30
38
hwCheck , err := cmd .Flags ().GetBool ("hw-check" )
31
39
if err != nil {
@@ -64,86 +72,40 @@ func Update(cmd *cobra.Command, args []string) {
64
72
initConfiguration .DryRun = dryRun
65
73
initConfiguration .Verbose = verboseRun
66
74
67
- brewUpdater , err := drv .BrewUpdater {}.New (* initConfiguration )
75
+ brewUpdater , err := brew .BrewUpdater {}.New (* initConfiguration )
68
76
brewUpdater .Config .Enabled = err == nil
69
77
70
- flatpakUpdater , err := drv .FlatpakUpdater {}.New (* initConfiguration )
78
+ flatpakUpdater , err := flatpak .FlatpakUpdater {}.New (* initConfiguration )
71
79
flatpakUpdater .Config .Enabled = err == nil
72
80
flatpakUpdater .SetUsers (users )
73
81
74
- distroboxUpdater , err := drv .DistroboxUpdater {}.New (* initConfiguration )
82
+ distroboxUpdater , err := distrobox .DistroboxUpdater {}.New (* initConfiguration )
75
83
distroboxUpdater .Config .Enabled = err == nil
76
84
distroboxUpdater .SetUsers (users )
77
85
78
- var enableUpd bool = true
79
-
80
- rpmOstreeUpdater , err := drv.RpmOstreeUpdater {}.New (* initConfiguration )
81
- if err != nil {
82
- enableUpd = false
83
- }
84
-
85
- systemUpdater , err := drv.SystemUpdater {}.New (* initConfiguration )
86
- if err != nil {
87
- enableUpd = false
88
- }
89
-
90
- isBootc , err := drv .BootcCompatible (systemUpdater .BinaryPath )
91
- if err != nil {
92
- isBootc = false
93
- }
94
-
95
- if ! isBootc {
96
- slog .Debug ("Using rpm-ostree fallback as system driver" )
97
- }
98
-
99
- systemUpdater .Config .Enabled = isBootc && enableUpd
100
- rpmOstreeUpdater .Config .Enabled = ! isBootc && enableUpd
86
+ mainSystemDriver , mainSystemDriverConfig , _ , _ := system .InitializeSystemDriver (* initConfiguration )
101
87
102
- // The system driver to be applied needs to have the correct "enabled" value since it will NOT update from here onwards.
103
- var mainSystemDriver drv.SystemUpdateDriver = & systemUpdater
104
- if ! isBootc {
105
- mainSystemDriver = & rpmOstreeUpdater
106
- }
107
-
108
- enableUpd , err = mainSystemDriver .Check ()
88
+ enableUpd , err := mainSystemDriver .Check ()
109
89
if err != nil {
110
90
slog .Error ("Failed checking for updates" )
111
91
}
92
+ mainSystemDriverConfig .Enabled = mainSystemDriverConfig .Enabled && enableUpd
112
93
113
- slog .Debug ("System Updater module status" , slog .Bool ("enabled" , enableUpd ))
94
+ slog .Debug ("System Updater module status" , slog .Bool ("enabled" , mainSystemDriverConfig . Enabled ))
114
95
115
96
totalSteps := brewUpdater .Steps () + flatpakUpdater .Steps () + distroboxUpdater .Steps ()
116
- if enableUpd {
97
+ if mainSystemDriverConfig . Enabled {
117
98
totalSteps += mainSystemDriver .Steps ()
118
99
}
119
- pw := percent .NewProgressWriter ()
120
- pw .SetNumTrackersExpected (1 )
121
- pw .SetAutoStop (false )
122
100
123
- progressEnabled , err := cmd .Flags ().GetBool ("no-progress" )
124
- if err != nil {
125
- slog .Error ("Failed to get no-progress flag" , "error" , err )
126
- return
127
- }
128
- // Move this to its actual boolean value (~no-progress)
129
- progressEnabled = ! progressEnabled
130
-
131
- if progressEnabled {
132
- go pw .Render ()
133
- percent .ResetOscProgress ()
134
- }
101
+ // FIXME: check if is interactive
102
+ percent .ResetOscProgress ()
135
103
136
104
// -1 because 0 index
137
- tracker := percent .NewIncrementTracker (& progress.Tracker {Message : "Updating" , Units : progress .UnitsDefault , Total : int64 (totalSteps - 1 )}, totalSteps - 1 )
138
- pw .AppendTracker (tracker .Tracker )
105
+ tracker := & percent.Incrementer {MaxIncrements : totalSteps - 1 }
139
106
140
- var trackerConfig = & drv.TrackerConfiguration {
141
- Tracker : tracker ,
142
- Writer : & pw ,
143
- Progress : progressEnabled ,
144
- }
145
- flatpakUpdater .Tracker = trackerConfig
146
- distroboxUpdater .Tracker = trackerConfig
107
+ flatpakUpdater .Tracker = tracker
108
+ distroboxUpdater .Tracker = tracker
147
109
148
110
var outputs = []drv.CommandOutput {}
149
111
@@ -155,7 +117,7 @@ func Update(cmd *cobra.Command, args []string) {
155
117
156
118
if systemOutdated {
157
119
const OUTDATED_WARNING = "There hasn't been an update in over a month. Consider rebooting or running updates manually"
158
- err := session .Notify ("System Warning" , OUTDATED_WARNING )
120
+ err := session .Notify (users , "System Warning" , OUTDATED_WARNING )
159
121
if err != nil {
160
122
slog .Error ("Failed showing warning notification" )
161
123
}
@@ -165,9 +127,9 @@ func Update(cmd *cobra.Command, args []string) {
165
127
// This section is ugly but we cant really do much about it.
166
128
// Using interfaces doesn't preserve the "Config" struct state and I dont know any other way to make this work without cursed workarounds.
167
129
168
- if enableUpd {
169
- slog .Debug (fmt .Sprintf ("%s module" , systemUpdater . Config . Title ), slog .String ("module_name" , systemUpdater . Config . Title ), slog .Any ("module_configuration" , systemUpdater . Config ))
170
- percent .ChangeTrackerMessageFancy ( pw , tracker , progressEnabled , percent.TrackerMessage {Title : systemUpdater . Config . Title , Description : systemUpdater . Config .Description })
130
+ if mainSystemDriverConfig . Enabled {
131
+ slog .Debug (fmt .Sprintf ("%s module" , mainSystemDriverConfig . Title ), slog .String ("module_name" , mainSystemDriverConfig . Title ), slog .Any ("module_configuration" , mainSystemDriverConfig ))
132
+ percent .ReportStatusChange ( tracker , percent.TrackerMessage {Title : mainSystemDriverConfig . Title , Description : mainSystemDriverConfig .Description })
171
133
var out * []drv.CommandOutput
172
134
out , err = mainSystemDriver .Update ()
173
135
outputs = append (outputs , * out ... )
@@ -176,7 +138,7 @@ func Update(cmd *cobra.Command, args []string) {
176
138
177
139
if brewUpdater .Config .Enabled {
178
140
slog .Debug (fmt .Sprintf ("%s module" , brewUpdater .Config .Title ), slog .String ("module_name" , brewUpdater .Config .Title ), slog .Any ("module_configuration" , brewUpdater .Config ))
179
- percent .ChangeTrackerMessageFancy ( pw , tracker , progressEnabled , percent.TrackerMessage {Title : brewUpdater .Config .Title , Description : brewUpdater .Config .Description })
141
+ percent .ReportStatusChange ( tracker , percent.TrackerMessage {Title : brewUpdater .Config .Title , Description : brewUpdater .Config .Description })
180
142
var out * []drv.CommandOutput
181
143
out , err = brewUpdater .Update ()
182
144
outputs = append (outputs , * out ... )
@@ -185,7 +147,6 @@ func Update(cmd *cobra.Command, args []string) {
185
147
186
148
if flatpakUpdater .Config .Enabled {
187
149
slog .Debug (fmt .Sprintf ("%s module" , flatpakUpdater .Config .Title ), slog .String ("module_name" , flatpakUpdater .Config .Title ), slog .Any ("module_configuration" , flatpakUpdater .Config ))
188
- percent .ChangeTrackerMessageFancy (pw , tracker , progressEnabled , percent.TrackerMessage {Title : flatpakUpdater .Config .Title , Description : flatpakUpdater .Config .Description })
189
150
var out * []drv.CommandOutput
190
151
out , err = flatpakUpdater .Update ()
191
152
outputs = append (outputs , * out ... )
@@ -194,17 +155,14 @@ func Update(cmd *cobra.Command, args []string) {
194
155
195
156
if distroboxUpdater .Config .Enabled {
196
157
slog .Debug (fmt .Sprintf ("%s module" , distroboxUpdater .Config .Title ), slog .String ("module_name" , distroboxUpdater .Config .Title ), slog .Any ("module_configuration" , distroboxUpdater .Config ))
197
- percent .ChangeTrackerMessageFancy (pw , tracker , progressEnabled , percent.TrackerMessage {Title : distroboxUpdater .Config .Title , Description : distroboxUpdater .Config .Description })
198
158
var out * []drv.CommandOutput
199
159
out , err = distroboxUpdater .Update ()
200
160
outputs = append (outputs , * out ... )
201
161
tracker .IncrementSection (err )
202
162
}
203
163
204
- if progressEnabled {
205
- pw .Stop ()
206
- percent .ResetOscProgress ()
207
- }
164
+ // FIXME: detect interactive session
165
+ percent .ResetOscProgress ()
208
166
if verboseRun {
209
167
slog .Info ("Verbose run requested" )
210
168
0 commit comments