mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-19 00:19:26 +02:00
IDE: GetAllRequiredPackages: sort for topological lvl and name
git-svn-id: trunk@40306 -
This commit is contained in:
parent
e1f38d1a0b
commit
0c71b8e46c
@ -874,6 +874,7 @@ function CompareLazPackageID(Data1, Data2: Pointer): integer;
|
|||||||
function CompareNameWithPackageID(Key, Data: Pointer): integer;
|
function CompareNameWithPackageID(Key, Data: Pointer): integer;
|
||||||
function ComparePkgIDMaskWithPackageID(Key, Data: Pointer): integer;
|
function ComparePkgIDMaskWithPackageID(Key, Data: Pointer): integer;
|
||||||
function CompareLazPackageIDNames(Data1, Data2: Pointer): integer;
|
function CompareLazPackageIDNames(Data1, Data2: Pointer): integer;
|
||||||
|
function CompareLazPackageTopologicallyAndName(Data1, Data2: Pointer): integer;
|
||||||
function CompareNameWithPkgDependency(Key, Data: Pointer): integer;
|
function CompareNameWithPkgDependency(Key, Data: Pointer): integer;
|
||||||
function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
|
function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
|
||||||
function CompareUnitsTree(UnitTree1, UnitTree2: TPkgUnitsTree): integer;
|
function CompareUnitsTree(UnitTree1, UnitTree2: TPkgUnitsTree): integer;
|
||||||
@ -1174,11 +1175,9 @@ end;
|
|||||||
|
|
||||||
function CompareLazPackageID(Data1, Data2: Pointer): integer;
|
function CompareLazPackageID(Data1, Data2: Pointer): integer;
|
||||||
var
|
var
|
||||||
Pkg1: TLazPackageID;
|
Pkg1: TLazPackageID absolute Data1;
|
||||||
Pkg2: TLazPackageID;
|
Pkg2: TLazPackageID absolute Data2;
|
||||||
begin
|
begin
|
||||||
Pkg1:=TLazPackageID(Data1);
|
|
||||||
Pkg2:=TLazPackageID(Data2);
|
|
||||||
Result:=Pkg1.Compare(Pkg2);
|
Result:=Pkg1.Compare(Pkg2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1197,41 +1196,44 @@ end;
|
|||||||
|
|
||||||
function ComparePkgIDMaskWithPackageID(Key, Data: Pointer): integer;
|
function ComparePkgIDMaskWithPackageID(Key, Data: Pointer): integer;
|
||||||
var
|
var
|
||||||
Pkg1: TLazPackageID;
|
Pkg1: TLazPackageID absolute Key;
|
||||||
Pkg2: TLazPackageID;
|
Pkg2: TLazPackageID absolute Data;
|
||||||
begin
|
begin
|
||||||
Pkg1:=TLazPackageID(Key);
|
|
||||||
Pkg2:=TLazPackageID(Data);
|
|
||||||
Result:=Pkg1.CompareMask(Pkg2);
|
Result:=Pkg1.CompareMask(Pkg2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CompareLazPackageIDNames(Data1, Data2: Pointer): integer;
|
function CompareLazPackageIDNames(Data1, Data2: Pointer): integer;
|
||||||
var
|
var
|
||||||
Pkg1: TLazPackageID;
|
Pkg1: TLazPackageID absolute Data1;
|
||||||
Pkg2: TLazPackageID;
|
Pkg2: TLazPackageID absolute Data2;
|
||||||
begin
|
begin
|
||||||
Pkg1:=TLazPackageID(Data1);
|
Result:=SysUtils.CompareText(Pkg1.Name,Pkg2.Name);
|
||||||
Pkg2:=TLazPackageID(Data2);
|
end;
|
||||||
|
|
||||||
|
function CompareLazPackageTopologicallyAndName(Data1, Data2: Pointer): integer;
|
||||||
|
var
|
||||||
|
Pkg1: TLazPackage absolute Data1;
|
||||||
|
Pkg2: TLazPackage absolute Data2;
|
||||||
|
begin
|
||||||
|
Result:=Pkg1.TopologicalLevel-Pkg2.TopologicalLevel;
|
||||||
|
if Result<>0 then exit;
|
||||||
Result:=SysUtils.CompareText(Pkg1.Name,Pkg2.Name);
|
Result:=SysUtils.CompareText(Pkg1.Name,Pkg2.Name);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CompareNameWithPkgDependency(Key, Data: Pointer): integer;
|
function CompareNameWithPkgDependency(Key, Data: Pointer): integer;
|
||||||
var
|
var
|
||||||
PkgName: String;
|
PkgName: String;
|
||||||
Dependency: TPkgDependency;
|
Dependency: TPkgDependency absolute Data;
|
||||||
begin
|
begin
|
||||||
PkgName:=String(Key);
|
PkgName:=String(Key);
|
||||||
Dependency:=TPkgDependency(Data);
|
|
||||||
Result:=SysUtils.CompareText(PkgName,Dependency.PackageName);
|
Result:=SysUtils.CompareText(PkgName,Dependency.PackageName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
|
function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
|
||||||
var
|
var
|
||||||
Dependency1: TPkgDependency;
|
Dependency1: TPkgDependency absolute Data1;
|
||||||
Dependency2: TPkgDependency;
|
Dependency2: TPkgDependency absolute Data2;
|
||||||
begin
|
begin
|
||||||
Dependency1:=TPkgDependency(Data1);
|
|
||||||
Dependency2:=TPkgDependency(Data2);
|
|
||||||
Result:=SysUtils.CompareText(Dependency1.PackageName,Dependency2.PackageName);
|
Result:=SysUtils.CompareText(Dependency1.PackageName,Dependency2.PackageName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -5207,8 +5207,12 @@ procedure TLazPackageGraph.GetAllRequiredPackages(APackage: TLazPackage;
|
|||||||
if Dependency.LoadPackageResult<>lprSuccess then continue;
|
if Dependency.LoadPackageResult<>lprSuccess then continue;
|
||||||
//debugln('TLazPackageGraph.GetAllRequiredPackages B ',Dependency.AsString);
|
//debugln('TLazPackageGraph.GetAllRequiredPackages B ',Dependency.AsString);
|
||||||
RequiredPackage:=Dependency.RequiredPackage;
|
RequiredPackage:=Dependency.RequiredPackage;
|
||||||
if (lpfVisited in RequiredPackage.Flags) then
|
if (lpfVisited in RequiredPackage.Flags) then begin
|
||||||
continue; // already visited
|
// already visited
|
||||||
|
if HighestLevel<RequiredPackage.TopologicalLevel then
|
||||||
|
HighestLevel:=RequiredPackage.TopologicalLevel;
|
||||||
|
continue;
|
||||||
|
end;
|
||||||
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfVisited];
|
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfVisited];
|
||||||
if ord(RequiredPackage.AutoUpdate)<ord(MinPolicy) then
|
if ord(RequiredPackage.AutoUpdate)<ord(MinPolicy) then
|
||||||
continue; // skip manually updated packages
|
continue; // skip manually updated packages
|
||||||
@ -5240,18 +5244,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
// create topological list, beginning with the leaves
|
// create topological list, beginning with the leaves
|
||||||
GetTopologicalOrder(FirstDependency,DepLevel);
|
GetTopologicalOrder(FirstDependency,DepLevel);
|
||||||
|
if List=nil then exit;
|
||||||
|
MergeSort(List,@CompareLazPackageTopologicallyAndName);
|
||||||
if not (pirCompileOrder in Flags) then begin
|
if not (pirCompileOrder in Flags) then begin
|
||||||
// reverse list order
|
// reverse list order
|
||||||
if List<>nil then begin
|
i:=0;
|
||||||
i:=0;
|
j:=List.Count-1;
|
||||||
j:=List.Count-1;
|
while i<j do begin
|
||||||
while i<j do begin
|
List.Exchange(i,j);
|
||||||
List.Exchange(i,j);
|
inc(i);
|
||||||
inc(i);
|
dec(j);
|
||||||
dec(j);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
//for i:=0 to List.Count-1 do
|
||||||
|
// debugln(['TLazPackageGraph.GetAllRequiredPackages ',i,'/',List.Count-1,' ',TLazPackage(List[i]).Name,' ',TLazPackage(List[i]).TopologicalLevel]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLazPackageGraph.GetConnectionsTree(FirstDependency: TPkgDependency;
|
procedure TLazPackageGraph.GetConnectionsTree(FirstDependency: TPkgDependency;
|
||||||
|
Loading…
Reference in New Issue
Block a user