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