@@ -101,19 +101,34 @@ func installPlatform(pm *packagemanager.PackageManager,
101101 for _ , tool := range toolsToInstall {
102102 err := commands .InstallToolRelease (pm , tool , taskCB )
103103 if err != nil {
104- // TODO: handle error
104+ return err
105105 }
106106 }
107107
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 {}
111110 if installed == nil {
111+ // No version of this platform is installed
112112 log .Info ("Installing platform" )
113113 taskCB (& rpc.TaskProgress {Name : "Installing " + platformRelease .String ()})
114114 } 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+ }
117132 }
118133
119134 // Install
@@ -129,17 +144,25 @@ func installPlatform(pm *packagemanager.PackageManager,
129144
130145 // In case of error try to rollback
131146 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 ()})
134149
135150 // Rollback
136151 if err := pm .UninstallPlatform (platformRelease ); err != nil {
137152 log .WithError (err ).Error ("Error rolling-back changes." )
138153 taskCB (& rpc.TaskProgress {Message : "Error rolling-back changes: " + err .Error ()})
139154 }
140155
141- return fmt .Errorf ("updating platform: %s" , errUn )
156+ return fmt .Errorf ("upgrading platform: %s" , errUn )
142157 }
158+
159+ // Uninstall unused tools
160+ for _ , tool := range installedTools {
161+ if ! pm .IsToolRequired (tool ) {
162+ uninstallToolRelease (pm , tool , taskCB )
163+ }
164+ }
165+
143166 }
144167
145168 // Perform post install
0 commit comments