mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 09:19:22 +02:00
implemented automatic uninstall on failed install
git-svn-id: trunk@8204 -
This commit is contained in:
parent
6191874ec3
commit
bf0b329c88
@ -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, ... .';
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user