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