@@ -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