mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-23 14:29:07 +02:00
IDE: changed lpk on disk: started switching to alternative lpk
git-svn-id: trunk@40221 -
This commit is contained in:
parent
5d4b0a28da
commit
3022dc2cb1
@ -66,23 +66,21 @@ type
|
|||||||
Shift: TShiftState; X, Y: Integer);
|
Shift: TShiftState; X, Y: Integer);
|
||||||
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||||
private
|
private
|
||||||
FPackageList: TFPList;
|
FPackageList: TStringList;
|
||||||
FUnitList: TFPList;
|
FUnitList: TFPList;
|
||||||
FCachedDiffs: TFPList; // List of PDiffItem
|
FCachedDiffs: TFPList; // List of PDiffItem
|
||||||
procedure FillFilesListBox;
|
procedure FillFilesListBox;
|
||||||
procedure SetPackageList(const AValue: TFPList);
|
|
||||||
procedure SetUnitList(const AValue: TFPList);
|
|
||||||
procedure ShowDiff;
|
procedure ShowDiff;
|
||||||
function GetCachedDiff(FileOwner: TObject): PDiffItem;
|
function GetCachedDiff(FileOwner: TObject; AltFilename: string): PDiffItem;
|
||||||
procedure ClearCache;
|
procedure ClearCache;
|
||||||
public
|
public
|
||||||
property UnitList: TFPList read FUnitList write SetUnitList; // list of TUnitInfo
|
property UnitList: TFPList read FUnitList write FUnitList; // list of TUnitInfo
|
||||||
property PackageList: TFPList read FPackageList write SetPackageList; // list of TLazPackage
|
property PackageList: TStringList read FPackageList write FPackageList; // list of alternative filename and TLazPackage
|
||||||
constructor Create(TheOwner: TComponent); override;
|
constructor Create(TheOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function ShowDiskDiffsDialog(AnUnitList, APackageList: TFPList): TModalResult;
|
function ShowDiskDiffsDialog(AnUnitList: TFPList; APackageList: TStringList): TModalResult;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -92,7 +90,7 @@ implementation
|
|||||||
var
|
var
|
||||||
DiskDiffsDlg: TDiskDiffsDlg = nil;
|
DiskDiffsDlg: TDiskDiffsDlg = nil;
|
||||||
|
|
||||||
function ShowDiskDiffsDialog(AnUnitList, APackageList: TFPList): TModalResult;
|
function ShowDiskDiffsDialog(AnUnitList: TFPList; APackageList: TStringList): TModalResult;
|
||||||
|
|
||||||
function ListsAreEmpty: boolean;
|
function ListsAreEmpty: boolean;
|
||||||
begin
|
begin
|
||||||
@ -142,13 +140,17 @@ function ShowDiskDiffsDialog(AnUnitList, APackageList: TFPList): TModalResult;
|
|||||||
PackageDidNotChange: Boolean;
|
PackageDidNotChange: Boolean;
|
||||||
fs: TFileStreamUTF8;
|
fs: TFileStreamUTF8;
|
||||||
CurSource, DiskSource: string;
|
CurSource, DiskSource: string;
|
||||||
|
AltFilename: String;
|
||||||
begin
|
begin
|
||||||
if APackageList=nil then exit;
|
if APackageList=nil then exit;
|
||||||
for i:=APackageList.Count-1 downto 0 do begin
|
for i:=APackageList.Count-1 downto 0 do begin
|
||||||
CurPackage:=TLazPackage(APackageList[i]);
|
AltFilename:=APackageList[i];
|
||||||
|
CurPackage:=TLazPackage(APackageList.Objects[i]);
|
||||||
PackageDidNotChange:=false;
|
PackageDidNotChange:=false;
|
||||||
if CurPackage.LPKSource=nil then
|
if CurPackage.LPKSource=nil then
|
||||||
continue;// this package was not loaded/saved
|
continue;// this package was not loaded/saved
|
||||||
|
if CompareFilenames(CurPackage.Filename,AltFilename)<>0 then
|
||||||
|
continue; // lpk has vanished, an alternative lpk was found => show
|
||||||
try
|
try
|
||||||
CurPackage.SaveToString(CurSource);
|
CurPackage.SaveToString(CurSource);
|
||||||
fs:=TFileStreamUTF8.Create(CurPackage.Filename,fmOpenRead);
|
fs:=TFileStreamUTF8.Create(CurPackage.Filename,fmOpenRead);
|
||||||
@ -219,30 +221,24 @@ end;
|
|||||||
|
|
||||||
procedure TDiskDiffsDlg.FillFilesListBox;
|
procedure TDiskDiffsDlg.FillFilesListBox;
|
||||||
var i: integer;
|
var i: integer;
|
||||||
|
AnUnitInfo: TUnitInfo;
|
||||||
|
APackage: TLazPackage;
|
||||||
begin
|
begin
|
||||||
FilesListBox.Items.BeginUpdate;
|
FilesListBox.Items.BeginUpdate;
|
||||||
FilesListBox.Items.Clear;
|
FilesListBox.Items.Clear;
|
||||||
if UnitList<>nil then
|
if UnitList<>nil then
|
||||||
for i:=0 to UnitList.Count-1 do
|
for i:=0 to UnitList.Count-1 do begin
|
||||||
FilesListBox.Items.AddObject(TUnitInfo(UnitList[i]).ShortFilename,
|
AnUnitInfo:=TUnitInfo(UnitList[i]);
|
||||||
TUnitInfo(UnitList[i]));
|
FilesListBox.Items.AddObject(AnUnitInfo.ShortFilename,AnUnitInfo);
|
||||||
|
end;
|
||||||
if PackageList<>nil then
|
if PackageList<>nil then
|
||||||
for i:=0 to PackageList.Count-1 do
|
for i:=0 to PackageList.Count-1 do begin
|
||||||
FilesListBox.Items.AddObject(TLazPackage(PackageList[i]).Filename,
|
APackage:=TLazPackage(PackageList.Objects[i]);
|
||||||
TLazPackage(PackageList[i]));
|
FilesListBox.Items.AddObject(APackage.Filename,APackage);
|
||||||
|
end;
|
||||||
FilesListBox.Items.EndUpdate;
|
FilesListBox.Items.EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDiskDiffsDlg.SetPackageList(const AValue: TFPList);
|
|
||||||
begin
|
|
||||||
FPackageList:=AValue;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TDiskDiffsDlg.SetUnitList(const AValue: TFPList);
|
|
||||||
begin
|
|
||||||
FUnitList:=AValue;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TDiskDiffsDlg.ShowDiff;
|
procedure TDiskDiffsDlg.ShowDiff;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
@ -252,15 +248,13 @@ begin
|
|||||||
DiffItem:=nil;
|
DiffItem:=nil;
|
||||||
if (i>=0) and (UnitList<>nil) then begin
|
if (i>=0) and (UnitList<>nil) then begin
|
||||||
if i<UnitList.Count then
|
if i<UnitList.Count then
|
||||||
DiffItem:=GetCachedDiff(TUnitInfo(UnitList[i]))
|
DiffItem:=GetCachedDiff(TUnitInfo(UnitList[i]),'');
|
||||||
else
|
dec(i,UnitList.Count);
|
||||||
dec(i,UnitList.Count);
|
|
||||||
end;
|
end;
|
||||||
if (i>=0) and (PackageList<>nil) then begin
|
if (i>=0) and (PackageList<>nil) then begin
|
||||||
if i<PackageList.Count then
|
if i<PackageList.Count then
|
||||||
DiffItem:=GetCachedDiff(TLazPackage(PackageList[i]))
|
DiffItem:=GetCachedDiff(TLazPackage(PackageList.Objects[i]),PackageList[i]);
|
||||||
else
|
dec(i,PackageList.Count);
|
||||||
dec(i,PackageList.Count);
|
|
||||||
end;
|
end;
|
||||||
if DiffItem<>nil then begin
|
if DiffItem<>nil then begin
|
||||||
DiffSynEdit.Lines.Text:=DiffItem^.Diff;
|
DiffSynEdit.Lines.Text:=DiffItem^.Diff;
|
||||||
@ -269,7 +263,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TDiskDiffsDlg.GetCachedDiff(FileOwner: TObject): PDiffItem;
|
function TDiskDiffsDlg.GetCachedDiff(FileOwner: TObject; AltFilename: string
|
||||||
|
): PDiffItem;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
fs: TFileStreamUTF8;
|
fs: TFileStreamUTF8;
|
||||||
@ -296,7 +291,9 @@ begin
|
|||||||
end else if FileOwner is TLazPackage then begin
|
end else if FileOwner is TLazPackage then begin
|
||||||
// compare disk and package
|
// compare disk and package
|
||||||
APackage:=TLazPackage(FileOwner);
|
APackage:=TLazPackage(FileOwner);
|
||||||
if APackage.LPKSource<>nil then
|
if AltFilename<>'' then
|
||||||
|
Filename:=AltFilename
|
||||||
|
else if APackage.LPKSource<>nil then
|
||||||
Filename:=APackage.LPKSource.Filename
|
Filename:=APackage.LPKSource.Filename
|
||||||
else
|
else
|
||||||
Filename:=APackage.GetFullFilename(true);
|
Filename:=APackage.GetFullFilename(true);
|
||||||
|
@ -8470,7 +8470,7 @@ end;
|
|||||||
function TMainIDE.DoCheckFilesOnDisk(Instantaneous: boolean): TModalResult;
|
function TMainIDE.DoCheckFilesOnDisk(Instantaneous: boolean): TModalResult;
|
||||||
var
|
var
|
||||||
AnUnitList: TFPList; // list of TUnitInfo
|
AnUnitList: TFPList; // list of TUnitInfo
|
||||||
APackageList: TFPList; // list of TLazPackage
|
APackageList: TStringList; // list of alternative lpkfilename and TLazPackage
|
||||||
i: integer;
|
i: integer;
|
||||||
CurUnit: TUnitInfo;
|
CurUnit: TUnitInfo;
|
||||||
begin
|
begin
|
||||||
|
@ -81,8 +81,9 @@ type
|
|||||||
InObject: TObject): TPkgFile; virtual; abstract;
|
InObject: TObject): TPkgFile; virtual; abstract;
|
||||||
function AddDependencyToUnitOwners(const OwnedFilename,
|
function AddDependencyToUnitOwners(const OwnedFilename,
|
||||||
RequiredUnitname: string): TModalResult; virtual; abstract;
|
RequiredUnitname: string): TModalResult; virtual; abstract;
|
||||||
procedure GetPackagesChangedOnDisk(var ListOfPackages: TFPList); virtual; abstract;
|
procedure GetPackagesChangedOnDisk(out ListOfPackages: TStringList); virtual; abstract;
|
||||||
function RevertPackages(APackageList: TFPList): TModalResult; virtual; abstract;
|
function RevertPackages(APackageList: TStringList // list of TLazPackage and alternative lpk file name
|
||||||
|
): TModalResult; virtual; abstract;
|
||||||
|
|
||||||
// project
|
// project
|
||||||
function OpenProjectDependencies(AProject: TProject;
|
function OpenProjectDependencies(AProject: TProject;
|
||||||
|
@ -67,7 +67,7 @@ type
|
|||||||
|
|
||||||
TLPKInfo = class
|
TLPKInfo = class
|
||||||
public
|
public
|
||||||
ID: TLazPackageID;
|
ID: TLazPackageID; // name and version
|
||||||
LPKFilename: string;
|
LPKFilename: string;
|
||||||
InLazSrc: boolean; // lpk is in lazarus source directory
|
InLazSrc: boolean; // lpk is in lazarus source directory
|
||||||
Installed: TPackageInstallType;
|
Installed: TPackageInstallType;
|
||||||
|
@ -250,7 +250,7 @@ type
|
|||||||
Policy: TPackageUpdatePolicy): TFPList;
|
Policy: TPackageUpdatePolicy): TFPList;
|
||||||
function GetBrokenDependenciesWhenChangingPkgID(APackage: TLazPackage;
|
function GetBrokenDependenciesWhenChangingPkgID(APackage: TLazPackage;
|
||||||
const NewName: string; NewVersion: TPkgVersion): TFPList;
|
const NewName: string; NewVersion: TPkgVersion): TFPList;
|
||||||
procedure GetPackagesChangedOnDisk(var ListOfPackages: TFPList);
|
procedure GetPackagesChangedOnDisk(out ListOfPackages: TStringList); // returns list of new filename and TLazPackage
|
||||||
procedure CalculateTopologicalLevels;
|
procedure CalculateTopologicalLevels;
|
||||||
procedure SortDependencyListTopologically(
|
procedure SortDependencyListTopologically(
|
||||||
var FirstDependency: TPkgDependency; TopLevelFirst: boolean);
|
var FirstDependency: TPkgDependency; TopLevelFirst: boolean);
|
||||||
@ -343,6 +343,7 @@ type
|
|||||||
procedure ChangeDependency(Dependency, NewDependency: TPkgDependency);
|
procedure ChangeDependency(Dependency, NewDependency: TPkgDependency);
|
||||||
function OpenDependency(Dependency: TPkgDependency;
|
function OpenDependency(Dependency: TPkgDependency;
|
||||||
ShowAbort: boolean): TLoadPackageResult;
|
ShowAbort: boolean): TLoadPackageResult;
|
||||||
|
function FindAlternativeLPK(APackage: TLazPackage): string;
|
||||||
procedure OpenInstalledDependency(Dependency: TPkgDependency;
|
procedure OpenInstalledDependency(Dependency: TPkgDependency;
|
||||||
InstallType: TPackageInstallType; var Quiet: boolean);
|
InstallType: TPackageInstallType; var Quiet: boolean);
|
||||||
procedure OpenRequiredDependencyList(FirstDependency: TPkgDependency);
|
procedure OpenRequiredDependencyList(FirstDependency: TPkgDependency);
|
||||||
@ -4492,26 +4493,34 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLazPackageGraph.GetPackagesChangedOnDisk(
|
procedure TLazPackageGraph.GetPackagesChangedOnDisk(out
|
||||||
var ListOfPackages: TFPList);
|
ListOfPackages: TStringList);
|
||||||
// if package source is changed in IDE (codetools)
|
// if package source is changed in IDE (codetools)
|
||||||
// then changes on disk are ignored
|
// then changes on disk are ignored
|
||||||
var
|
var
|
||||||
APackage: TLazPackage;
|
APackage: TLazPackage;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
NewFilename: String;
|
||||||
begin
|
begin
|
||||||
|
ListOfPackages:=nil;
|
||||||
MarkNeededPackages;
|
MarkNeededPackages;
|
||||||
for i:=FItems.Count-1 downto 0 do begin
|
for i:=FItems.Count-1 downto 0 do begin
|
||||||
APackage:=TLazPackage(FItems[i]);
|
APackage:=TLazPackage(FItems[i]);
|
||||||
if (not (lpfNeeded in APackage.Flags))
|
if (not (lpfNeeded in APackage.Flags))
|
||||||
or APackage.ReadOnly or APackage.Modified
|
or APackage.Modified
|
||||||
or (APackage.LPKSource=nil) then
|
or APackage.IsVirtual then
|
||||||
continue;
|
|
||||||
if (not APackage.LPKSource.FileNeedsUpdate) then
|
|
||||||
continue;
|
continue;
|
||||||
|
NewFilename:=APackage.Filename;
|
||||||
|
if FileExistsCached(APackage.Filename) then begin
|
||||||
|
if (not APackage.LPKSource.FileNeedsUpdate) then
|
||||||
|
continue;
|
||||||
|
end else begin
|
||||||
|
// lpk has vanished -> search alternative
|
||||||
|
|
||||||
|
end;
|
||||||
if ListOfPackages=nil then
|
if ListOfPackages=nil then
|
||||||
ListOfPackages:=TFPList.Create;
|
ListOfPackages:=TStringList.Create;
|
||||||
ListOfPackages.Add(APackage);
|
ListOfPackages.AddObject(NewFilename,APackage);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -4965,6 +4974,23 @@ begin
|
|||||||
Result:=Dependency.LoadPackageResult;
|
Result:=Dependency.LoadPackageResult;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TLazPackageGraph.FindAlternativeLPK(APackage: TLazPackage): string;
|
||||||
|
var
|
||||||
|
Dependency: TPkgDependency;
|
||||||
|
begin
|
||||||
|
Result:='';
|
||||||
|
// first check for preferred dependencies
|
||||||
|
Dependency:=APackage.FirstUsedByDependency;
|
||||||
|
while Dependency<>nil do begin
|
||||||
|
if (Dependency.DefaultFilename<>'') and Dependency.PreferDefaultFilename
|
||||||
|
then begin
|
||||||
|
//PreferredFilename:=Dependency.FindDefaultFilename;
|
||||||
|
|
||||||
|
end;
|
||||||
|
Dependency:=Dependency.NextUsedByDependency;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TLazPackageGraph.OpenInstalledDependency(Dependency: TPkgDependency;
|
procedure TLazPackageGraph.OpenInstalledDependency(Dependency: TPkgDependency;
|
||||||
InstallType: TPackageInstallType; var Quiet: boolean);
|
InstallType: TPackageInstallType; var Quiet: boolean);
|
||||||
var
|
var
|
||||||
|
@ -232,8 +232,8 @@ type
|
|||||||
InObject: TObject): TPkgFile; override;
|
InObject: TObject): TPkgFile; override;
|
||||||
function AddDependencyToUnitOwners(const OwnedFilename,
|
function AddDependencyToUnitOwners(const OwnedFilename,
|
||||||
RequiredUnitname: string): TModalResult; override;
|
RequiredUnitname: string): TModalResult; override;
|
||||||
procedure GetPackagesChangedOnDisk(var ListOfPackages: TFPList); override;
|
procedure GetPackagesChangedOnDisk(out ListOfPackages: TStringList); override;
|
||||||
function RevertPackages(APackageList: TFPList): TModalResult; override;
|
function RevertPackages(APackageList: TStringList): TModalResult; override;
|
||||||
|
|
||||||
// package graph
|
// package graph
|
||||||
function AddPackageToGraph(APackage: TLazPackage; Replace: boolean): TModalResult;
|
function AddPackageToGraph(APackage: TLazPackage; Replace: boolean): TModalResult;
|
||||||
@ -623,7 +623,7 @@ begin
|
|||||||
Result:=DoCreatePackageMakefile(APackage,false);
|
Result:=DoCreatePackageMakefile(APackage,false);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPkgManager.OnPackageEditorCreateFpmakefile(Sender: TObject;
|
function TPkgManager.OnPackageEditorCreateFpmakeFile(Sender: TObject;
|
||||||
APackage: TLazPackage): TModalResult;
|
APackage: TLazPackage): TModalResult;
|
||||||
begin
|
begin
|
||||||
Result:=DoCreatePackageFpmakefile(APackage,false);
|
Result:=DoCreatePackageFpmakefile(APackage,false);
|
||||||
@ -3415,20 +3415,24 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPkgManager.GetPackagesChangedOnDisk(var ListOfPackages: TFPList);
|
procedure TPkgManager.GetPackagesChangedOnDisk(out ListOfPackages: TStringList);
|
||||||
begin
|
begin
|
||||||
if PackageGraph=nil then exit;
|
if PackageGraph=nil then exit;
|
||||||
PackageGraph.GetPackagesChangedOnDisk(ListOfPackages);
|
PackageGraph.GetPackagesChangedOnDisk(ListOfPackages);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPkgManager.RevertPackages(APackageList: TFPList): TModalResult;
|
function TPkgManager.RevertPackages(APackageList: TStringList): TModalResult;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
APackage: TLazPackage;
|
APackage: TLazPackage;
|
||||||
|
Filename: String;
|
||||||
begin
|
begin
|
||||||
if APackageList=nil then exit(mrOk);
|
if APackageList=nil then exit(mrOk);
|
||||||
for i:=0 to APackageList.Count-1 do begin
|
for i:=0 to APackageList.Count-1 do begin
|
||||||
APackage:=TLazPackage(APackageList[i]);
|
APackage:=TLazPackage(APackageList.Objects[i]);
|
||||||
|
Filename:=APackageList[i];
|
||||||
|
if Filename='' then
|
||||||
|
Filename:=APackage.Filename;
|
||||||
if FileExistsCached(APackage.Filename) then
|
if FileExistsCached(APackage.Filename) then
|
||||||
Result:=DoOpenPackageFile(APackage.Filename,[pofRevert],true)
|
Result:=DoOpenPackageFile(APackage.Filename,[pofRevert],true)
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user