@@ -98,19 +98,34 @@ func installPlatform(pm *packagemanager.PackageManager,
9898 for _ , tool := range toolsToInstall {
9999 err := commands .InstallToolRelease (pm , tool , taskCB )
100100 if err != nil {
101- // TODO: handle error
101+ return err
102102 }
103103 }
104104
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 {}
108107 if installed == nil {
108+ // No version of this platform is installed
109109 log .Info ("Installing platform" )
110110 taskCB (& rpc.TaskProgress {Name : "Installing " + platformRelease .String ()})
111111 } 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+ }
114129 }
115130
116131 // Install
@@ -126,17 +141,25 @@ func installPlatform(pm *packagemanager.PackageManager,
126141
127142 // In case of error try to rollback
128143 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 ()})
131146
132147 // Rollback
133148 if err := pm .UninstallPlatform (platformRelease ); err != nil {
134149 log .WithError (err ).Error ("Error rolling-back changes." )
135150 taskCB (& rpc.TaskProgress {Message : "Error rolling-back changes: " + err .Error ()})
136151 }
137152
138- return fmt .Errorf ("updating platform: %s" , errUn )
153+ return fmt .Errorf ("upgrading platform: %s" , errUn )
139154 }
155+
156+ // Uninstall unused tools
157+ for _ , tool := range installedTools {
158+ if ! pm .IsToolRequired (tool ) {
159+ uninstallToolRelease (pm , tool , taskCB )
160+ }
161+ }
162+
140163 }
141164
142165 // Perform post install
0 commit comments