@@ -101,19 +101,34 @@ func installPlatform(pm *packagemanager.PackageManager,
101
101
for _ , tool := range toolsToInstall {
102
102
err := commands .InstallToolRelease (pm , tool , taskCB )
103
103
if err != nil {
104
- // TODO: handle error
104
+ return err
105
105
}
106
106
}
107
107
108
- // Are we installing or upgrading?
109
- platform := platformRelease .Platform
110
- installed := pm .GetInstalledPlatformRelease (platform )
108
+ installed := pm .GetInstalledPlatformRelease (platformRelease .Platform )
109
+ installedTools := []* cores.ToolRelease {}
111
110
if installed == nil {
111
+ // No version of this platform is installed
112
112
log .Info ("Installing platform" )
113
113
taskCB (& rpc.TaskProgress {Name : "Installing " + platformRelease .String ()})
114
114
} else {
115
- log .Info ("Updating platform " + installed .String ())
116
- taskCB (& rpc.TaskProgress {Name : "Updating " + installed .String () + " with " + platformRelease .String ()})
115
+ // A platform with a different version is already installed
116
+ log .Info ("Upgrading platform " + installed .String ())
117
+ taskCB (& rpc.TaskProgress {Name : "Upgrading " + installed .String () + " with " + platformRelease .String ()})
118
+ platformRef := & packagemanager.PlatformReference {
119
+ Package : platformRelease .Platform .Package .Name ,
120
+ PlatformArchitecture : platformRelease .Platform .Architecture ,
121
+ PlatformVersion : installed .Version ,
122
+ }
123
+
124
+ // Get a list of tools used by the currently installed platform version.
125
+ // This must be done so tools used by the currently installed version are
126
+ // removed if not used also by the newly installed version.
127
+ var err error
128
+ _ , installedTools , err = pm .FindPlatformReleaseDependencies (platformRef )
129
+ if err != nil {
130
+ return fmt .Errorf ("can't find dependencies for platform %s: %w" , platformRef , err )
131
+ }
117
132
}
118
133
119
134
// Install
@@ -129,17 +144,25 @@ func installPlatform(pm *packagemanager.PackageManager,
129
144
130
145
// In case of error try to rollback
131
146
if errUn != nil {
132
- log .WithError (errUn ).Error ("Error updating platform." )
133
- taskCB (& rpc.TaskProgress {Message : "Error updating platform: " + err .Error ()})
147
+ log .WithError (errUn ).Error ("Error upgrading platform." )
148
+ taskCB (& rpc.TaskProgress {Message : "Error upgrading platform: " + err .Error ()})
134
149
135
150
// Rollback
136
151
if err := pm .UninstallPlatform (platformRelease ); err != nil {
137
152
log .WithError (err ).Error ("Error rolling-back changes." )
138
153
taskCB (& rpc.TaskProgress {Message : "Error rolling-back changes: " + err .Error ()})
139
154
}
140
155
141
- return fmt .Errorf ("updating platform: %s" , errUn )
156
+ return fmt .Errorf ("upgrading platform: %s" , errUn )
142
157
}
158
+
159
+ // Uninstall unused tools
160
+ for _ , tool := range installedTools {
161
+ if ! pm .IsToolRequired (tool ) {
162
+ uninstallToolRelease (pm , tool , taskCB )
163
+ }
164
+ }
165
+
143
166
}
144
167
145
168
// Perform post install
0 commit comments