mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 09:19:32 +02:00
IDE: change lazarus dir, fixed reloading lpl, reload lpk in topological order
git-svn-id: trunk@33183 -
This commit is contained in:
parent
c3252ee544
commit
ba97db223f
@ -249,7 +249,7 @@ begin
|
||||
if OwnerComboBox.Text=lisEdtDefCurrentProject then
|
||||
CurOwner:=Project1
|
||||
else
|
||||
CurOwner:=PackageGraph.FindAPackageWithName(OwnerComboBox.Text,nil);
|
||||
CurOwner:=PackageGraph.FindPackageWithName(OwnerComboBox.Text,nil);
|
||||
if CurOwner=nil then begin
|
||||
DebugLn(['TChgEncodingDialog.UpdatePreview package not found: ',OwnerComboBox.Text]);
|
||||
exit;
|
||||
|
@ -1551,7 +1551,7 @@ begin
|
||||
end;
|
||||
// search package in graph
|
||||
PkgName:=ExtractFileNameOnly(fLazPFilename);
|
||||
LazPackage:=PackageGraph.FindAPackageWithName(PkgName,nil);
|
||||
LazPackage:=PackageGraph.FindPackageWithName(PkgName,nil);
|
||||
if LazPackage<>nil then begin
|
||||
// there is already a package loaded with this name ...
|
||||
if CompareFilenames(LazPackage.Filename,fLazPFilename)<>0 then begin
|
||||
|
@ -586,7 +586,7 @@ begin
|
||||
// nothing
|
||||
end else begin
|
||||
// package
|
||||
APackage:=PackageGraph.FindAPackageWithName(UnitList.Owner,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(UnitList.Owner,nil);
|
||||
if APackage<>nil then begin
|
||||
// check if package can be added to project
|
||||
if Project1.FindDependencyByName(APackage.Name)=nil then begin
|
||||
@ -969,7 +969,7 @@ begin
|
||||
exit;
|
||||
end else begin
|
||||
// package
|
||||
APackage:=PackageGraph.FindAPackageWithName(SelectedUnit.UnitList.Owner,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(SelectedUnit.UnitList.Owner,nil);
|
||||
if APackage=nil then begin
|
||||
DebugLn(['TCodeBrowserView.UseUnitInSrcEditor package not '
|
||||
+'found: ', SelectedUnit.UnitList.Owner]);
|
||||
@ -1159,7 +1159,7 @@ begin
|
||||
end else if Options.Scope=ProjectDescription then begin
|
||||
RootOwner:=CodeBrowserProjectName;
|
||||
end else begin
|
||||
APackage:=PackageGraph.FindAPackageWithName(Options.Scope,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(Options.Scope,nil);
|
||||
if APackage<>nil then
|
||||
RootOwner:=APackage.Name;
|
||||
end;
|
||||
@ -1176,7 +1176,7 @@ begin
|
||||
then begin
|
||||
AddPackages(Project1.FirstRequiredDependency);
|
||||
end else if FWorkingParserRoot.Owner<>'' then begin
|
||||
APackage:=PackageGraph.FindAPackageWithName(FWorkingParserRoot.Owner,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(FWorkingParserRoot.Owner,nil);
|
||||
if APackage<>nil then
|
||||
AddPackages(APackage.FirstRequiredDependency);
|
||||
end;
|
||||
@ -1536,7 +1536,7 @@ begin
|
||||
end else if List.Owner=CodeBrowserProjectName then begin
|
||||
AddFilesOfProject(Project1);
|
||||
end else begin
|
||||
APackage:=PackageGraph.FindAPackageWithName(List.Owner,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(List.Owner,nil);
|
||||
AddFilesOfPackage(APackage);
|
||||
end;
|
||||
|
||||
@ -2638,7 +2638,7 @@ begin
|
||||
if Node=nil then exit;
|
||||
if not (Node is TCodeBrowserUnitList) then exit;
|
||||
UnitList:=TCodeBrowserUnitList(Node);
|
||||
Result:=PackageGraph.FindAPackageWithName(UnitList.Owner,nil);
|
||||
Result:=PackageGraph.FindPackageWithName(UnitList.Owner,nil);
|
||||
end;
|
||||
|
||||
function TCodeBrowserView.GetCurUnitInSrcEditor(out FileOwner: TObject; out
|
||||
@ -2713,7 +2713,7 @@ begin
|
||||
// nothing
|
||||
end else begin
|
||||
// open package
|
||||
APackage:=PackageGraph.FindAPackageWithName(List.Owner,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(List.Owner,nil);
|
||||
if APackage<>nil then begin
|
||||
PackageEditingInterface.DoOpenPackageWithName(List.Owner,[],false);
|
||||
end;
|
||||
|
@ -1743,7 +1743,7 @@ begin
|
||||
exit;
|
||||
end;
|
||||
// check package
|
||||
Result:=PackageGraph.FindAPackageWithName(Modulename,nil);
|
||||
Result:=PackageGraph.FindPackageWithName(Modulename,nil);
|
||||
if Result<>nil then exit;
|
||||
// check IDE as project
|
||||
if SysUtils.CompareText(IDEProjectName,Modulename)=0 then begin
|
||||
@ -1816,7 +1816,7 @@ begin
|
||||
// check the packagename in the fpdoc file
|
||||
PkgName:=FPDocFile.GetPackageName;
|
||||
if PkgName<>'' then begin
|
||||
Pkg:=PackageGraph.FindAPackageWithName(PkgName,nil);
|
||||
Pkg:=PackageGraph.FindPackageWithName(PkgName,nil);
|
||||
if InPackage(Pkg) then exit;
|
||||
end;
|
||||
|
||||
@ -2061,7 +2061,7 @@ begin
|
||||
PkgName:=copy(Path,2,p-2);
|
||||
//DebugLn(['TCodeHelpManager.GetLinkedFPDocNode PkgName=',PkgName]);
|
||||
if PkgName='' then exit;
|
||||
Pkg:=PackageGraph.FindAPackageWithName(PkgName,nil);
|
||||
Pkg:=PackageGraph.FindPackageWithName(PkgName,nil);
|
||||
if Pkg=nil then exit;
|
||||
InvalidPath:=p;
|
||||
ModuleOwner:=Pkg;
|
||||
|
@ -407,7 +407,7 @@ begin
|
||||
sl:=TStringList.Create;
|
||||
for i:=0 to FNewInstalledPackages.Count-1 do begin
|
||||
NewPackageID:=TLazPackageID(FNewInstalledPackages[i]);
|
||||
APackage:=PackageGraph.FindAPackageWithName(NewPackageID.Name,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(NewPackageID.Name,nil);
|
||||
if APackage<>nil then
|
||||
NewPackageID:=APackage;
|
||||
s:=NewPackageID.IDAsString;
|
||||
|
@ -158,6 +158,7 @@ type
|
||||
procedure RemoveOldUserLinks;
|
||||
procedure BeginUpdate;
|
||||
procedure EndUpdate;
|
||||
function IsUpdating: boolean;
|
||||
procedure SaveUserLinks;
|
||||
function NeedSaveUserLinks(const ConfigFilename: string): boolean;
|
||||
procedure WriteLinkTree(LinkTree: TAVLTree);
|
||||
@ -425,7 +426,6 @@ begin
|
||||
|
||||
FGlobalLinks.FreeAndClear;
|
||||
GlobalLinksDir:=GetGlobalLinkDirectory;
|
||||
//debugln('UpdateGlobalLinks A ',GlobalLinksDir);
|
||||
if FindFirstUTF8(GlobalLinksDir+'*.lpl', faAnyFile, FileInfo)=0 then begin
|
||||
PkgVersion:=TPkgVersion.Create;
|
||||
repeat
|
||||
@ -453,13 +453,15 @@ begin
|
||||
end;
|
||||
sl.Free;
|
||||
if NewFilename='' then continue;
|
||||
|
||||
//debugln(['TPackageLinks.UpdateGlobalLinks NewFilename="',NewFilename,'"']);
|
||||
|
||||
NewPkgLink:=TPackageLink.Create;
|
||||
NewPkgLink.Reference;
|
||||
NewPkgLink.Origin:=ploGlobal;
|
||||
NewPkgLink.Name:=NewPkgName;
|
||||
NewPkgLink.Version.Assign(PkgVersion);
|
||||
IDEMacros.SubstituteMacros(NewFilename);
|
||||
//debugln(['TPackageLinks.UpdateGlobalLinks EnvironmentOptions.LazarusDirectory=',EnvironmentOptions.LazarusDirectory]);
|
||||
NewFilename:=TrimFilename(NewFilename);
|
||||
if (EnvironmentOptions.LazarusDirectory<>'')
|
||||
and (FileIsInDirectory(NewFilename,EnvironmentOptions.LazarusDirectory)) then
|
||||
@ -622,6 +624,11 @@ begin
|
||||
if (plsUserLinksNeedUpdate in FStates) then UpdateUserLinks;
|
||||
end;
|
||||
|
||||
function TPackageLinks.IsUpdating: boolean;
|
||||
begin
|
||||
Result:=fUpdateLock>0;
|
||||
end;
|
||||
|
||||
procedure TPackageLinks.SaveUserLinks;
|
||||
var
|
||||
ConfigFilename: String;
|
||||
@ -850,34 +857,37 @@ var
|
||||
NewLink: TPackageLink;
|
||||
begin
|
||||
BeginUpdate;
|
||||
// check if link already exists
|
||||
OldLink:=FindLinkWithPackageID(APackage);
|
||||
if (OldLink<>nil) then begin
|
||||
// link exists -> check if it is already the right value
|
||||
if (OldLink.Compare(APackage)=0)
|
||||
and (OldLink.GetEffectiveFilename=APackage.Filename) then begin
|
||||
Result:=OldLink;
|
||||
Result.LastUsed:=Now;
|
||||
exit;
|
||||
try
|
||||
// check if link already exists
|
||||
OldLink:=FindLinkWithPackageID(APackage);
|
||||
if (OldLink<>nil) then begin
|
||||
// link exists -> check if it is already the right value
|
||||
if (OldLink.Compare(APackage)=0)
|
||||
and (OldLink.GetEffectiveFilename=APackage.Filename) then begin
|
||||
Result:=OldLink;
|
||||
Result.LastUsed:=Now;
|
||||
exit;
|
||||
end;
|
||||
RemoveLink(APackage);
|
||||
end;
|
||||
RemoveLink(APackage);
|
||||
// add user link
|
||||
NewLink:=TPackageLink.Create;
|
||||
NewLink.Reference;
|
||||
NewLink.AssignID(APackage);
|
||||
NewLink.Filename:=APackage.Filename;
|
||||
if NewLink.MakeSense then begin
|
||||
FUserLinksSortID.Add(NewLink);
|
||||
FUserLinksSortFile.Add(NewLink);
|
||||
Modified:=true;
|
||||
end else begin
|
||||
NewLink.Release;
|
||||
NewLink:=nil;
|
||||
end;
|
||||
Result:=NewLink;
|
||||
Result.LastUsed:=Now;
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
// add user link
|
||||
NewLink:=TPackageLink.Create;
|
||||
NewLink.Reference;
|
||||
NewLink.AssignID(APackage);
|
||||
NewLink.Filename:=APackage.Filename;
|
||||
if NewLink.MakeSense then begin
|
||||
FUserLinksSortID.Add(NewLink);
|
||||
FUserLinksSortFile.Add(NewLink);
|
||||
Modified:=true;
|
||||
end else begin
|
||||
NewLink.Release;
|
||||
NewLink:=nil;
|
||||
end;
|
||||
EndUpdate;
|
||||
Result:=NewLink;
|
||||
Result.LastUsed:=Now;
|
||||
end;
|
||||
|
||||
function TPackageLinks.AddUserLink(const PkgFilename, PkgName: string
|
||||
@ -888,9 +898,9 @@ var
|
||||
LPK: TXMLConfig;
|
||||
PkgVersion: TPkgVersion;
|
||||
begin
|
||||
BeginUpdate;
|
||||
PkgVersion:=TPkgVersion.Create;
|
||||
LPK:=nil;
|
||||
BeginUpdate;
|
||||
try
|
||||
// load version
|
||||
LPK:=LoadXMLConfigViaCodeBuffer(PkgFilename);
|
||||
@ -924,11 +934,11 @@ begin
|
||||
NewLink.Release;
|
||||
NewLink:=nil;
|
||||
end;
|
||||
EndUpdate;
|
||||
Result:=NewLink;
|
||||
if Result<>nil then
|
||||
Result.LastUsed:=Now;
|
||||
finally
|
||||
EndUpdate;
|
||||
PkgVersion.Free;
|
||||
LPK.Free;
|
||||
end;
|
||||
@ -940,27 +950,29 @@ var
|
||||
OldLink: TPackageLink;
|
||||
begin
|
||||
BeginUpdate;
|
||||
// remove from user links
|
||||
ANode:=FUserLinksSortID.FindKey(APackageID,@ComparePackageIDAndLink);
|
||||
if ANode<>nil then begin
|
||||
OldLink:=TPackageLink(ANode.Data);
|
||||
FUserLinksSortID.Delete(ANode);
|
||||
FUserLinksSortFile.RemovePointer(OldLink);
|
||||
OldLink.Release;
|
||||
Modified:=true;
|
||||
try
|
||||
// remove from user links
|
||||
ANode:=FUserLinksSortID.FindKey(APackageID,@ComparePackageIDAndLink);
|
||||
if ANode<>nil then begin
|
||||
OldLink:=TPackageLink(ANode.Data);
|
||||
FUserLinksSortID.Delete(ANode);
|
||||
FUserLinksSortFile.RemovePointer(OldLink);
|
||||
OldLink.Release;
|
||||
Modified:=true;
|
||||
end;
|
||||
// remove from global links
|
||||
ANode:=FGlobalLinks.FindKey(APackageID,@ComparePackageIDAndLink);
|
||||
if ANode<>nil then begin
|
||||
OldLink:=TPackageLink(ANode.Data);
|
||||
FGlobalLinks.Delete(ANode);
|
||||
OldLink.Release;
|
||||
Modified:=true;
|
||||
end;
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
// remove from global links
|
||||
ANode:=FGlobalLinks.FindKey(APackageID,@ComparePackageIDAndLink);
|
||||
if ANode<>nil then begin
|
||||
OldLink:=TPackageLink(ANode.Data);
|
||||
FGlobalLinks.Delete(ANode);
|
||||
OldLink.Release;
|
||||
Modified:=true;
|
||||
end;
|
||||
EndUpdate;
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
PkgLinks:=nil;
|
||||
|
||||
|
@ -195,8 +195,6 @@ type
|
||||
function CreateUniqueUnitName(const Prefix: string): string;
|
||||
function DependencyExists(Dependency: TPkgDependency;
|
||||
Flags: TFindPackageFlags): boolean;
|
||||
function FindAPackageWithName(const PkgName: string;
|
||||
IgnorePackage: TLazPackage): TLazPackage;
|
||||
function FindBrokenDependencyPath(APackage: TLazPackage;
|
||||
FirstDependency: TPkgDependency): TFPList;
|
||||
function FindAllBrokenDependencies(APackage: TLazPackage;
|
||||
@ -230,6 +228,8 @@ type
|
||||
Flags: TFindPackageFlags): TAVLTreeNode;
|
||||
function FindOpenPackage(Dependency: TPkgDependency;
|
||||
Flags: TFindPackageFlags): TLazPackage;
|
||||
function FindPackageWithName(const PkgName: string;
|
||||
IgnorePackage: TLazPackage): TLazPackage;
|
||||
function FindPackageWithFilename(const TheFilename: string): TLazPackage;
|
||||
function FindPackageWithID(PkgID: TLazPackageID): TLazPackage;
|
||||
function FindPackageWithIDMask(PkgIDMask: TLazPackageID): TLazPackage;
|
||||
@ -600,7 +600,7 @@ begin
|
||||
Result:=mrOk;
|
||||
Dependency.RequiredPackage:=NewPackage;
|
||||
Dependency.LoadPackageResult:=lprSuccess;
|
||||
OldPackage:=FindAPackageWithName(NewPackage.Name,NewPackage);
|
||||
OldPackage:=FindPackageWithName(NewPackage.Name,NewPackage);
|
||||
if OldPackage=nil then
|
||||
AddPackage(NewPackage)
|
||||
else
|
||||
@ -963,7 +963,7 @@ begin
|
||||
Result:=nil;
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.FindAPackageWithName(const PkgName: string;
|
||||
function TLazPackageGraph.FindPackageWithName(const PkgName: string;
|
||||
IgnorePackage: TLazPackage): TLazPackage;
|
||||
var
|
||||
ANode: TAVLTreeNode;
|
||||
@ -1251,7 +1251,7 @@ function TLazPackageGraph.DependencyExists(Dependency: TPkgDependency;
|
||||
begin
|
||||
Result:=true;
|
||||
if FindNodeOfDependency(Dependency,Flags)<>nil then exit;
|
||||
if FindAPackageWithName(Dependency.PackageName,nil)=nil then begin
|
||||
if FindPackageWithName(Dependency.PackageName,nil)=nil then begin
|
||||
// no package with same name open
|
||||
// -> try package links
|
||||
if fpfSearchInPkgLinks in Flags then
|
||||
@ -4941,7 +4941,7 @@ begin
|
||||
// no compatible package yet open
|
||||
Dependency.RequiredPackage:=nil;
|
||||
Dependency.LoadPackageResult:=lprNotFound;
|
||||
APackage:=FindAPackageWithName(Dependency.PackageName,nil);
|
||||
APackage:=FindPackageWithName(Dependency.PackageName,nil);
|
||||
if APackage=nil then begin
|
||||
// no package with same name open
|
||||
// -> try package links
|
||||
|
@ -48,7 +48,7 @@ uses
|
||||
contnrs, InterfaceBase, StringHashList, Translations, LResources,
|
||||
// codetools
|
||||
CodeToolsCfgScript, CodeToolsConfig, CodeToolManager, CodeCache,
|
||||
BasicCodeTools, FileProcs, Laz_XMLCfg,
|
||||
CodeToolsStructs, BasicCodeTools, FileProcs, Laz_XMLCfg,
|
||||
// IDE Interface
|
||||
SrcEditorIntf, NewItemIntf, ProjectIntf, PackageIntf, CompOptsIntf,
|
||||
MenuIntf, IDEWindowIntf, PropEdits, MacroIntf, LazIDEIntf,
|
||||
@ -545,7 +545,7 @@ begin
|
||||
finally
|
||||
NewDependency.Free;
|
||||
end;
|
||||
APackage:=PackageGraph.FindAPackageWithName(APackageName,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(APackageName,nil);
|
||||
if APackage=nil then exit;
|
||||
AForm:=PackageEditors.OpenEditor(APackage);
|
||||
end;
|
||||
@ -1077,7 +1077,7 @@ begin
|
||||
end;
|
||||
|
||||
// check package name conflict
|
||||
ConflictPkg:=PackageGraph.FindAPackageWithName(NewPkgName,APackage);
|
||||
ConflictPkg:=PackageGraph.FindPackageWithName(NewPkgName,APackage);
|
||||
if ConflictPkg<>nil then begin
|
||||
Result:=IDEMessageDialog(lisPkgMangPackageNameAlreadyExists,
|
||||
Format(lisPkgMangThereIsAlreadyAnotherPackageWithTheName, ['"',
|
||||
@ -1836,7 +1836,7 @@ begin
|
||||
end;
|
||||
|
||||
// check if Package with same name is already loaded
|
||||
ConflictPkg:=PackageGraph.FindAPackageWithName(APackage.Name,nil);
|
||||
ConflictPkg:=PackageGraph.FindPackageWithName(APackage.Name,nil);
|
||||
if ConflictPkg<>nil then begin
|
||||
if not PackageGraph.PackageCanBeReplaced(ConflictPkg,APackage) then begin
|
||||
Result:=IDEMessageDialog(lisPkgMangPackageConflicts,
|
||||
@ -1986,7 +1986,7 @@ begin
|
||||
for i:=0 to RequiredPackages.Count-1 do begin
|
||||
PkgName:=Trim(RequiredPackages[i]);
|
||||
if (PkgName='') or (not IsValidIdent(PkgName)) then continue;
|
||||
APackage:=PackageGraph.FindAPackageWithName(PkgName,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(PkgName,nil);
|
||||
if APackage=nil then begin
|
||||
DebugLn(['TPkgManager.AddProjectDependencies package not found: ',PkgName]);
|
||||
continue;
|
||||
@ -2126,7 +2126,7 @@ begin
|
||||
finally
|
||||
NewDependency.Free;
|
||||
end;
|
||||
APackage:=PackageGraph.FindAPackageWithName(APackageName,nil);
|
||||
APackage:=PackageGraph.FindPackageWithName(APackageName,nil);
|
||||
if APackage=nil then exit;
|
||||
Result:=DoOpenPackage(APackage,Flags,ShowAbort);
|
||||
end;
|
||||
@ -2441,44 +2441,88 @@ const
|
||||
var
|
||||
NewLazarusSrcDir: String;
|
||||
OldLazarusSrcDir: String;
|
||||
APackage: TLazPackage;
|
||||
VisitedPkgs: TStringToStringTree;
|
||||
ReloadPkgs: TStringList;
|
||||
|
||||
function PkgInOldLazarusDir(APackage: TLazPackage): boolean;
|
||||
begin
|
||||
Result:=FileIsInPath(APackage.Filename,OldLazarusSrcDir)
|
||||
or PackageGraph.IsStaticBasePackage(APackage.Name)
|
||||
or (SysUtils.CompareText(copy(APackage.Filename,1,length(LazDirMacro)),LazDirMacro)=0)
|
||||
end;
|
||||
|
||||
procedure GatherLazarusSrcPackages(APackage: TLazPackage);
|
||||
var
|
||||
ADependency: TPkgDependency;
|
||||
begin
|
||||
if APackage=nil then exit;
|
||||
if VisitedPkgs.Contains(APackage.Name) then exit;
|
||||
VisitedPkgs[APackage.Name]:='1';
|
||||
// search the dependencies first
|
||||
ADependency:=APackage.FirstRequiredDependency;
|
||||
while ADependency<>nil do begin
|
||||
GatherLazarusSrcPackages(ADependency.RequiredPackage);
|
||||
ADependency:=ADependency.NextRequiresDependency;
|
||||
end;
|
||||
if PkgInOldLazarusDir(APackage) then begin
|
||||
// this package was from the old lazarus source directory
|
||||
ReloadPkgs.Add(APackage.Name);
|
||||
end;
|
||||
end;
|
||||
|
||||
function ReloadPkg(APackage: TLazPackage): boolean;
|
||||
var
|
||||
Link: TPackageLink;
|
||||
MsgResult: TModalResult;
|
||||
Filename: String;
|
||||
ADependency: TPkgDependency;
|
||||
begin
|
||||
Result:=true;
|
||||
if APackage=nil then exit;
|
||||
if not PkgInOldLazarusDir(APackage) then exit;
|
||||
// this package was from the old lazarus source directory
|
||||
// check if there is a package in the new version
|
||||
Link:=PkgLinks.FindLinkWithPkgName(APackage.Name);
|
||||
if Link<>nil then begin
|
||||
Filename:=TrimFilename(Link.Filename);
|
||||
if not FilenameIsAbsolute(Filename) then
|
||||
Filename:=AppendPathDelim(NewLazarusSrcDir)+Filename;
|
||||
if FileIsInPath(Filename,NewLazarusSrcDir)
|
||||
and FileExistsUTF8(Filename) then
|
||||
begin
|
||||
DebugLn(['TPkgManager.LazarusSrcDirChanged load: ',Filename]);
|
||||
// open package in new lazarus source directory
|
||||
MsgResult:=DoOpenPackageFile(Filename,[pofDoNotOpenEditor,pofRevert],true);
|
||||
if MsgResult=mrAbort then exit(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
Link: TPackageLink;
|
||||
MsgResult: TModalResult;
|
||||
Filename: String;
|
||||
begin
|
||||
if PackageGraph=nil then exit;
|
||||
OldLazarusSrcDir:=FLastLazarusSrcDir;
|
||||
NewLazarusSrcDir:=EnvironmentOptions.LazarusDirectory;
|
||||
FLastLazarusSrcDir:=NewLazarusSrcDir;
|
||||
if CompareFilenames(OldLazarusSrcDir,NewLazarusSrcDir)=0 then exit;
|
||||
debugln(['TPkgManager.LazarusSrcDirChanged loading new lpl files from ',PkgLinks.GetGlobalLinkDirectory]);
|
||||
if PkgLinks.IsUpdating then
|
||||
debugln(['TPkgManager.LazarusSrcDirChanged inconsistency: pkglinks are locked']);
|
||||
PkgLinks.UpdateGlobalLinks;
|
||||
|
||||
i:=0;
|
||||
while i<PackageGraph.Count do begin
|
||||
APackage:=PackageGraph.Packages[i];
|
||||
if (SysUtils.CompareText(copy(APackage.Filename,1,length(LazDirMacro)),LazDirMacro)=0)
|
||||
or FileIsInPath(APackage.Filename,OldLazarusSrcDir)
|
||||
or (PackageGraph.IsStaticBasePackage(APackage.Name) and (not APackage.AutoCreated))
|
||||
then begin
|
||||
// this package was from the old lazarus source directory
|
||||
// check if there is a package in the new version
|
||||
Link:=PkgLinks.FindLinkWithPkgName(APackage.Name);
|
||||
if Link<>nil then begin
|
||||
Filename:=TrimFilename(Link.Filename);
|
||||
if not FilenameIsAbsolute(Filename) then
|
||||
Filename:=AppendPathDelim(NewLazarusSrcDir)+Filename;
|
||||
if FileIsInPath(Filename,NewLazarusSrcDir)
|
||||
and FileExistsUTF8(Filename) then
|
||||
begin
|
||||
DebugLn(['TPkgManager.LazarusSrcDirChanged load: ',Filename]);
|
||||
// open package in new lazarus source directory
|
||||
MsgResult:=DoOpenPackageFile(Filename,[pofDoNotOpenEditor,pofRevert],true);
|
||||
if MsgResult=mrAbort then break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
inc(i);
|
||||
VisitedPkgs:=TStringToStringTree.Create(false);
|
||||
ReloadPkgs:=TStringList.Create;
|
||||
try
|
||||
// collect candidates
|
||||
for i:=0 to PackageGraph.Count-1 do
|
||||
GatherLazarusSrcPackages(PackageGraph.Packages[i]);
|
||||
// reload
|
||||
for i:=0 to ReloadPkgs.Count-1 do
|
||||
ReloadPkg(PackageGraph.FindPackageWithName(ReloadPkgs[i],nil));
|
||||
finally
|
||||
ReloadPkgs.Free;
|
||||
VisitedPkgs.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user