implemented automatic uninstall on failed install

git-svn-id: trunk@8204 -
This commit is contained in:
mattias 2005-11-21 21:44:24 +00:00
parent 6191874ec3
commit bf0b329c88
2 changed files with 53 additions and 21 deletions

View File

@ -796,6 +796,9 @@ resourcestring
lisEnvOptDlgInvalidDebuggerFilenameMsg = lisEnvOptDlgInvalidDebuggerFilenameMsg =
'The debugger file "%s" is not an executable.'; 'The debugger file "%s" is not an executable.';
lisEnvOptDlgDirectoryNotFound = 'Directory not found'; lisEnvOptDlgDirectoryNotFound = 'Directory not found';
lisInstallationFailed = 'Installation failed';
lisPkgMangThePackageFailedToCompileRemoveItFromTheInstallati = 'The package %'
+'s%s%s failed to compile.%sRemove it from the installation list?';
lisEnvOptDlgLazarusDirNotFoundMsg = 'Lazarus directory "%s" not found.'; lisEnvOptDlgLazarusDirNotFoundMsg = 'Lazarus directory "%s" not found.';
lisEnvOptDlgInvalidLazarusDir = 'The lazarus directory "%s" does not look correct.' lisEnvOptDlgInvalidLazarusDir = 'The lazarus directory "%s" does not look correct.'
+' Normally it contains directories like lcl, debugger, designer, components, ... .'; +' Normally it contains directories like lcl, debugger, designer, components, ... .';

View File

