mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 01:59:08 +02:00
IDE: package links: remove old links to same lpk files, fixed using the recently used lpk of two packages with same name
git-svn-id: branches/fixes_1_4@47648 -
This commit is contained in:
parent
c1fb58d3d5
commit
5bc33bf3f1
@ -238,13 +238,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function CompareLinksForFilename(Data1, Data2: Pointer): integer;
|
||||||
|
var
|
||||||
|
Link1: TPackageLink absolute Data1;
|
||||||
|
Link2: TPackageLink absolute Data2;
|
||||||
|
begin
|
||||||
|
Result:=CompareFilenames(Link1.LPKFilename,Link2.LPKFilename);
|
||||||
|
end;
|
||||||
|
|
||||||
function CompareLinksForFilenameAndFileAge(Data1, Data2: Pointer): integer;
|
function CompareLinksForFilenameAndFileAge(Data1, Data2: Pointer): integer;
|
||||||
var
|
var
|
||||||
Link1: TPackageLink;
|
Link1: TPackageLink absolute Data1;
|
||||||
Link2: TPackageLink;
|
Link2: TPackageLink absolute Data2;
|
||||||
begin
|
begin
|
||||||
Link1:=TPackageLink(Data1);
|
|
||||||
Link2:=TPackageLink(Data2);
|
|
||||||
// first compare filenames
|
// first compare filenames
|
||||||
Result:=CompareFilenames(Link1.LPKFilename,Link2.LPKFilename);
|
Result:=CompareFilenames(Link1.LPKFilename,Link2.LPKFilename);
|
||||||
if Result<>0 then exit;
|
if Result<>0 then exit;
|
||||||
@ -549,6 +555,8 @@ var
|
|||||||
NewPkgLink: TPackageLink;
|
NewPkgLink: TPackageLink;
|
||||||
ItemPath: String;
|
ItemPath: String;
|
||||||
FileVersion: LongInt;
|
FileVersion: LongInt;
|
||||||
|
OtherNode: TAvgLvlTreeNode;
|
||||||
|
OtherLink: TPackageLink;
|
||||||
begin
|
begin
|
||||||
if fUpdateLock>0 then begin
|
if fUpdateLock>0 then begin
|
||||||
Include(FStates,plsUserLinksNeedUpdate);
|
Include(FStates,plsUserLinksNeedUpdate);
|
||||||
@ -611,11 +619,30 @@ begin
|
|||||||
then
|
then
|
||||||
NewPkgLink.FLastUsed := 0;
|
NewPkgLink.FLastUsed := 0;
|
||||||
|
|
||||||
if NewPkgLink.MakeSense then begin
|
if not NewPkgLink.MakeSense then begin
|
||||||
FUserLinksSortID.Add(NewPkgLink);
|
debugln(['Warning: TPackageLinks.UpdateUserLinks invalid link: ',NewPkgLink.IDAsString]);
|
||||||
FUserLinksSortFile.Add(NewPkgLink);
|
|
||||||
end else
|
|
||||||
NewPkgLink.Release;
|
NewPkgLink.Release;
|
||||||
|
continue;
|
||||||
|
end;
|
||||||
|
OtherNode:=FUserLinksSortFile.FindKey(NewPkgLink,@CompareLinksForFilename);
|
||||||
|
if OtherNode<>nil then begin
|
||||||
|
// a link to the same file
|
||||||
|
OtherLink:=TPackageLink(OtherNode.Data);
|
||||||
|
debugln(['Warning: TPackageLinks.UpdateUserLinks two links for file: ',NewPkgLink.LPKFilename,' A=',OtherLink.IDAsString,' B=',NewPkgLink.IDAsString]);
|
||||||
|
if OtherLink.LastUsed<NewPkgLink.LastUsed then begin
|
||||||
|
debugln(['Warning: TPackageLinks.UpdateUserLinks removing older link ',OtherLink.IDAsString]);
|
||||||
|
FUserLinksSortID.Delete(OtherNode);
|
||||||
|
FUserLinksSortFile.Delete(OtherNode);
|
||||||
|
OtherLink.Release;
|
||||||
|
end else begin
|
||||||
|
debugln(['Warning: TPackageLinks.UpdateUserLinks ignoring older link ',NewPkgLink.IDAsString]);
|
||||||
|
NewPkgLink.Release;
|
||||||
|
continue;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FUserLinksSortID.Add(NewPkgLink);
|
||||||
|
FUserLinksSortFile.Add(NewPkgLink);
|
||||||
end;
|
end;
|
||||||
XMLConfig.Modified:=false;
|
XMLConfig.Modified:=false;
|
||||||
XMLConfig.Free;
|
XMLConfig.Free;
|
||||||
@ -801,7 +828,8 @@ begin
|
|||||||
else begin
|
else begin
|
||||||
// there are two packages fitting
|
// there are two packages fitting
|
||||||
if ((Link.LastUsed>Result.LastUsed)
|
if ((Link.LastUsed>Result.LastUsed)
|
||||||
or (Link.Version.Compare(Result.Version)>0))
|
or ((Abs(Link.LastUsed-Result.LastUsed)<1/86400)
|
||||||
|
and (Link.Version.Compare(Result.Version)>0)))
|
||||||
and FileExistsCached(Link.GetEffectiveFilename) then
|
and FileExistsCached(Link.GetEffectiveFilename) then
|
||||||
Result:=Link; // this one is better
|
Result:=Link; // this one is better
|
||||||
end;
|
end;
|
||||||
@ -819,26 +847,51 @@ function TPackageLinks.FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree;
|
|||||||
var
|
var
|
||||||
Link: TPackageLink;
|
Link: TPackageLink;
|
||||||
CurNode: TAvgLvlTreeNode;
|
CurNode: TAvgLvlTreeNode;
|
||||||
|
{$IFDEF VerbosePkgLinkSameName}
|
||||||
|
Node1: TAvgLvlTreeNode;
|
||||||
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
Result:=nil;
|
Result:=nil;
|
||||||
if (Dependency=nil) or (not Dependency.MakeSense) then begin
|
if (Dependency=nil) or (not Dependency.MakeSense) then begin
|
||||||
DebugLn(['TPackageLinks.FindLinkWithDependencyInTree Dependency makes no sense']);
|
DebugLn(['TPackageLinks.FindLinkWithDependencyInTree Dependency makes no sense']);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
if CompareText(Dependency.PackageName,'tstver')=0 then
|
||||||
|
debugln(['TPackageLinks.FindLinkWithDependencyInTree AAA1 ',Dependency.AsString(true)]);
|
||||||
// if there are several fitting the description, use the last used
|
// if there are several fitting the description, use the last used
|
||||||
// and highest version
|
// and highest version
|
||||||
CurNode:=FindLeftMostNode(LinkTree,Dependency.PackageName);
|
CurNode:=FindLeftMostNode(LinkTree,Dependency.PackageName);
|
||||||
|
{$IFDEF VerbosePkgLinkSameName}
|
||||||
|
if CompareText(Dependency.PackageName,'tstver')=0 then begin
|
||||||
|
Node1:=CurNode.Precessor;
|
||||||
|
if Node1<>nil then
|
||||||
|
debugln(['TPackageLinks.FindLinkWithDependencyInTree Precessor=',TPackageLink(Node1.Data).IDAsString]);
|
||||||
|
Node1:=CurNode.Successor;
|
||||||
|
if Node1<>nil then
|
||||||
|
debugln(['TPackageLinks.FindLinkWithDependencyInTree Successor=',TPackageLink(Node1.Data).IDAsString]);
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
while CurNode<>nil do begin
|
while CurNode<>nil do begin
|
||||||
Link:=TPackageLink(CurNode.Data);
|
Link:=TPackageLink(CurNode.Data);
|
||||||
|
{$IFDEF VerbosePkgLinkSameName}
|
||||||
|
if CompareText(Dependency.PackageName,'tstver')=0 then
|
||||||
|
debugln(['TPackageLinks.FindLinkWithDependencyInTree Link=',Link.IDAsString]);
|
||||||
|
{$ENDIF}
|
||||||
if Dependency.IsCompatible(Link.Version)
|
if Dependency.IsCompatible(Link.Version)
|
||||||
and ((IgnoreFiles=nil) or (not IgnoreFiles.Contains(Link.GetEffectiveFilename)))
|
and ((IgnoreFiles=nil) or (not IgnoreFiles.Contains(Link.GetEffectiveFilename)))
|
||||||
then begin
|
then begin
|
||||||
if Result=nil then
|
if Result=nil then
|
||||||
Result:=Link
|
Result:=Link
|
||||||
else begin
|
else begin
|
||||||
|
{$IFDEF VerbosePkgLinkSameName}
|
||||||
|
if CompareText(Dependency.PackageName,'tstver')=0 then
|
||||||
|
debugln(['TPackageLinks.FindLinkWithDependencyInTree Link=',Link.IDAsString,' LastUsed=',DateTimeToStr(Link.LastUsed),' Result=',Result.IDAsString,' LastUsed=',DateTimeToStr(Result.LastUsed)]);
|
||||||
|
{$ENDIF}
|
||||||
// there are two packages fitting
|
// there are two packages fitting
|
||||||
if ((Link.LastUsed>Result.LastUsed)
|
if ((Link.LastUsed>Result.LastUsed)
|
||||||
or (Link.Version.Compare(Result.Version)>0))
|
or ((Abs(Link.LastUsed-Result.LastUsed)<1/86400)
|
||||||
|
and (Link.Version.Compare(Result.Version)>0)))
|
||||||
and FileExistsCached(Link.GetEffectiveFilename) then
|
and FileExistsCached(Link.GetEffectiveFilename) then
|
||||||
Result:=Link; // this one is better
|
Result:=Link; // this one is better
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user