mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-02 18:00:26 +02:00
IDEIntf: added CheckInstallPackageList and InstallPackages
git-svn-id: trunk@30764 -
This commit is contained in:
parent
aeb269207c
commit
8009fe6f7c
@ -23,7 +23,7 @@ unit PackageIntf;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LCLProc, Forms, LazConfigStorage, AvgLvlTree,
|
||||
Classes, SysUtils, contnrs, LCLProc, Forms, LazConfigStorage, AvgLvlTree,
|
||||
NewItemIntf, CompOptsIntf, IDEOptionsIntf;
|
||||
|
||||
const
|
||||
@ -242,6 +242,11 @@ type
|
||||
// package editors
|
||||
function GetPackageOfEditorItem(Sender: TObject): TIDEPackage; virtual; abstract;
|
||||
|
||||
// install
|
||||
function CheckInstallPackageList(PkgIDList: TObjectList): boolean; virtual; abstract;
|
||||
function InstallPackages(PkgIdList: TObjectList;
|
||||
Flags: TPkgInstallInIDEFlags = []): TModalResult; virtual; abstract;
|
||||
|
||||
// events
|
||||
procedure RemoveAllHandlersOfObject(AnObject: TObject);
|
||||
procedure AddHandlerOnGraphChanged(const OnGraphChanged: TNotifyEvent;
|
||||
|
@ -156,7 +156,8 @@ type
|
||||
out Directory: string);
|
||||
procedure PackageFileLoaded(Sender: TObject);
|
||||
procedure OnCheckInstallPackageList(PkgIDList: TObjectList; out Ok: boolean);
|
||||
function LoadDependencyList(FirstDependency: TPkgDependency): TModalResult;
|
||||
function LoadDependencyList(FirstDependency: TPkgDependency;
|
||||
Quiet: boolean): TModalResult;
|
||||
procedure CreateIDEWindow(Sender: TObject; aFormName: string;
|
||||
var AForm: TCustomForm; DoDisableAutoSizing: boolean);
|
||||
private
|
||||
@ -301,9 +302,9 @@ type
|
||||
function DoInstallPackage(APackage: TLazPackage): TModalResult;
|
||||
function DoUninstallPackage(APackage: TLazPackage;
|
||||
Flags: TPkgUninstallFlags; ShowAbort: boolean): TModalResult;
|
||||
//function CheckInstallPackageList(PkgIDList: TObjectList): boolean;
|
||||
function DoInstallPackages(PkgIdList: TObjectList; AddExisting, RebuildIDE, Quiet: boolean;
|
||||
CheckList: boolean = true): TModalResult;
|
||||
function CheckInstallPackageList(PkgIDList: TObjectList): boolean; override;
|
||||
function InstallPackages(PkgIdList: TObjectList;
|
||||
Flags: TPkgInstallInIDEFlags = []): TModalResult; override;
|
||||
procedure DoTranslatePackage(APackage: TLazPackage);
|
||||
function DoOpenPackageSource(APackage: TLazPackage): TModalResult;
|
||||
function DoCompileAutoInstallPackages(Flags: TPkgCompileFlags;
|
||||
@ -405,6 +406,7 @@ procedure TPkgManager.MainIDEitmPkgEditInstallPkgsClick(Sender: TObject);
|
||||
var
|
||||
RebuildIDE: Boolean;
|
||||
PkgIDList: TObjectList;
|
||||
Flags: TPkgInstallInIDEFlags;
|
||||
begin
|
||||
RebuildIDE:=false;
|
||||
PkgIDList:=nil;
|
||||
@ -413,7 +415,9 @@ begin
|
||||
@OnCheckInstallPackageList,PkgIDList,RebuildIDE)<>mrOk
|
||||
then exit;
|
||||
|
||||
DoInstallPackages(PkgIDList,false,RebuildIDE,false,true);
|
||||
Flags:=[piiifSkipChecks,piiifClear];
|
||||
if RebuildIDE then Include(Flags,piiifRebuildIDE);
|
||||
InstallPackages(PkgIDList,[]);
|
||||
finally
|
||||
PkgIDList.Free;
|
||||
end;
|
||||
@ -475,57 +479,12 @@ end;
|
||||
|
||||
procedure TPkgManager.OnCheckInstallPackageList(PkgIDList: TObjectList;
|
||||
out Ok: boolean);
|
||||
var
|
||||
NewFirstAutoInstallDependency: TPkgDependency;
|
||||
PkgList: TFPList;
|
||||
i: Integer;
|
||||
APackage: TLazPackage;
|
||||
ADependency: TPkgDependency;
|
||||
NextDependency: TPkgDependency;
|
||||
begin
|
||||
Ok:=false;
|
||||
PkgList:=nil;
|
||||
try
|
||||
// create new auto install dependency PkgIDList
|
||||
ListPkgIDToDependencyList(PkgIDList,NewFirstAutoInstallDependency,
|
||||
pdlRequires,Self,true);
|
||||
|
||||
// remove all top level runtime packages from the list
|
||||
// Note: it's ok if a designtime package uses a runtime package
|
||||
ADependency:=NewFirstAutoInstallDependency;
|
||||
while ADependency<>nil do begin
|
||||
NextDependency:=ADependency.NextRequiresDependency;
|
||||
if (ADependency.RequiredPackage<>nil)
|
||||
and (ADependency.RequiredPackage.PackageType=lptRunTime) then begin
|
||||
// top level dependency on runtime package => delete
|
||||
DeleteDependencyInList(ADependency,NewFirstAutoInstallDependency,pdlRequires);
|
||||
end;
|
||||
ADependency:=NextDependency;
|
||||
end;
|
||||
|
||||
// get all required packages
|
||||
if LoadDependencyList(NewFirstAutoInstallDependency)<>mrOk then exit;
|
||||
|
||||
PackageGraph.GetAllRequiredPackages(NewFirstAutoInstallDependency,PkgList);
|
||||
|
||||
// try save all modified packages
|
||||
for i:=0 to PkgList.Count-1 do begin
|
||||
APackage:=TLazPackage(PkgList[i]);
|
||||
if (not APackage.AutoCreated)
|
||||
and (APackage.IsVirtual or APackage.Modified) then begin
|
||||
if DoSavePackage(APackage,[])<>mrOk then exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
Ok:=true;
|
||||
finally
|
||||
FreeDependencyList(NewFirstAutoInstallDependency,pdlRequires);
|
||||
PkgList.Free;
|
||||
end;
|
||||
Ok:=CheckInstallPackageList(PkgIDList);
|
||||
end;
|
||||
|
||||
function TPkgManager.LoadDependencyList(FirstDependency: TPkgDependency
|
||||
): TModalResult;
|
||||
function TPkgManager.LoadDependencyList(FirstDependency: TPkgDependency;
|
||||
Quiet: boolean): TModalResult;
|
||||
var
|
||||
CurDependency: TPkgDependency;
|
||||
OpenResult: TLoadPackageResult;
|
||||
@ -536,9 +495,10 @@ begin
|
||||
while CurDependency<>nil do begin
|
||||
OpenResult:=PackageGraph.OpenDependency(CurDependency,false);
|
||||
if OpenResult<>lprSuccess then begin
|
||||
IDEMessageDialog(lisCCOErrorCaption,
|
||||
Format(lisUnableToLoadPackage, ['"', CurDependency.AsString, '"']),
|
||||
mtError,[mbCancel]);
|
||||
if not Quiet then
|
||||
IDEMessageDialog(lisCCOErrorCaption,
|
||||
Format(lisUnableToLoadPackage, ['"', CurDependency.AsString, '"']),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
CurDependency:=CurDependency.NextRequiresDependency;
|
||||
@ -2018,7 +1978,7 @@ begin
|
||||
begin
|
||||
// install
|
||||
AProject.AutoOpenDesignerFormsDisabled:=true;
|
||||
DoInstallPackages(PkgList,true,true,false);
|
||||
InstallPackages(PkgList,[piiifRebuildIDE]);
|
||||
Result:=mrAbort;
|
||||
end else begin
|
||||
// do not warn again
|
||||
@ -3708,8 +3668,58 @@ begin
|
||||
Result:=mrOk;
|
||||
end;
|
||||
|
||||
function TPkgManager.DoInstallPackages(PkgIdList: TObjectList; AddExisting,
|
||||
RebuildIDE, Quiet: boolean; CheckList: boolean): TModalResult;
|
||||
function TPkgManager.CheckInstallPackageList(PkgIDList: TObjectList): boolean;
|
||||
var
|
||||
NewFirstAutoInstallDependency: TPkgDependency;
|
||||
PkgList: TFPList;
|
||||
i: Integer;
|
||||
APackage: TLazPackage;
|
||||
ADependency: TPkgDependency;
|
||||
NextDependency: TPkgDependency;
|
||||
begin
|
||||
Result:=false;
|
||||
PkgList:=nil;
|
||||
try
|
||||
// create new auto install dependency PkgIDList
|
||||
ListPkgIDToDependencyList(PkgIDList,NewFirstAutoInstallDependency,
|
||||
pdlRequires,Self,true);
|
||||
|
||||
// load all required packages
|
||||
if LoadDependencyList(NewFirstAutoInstallDependency,false)<>mrOk then exit;
|
||||
|
||||
// remove all top level runtime packages from the list
|
||||
// Note: it's ok if a designtime package uses a runtime package
|
||||
ADependency:=NewFirstAutoInstallDependency;
|
||||
while ADependency<>nil do begin
|
||||
NextDependency:=ADependency.NextRequiresDependency;
|
||||
if (ADependency.RequiredPackage<>nil)
|
||||
and (ADependency.RequiredPackage.PackageType=lptRunTime) then begin
|
||||
// top level dependency on runtime package => delete
|
||||
DeleteDependencyInList(ADependency,NewFirstAutoInstallDependency,pdlRequires);
|
||||
end;
|
||||
ADependency:=NextDependency;
|
||||
end;
|
||||
|
||||
PackageGraph.GetAllRequiredPackages(NewFirstAutoInstallDependency,PkgList);
|
||||
|
||||
// try save all modified packages
|
||||
for i:=0 to PkgList.Count-1 do begin
|
||||
APackage:=TLazPackage(PkgList[i]);
|
||||
if (not APackage.AutoCreated)
|
||||
and (APackage.IsVirtual or APackage.Modified) then begin
|
||||
if DoSavePackage(APackage,[])<>mrOk then exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
Result:=true;
|
||||
finally
|
||||
FreeDependencyList(NewFirstAutoInstallDependency,pdlRequires);
|
||||
PkgList.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPkgManager.InstallPackages(PkgIdList: TObjectList;
|
||||
Flags: TPkgInstallInIDEFlags): TModalResult;
|
||||
|
||||
procedure CreateChangeReport(
|
||||
OldDependencyList, NewDependencyList: TPkgDependency; Report: TStrings);
|
||||
@ -3763,7 +3773,6 @@ function TPkgManager.DoInstallPackages(PkgIdList: TObjectList; AddExisting,
|
||||
var
|
||||
NewFirstAutoInstallDependency: TPkgDependency;
|
||||
BuildIDEFlags: TBuildLazarusFlags;
|
||||
ok: boolean;
|
||||
Report: TStringList;
|
||||
PkgList: TFPList;
|
||||
RequiredPackage: TLazPackage;
|
||||
@ -3774,7 +3783,7 @@ begin
|
||||
NewFirstAutoInstallDependency:=nil;
|
||||
PkgList:=nil;
|
||||
try
|
||||
if AddExisting then
|
||||
if not (piiifClear in Flags) then
|
||||
begin
|
||||
// add existing install packages to list
|
||||
NewFirstAutoInstallDependency:=PackageGraph.FirstAutoInstallDependency;
|
||||
@ -3785,10 +3794,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
if CheckList then
|
||||
if not (piiifSkipChecks in Flags) then
|
||||
begin
|
||||
OnCheckInstallPackageList(PkgIDList,ok);
|
||||
if not ok then exit(mrCancel);
|
||||
if not CheckInstallPackageList(PkgIDList) then
|
||||
exit(mrCancel);
|
||||
end;
|
||||
|
||||
// create new auto install dependency PkgIDList
|
||||
@ -3798,7 +3807,7 @@ begin
|
||||
PackageGraph.SortDependencyListTopologically(NewFirstAutoInstallDependency,
|
||||
false);
|
||||
|
||||
if not Quiet then
|
||||
if not (piiifQuiet in Flags) then
|
||||
begin
|
||||
// tell the user, which packages will stay, which will be removed and
|
||||
// which will be newly installed
|
||||
@ -3818,7 +3827,7 @@ begin
|
||||
try
|
||||
// get all required packages
|
||||
//debugln('TPkgManager.MainIDEitmPkgEditInstallPkgsClick GetAllRequiredPackages for ',DependencyListAsString(NewFirstAutoInstallDependency,pdlRequires));
|
||||
if LoadDependencyList(NewFirstAutoInstallDependency)<>mrOk then exit(mrCancel);
|
||||
if LoadDependencyList(NewFirstAutoInstallDependency,false)<>mrOk then exit(mrCancel);
|
||||
PackageGraph.GetAllRequiredPackages(NewFirstAutoInstallDependency,PkgList);
|
||||
|
||||
// mark packages for installation
|
||||
@ -3860,7 +3869,8 @@ begin
|
||||
blfWithoutCompilingIDE];
|
||||
if MainIDE.DoSaveBuildIDEConfigs(BuildIDEFlags)<>mrOk then exit(mrCancel);
|
||||
|
||||
if RebuildIDE then begin
|
||||
if piiifRebuildIDE in Flags then
|
||||
begin
|
||||
// rebuild Lazarus
|
||||
if MainIDE.DoBuildLazarus(BuildIDEFlags)<>mrOk then exit(mrCancel);
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user