@ -65,6 +65,12 @@ uses
MainBar, MainIntf, MainBase; MainBar, MainIntf, MainBase;
type type
TPkgUninstallFlag = (
puifDoNotConfirm,
puifDoNotBuildIDE
);
TPkgUninstallFlags = set of TPkgUninstallFlag;
{ TPkgManager } { TPkgManager }
@ -276,7 +282,8 @@ type
procedure UnloadInstalledPackages; procedure UnloadInstalledPackages;
function ShowConfigureCustomComponents: TModalResult; override; function ShowConfigureCustomComponents: TModalResult; override;
function DoInstallPackage(APackage: TLazPackage): TModalResult; function DoInstallPackage(APackage: TLazPackage): TModalResult;
function DoUninstallPackage(APackage: TLazPackage): TModalResult; function DoUninstallPackage(APackage: TLazPackage;
Flags: TPkgUninstallFlags): TModalResult;
function DoOpenPackageSource(APackage: TLazPackage): TModalResult; function DoOpenPackageSource(APackage: TLazPackage): TModalResult;
function DoCompileAutoInstallPackages(Flags: TPkgCompileFlags function DoCompileAutoInstallPackages(Flags: TPkgCompileFlags
): TModalResult; override; ): TModalResult; override;
@ -801,7 +808,7 @@ end;
function TPkgManager.OnPackageEditorUninstallPackage(Sender: TObject; function TPkgManager.OnPackageEditorUninstallPackage(Sender: TObject;
APackage: TLazPackage): TModalResult; APackage: TLazPackage): TModalResult;
begin begin
Result:=DoUninstallPackage(APackage); Result:=DoUninstallPackage(APackage,[]);
end; end;
function TPkgManager.OnPackageEditorOpenPkgFile(Sender: TObject; function TPkgManager.OnPackageEditorOpenPkgFile(Sender: TObject;
@ -926,7 +933,7 @@ end;
function TPkgManager.PackageGraphExplorerUninstallPackage(Sender: TObject; function TPkgManager.PackageGraphExplorerUninstallPackage(Sender: TObject;
APackage: TLazPackage): TModalResult; APackage: TLazPackage): TModalResult;
begin begin
Result:=DoUninstallPackage(APackage); Result:=DoUninstallPackage(APackage,[]);
end; end;
function TPkgManager.PkgLinksDependencyOwnerGetPkgFilename( function TPkgManager.PkgLinksDependencyOwnerGetPkgFilename(
@ -2908,6 +2915,23 @@ begin
end; end;
finally finally
MessagesView.EndBlock; MessagesView.EndBlock;
if Result<>mrOk then begin
if (APackage.AutoInstall<>pitNope) and (APackage.Installed=pitNope) then
begin
// package was tried to install, but failed
// -> ask user if the package should be removed from the installation
// list
if MessageDlg(lisInstallationFailed,
Format(
lisPkgMangThePackageFailedToCompileRemoveItFromTheInstallati, [
'"', APackage.IDAsString, '"', #13]), mtConfirmation,
[mbYes,mbIgnore],0)=mrYes then
begin
DoUninstallPackage(APackage,[puifDoNotConfirm,puifDoNotBuildIDE]);
end;
end;
end;
end; end;
finally finally
@ -3675,6 +3699,7 @@ begin
// now PkgList contains only the required packages that were added to the // now PkgList contains only the required packages that were added to the
// list of installation packages // list of installation packages
// => show the user the list
if PkgList.Count>0 then begin if PkgList.Count>0 then begin
s:=''; s:='';
for i:=0 to PkgList.Count-1 do begin for i:=0 to PkgList.Count-1 do begin
@ -3740,7 +3765,8 @@ begin
Result:=mrOk; Result:=mrOk;
end; end;
function TPkgManager.DoUninstallPackage(APackage: TLazPackage): TModalResult; function TPkgManager.DoUninstallPackage(APackage: TLazPackage;
Flags: TPkgUninstallFlags): TModalResult;
var var
DependencyPath: TList; DependencyPath: TList;
ParentPackage: TLazPackage; ParentPackage: TLazPackage;
@ -3762,10 +3788,12 @@ begin
end; end;
// confirm uninstall package // confirm uninstall package
Result:=MessageDlg(lisPkgMangUninstallPackage, if not (puifDoNotConfirm in Flags) then begin
Format(lisPkgMangUninstallPackage2, [APackage.IDAsString]), Result:=MessageDlg(lisPkgMangUninstallPackage,
mtConfirmation,[mbYes,mbCancel,mbAbort],0); Format(lisPkgMangUninstallPackage2, [APackage.IDAsString]),
if Result<>mrYes then exit; mtConfirmation,[mbYes,mbCancel,mbAbort],0);
if Result<>mrYes then exit;
end;
PackageGraph.BeginUpdate(true); PackageGraph.BeginUpdate(true);
try try
@ -3793,20 +3821,21 @@ begin
Result:=MainIDE.DoSaveBuildIDEConfigs(BuildIDEFlags); Result:=MainIDE.DoSaveBuildIDEConfigs(BuildIDEFlags);
if Result<>mrOk then exit; if Result<>mrOk then exit;
// ask user to rebuilt Lazarus now if not (puifDoNotBuildIDE in Flags) then begin
Result:=MessageDlg(lisPkgMangRebuildLazarus, // ask user to rebuilt Lazarus now
Format(lisPkgMangThePackageWasMarkedCurrentlyLazarus, ['"', Result:=MessageDlg(lisPkgMangRebuildLazarus,
APackage.IDAsString, '"', #13, #13, #13]), Format(lisPkgMangThePackageWasMarkedCurrentlyLazarus, ['"',
mtConfirmation,[mbYes,mbNo],0); APackage.IDAsString, '"', #13, #13, #13]),
if Result=mrNo then begin mtConfirmation,[mbYes,mbNo],0);
Result:=mrOk; if Result=mrNo then begin
exit; Result:=mrOk;
exit;
end;
// rebuild Lazarus
Result:=MainIDE.DoBuildLazarus(BuildIDEFlags);
if Result<>mrOk then exit;
end; end;
// rebuild Lazarus
Result:=MainIDE.DoBuildLazarus(BuildIDEFlags);
if Result<>mrOk then exit;
finally finally
PackageGraph.EndUpdate; PackageGraph.EndUpdate;
end; end;