mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-24 17:59:10 +02:00
Packager refactoring. Move funcs and methods to IdeIntf. Prepare for PackageLink interface.
git-svn-id: trunk@54405 -
This commit is contained in:
parent
f4df80d90f
commit
e542ddbfcd
@ -5,7 +5,11 @@ unit PackageDependencyIntf;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
Classes, SysUtils,
|
||||
// LazUtils
|
||||
LazFileUtils,
|
||||
// IdeIntf
|
||||
IDEUtils;
|
||||
|
||||
type
|
||||
|
||||
@ -63,6 +67,9 @@ type
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Clear; virtual;
|
||||
function IsMakingSense: boolean;
|
||||
function IsCompatible(const Version: TPkgVersion): boolean; overload;
|
||||
function IsCompatible(const PkgName: string; const Version: TPkgVersion): boolean; overload;
|
||||
// API for iterating dependencies.
|
||||
function NextUsedByDependency: TPkgDependencyBase; virtual; abstract;
|
||||
function PrevUsedByDependency: TPkgDependencyBase; virtual; abstract;
|
||||
@ -81,8 +88,34 @@ type
|
||||
property Removed: boolean read FRemoved write FRemoved;
|
||||
end;
|
||||
|
||||
function IsValidUnitName(AUnitName: String): Boolean; inline;
|
||||
function IsValidPkgName(APkgName: String): Boolean; inline;
|
||||
function PackageFileNameIsValid(const AFilename: string): boolean;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
function IsValidUnitName(AUnitName: String): Boolean;
|
||||
begin
|
||||
Result := LazIsValidIdent(AUnitName, True, True);
|
||||
end;
|
||||
|
||||
function IsValidPkgName(APkgName: String): Boolean;
|
||||
begin
|
||||
Result := LazIsValidIdent(APkgName, True, True);
|
||||
end;
|
||||
|
||||
function PackageFileNameIsValid(const AFilename: string): boolean;
|
||||
var
|
||||
PkgName: String;
|
||||
begin
|
||||
Result:=false;
|
||||
if CompareFileExt(AFilename,'.lpk',false)<>0 then exit;
|
||||
PkgName:=ExtractFileNameOnly(AFilename);
|
||||
if (PkgName='') or (not IsValidPkgName(PkgName)) then exit;
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
{ TPkgVersion }
|
||||
|
||||
procedure TPkgVersion.Clear;
|
||||
@ -229,5 +262,28 @@ begin
|
||||
FMinVersion.Clear;
|
||||
end;
|
||||
|
||||
function TPkgDependencyBase.IsMakingSense: boolean;
|
||||
begin
|
||||
Result:=IsValidPkgName(PackageName);
|
||||
if Result
|
||||
and (pdfMinVersion in FFlags) and (pdfMaxVersion in FFlags)
|
||||
and (MinVersion.Compare(MaxVersion)>0) then
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
function TPkgDependencyBase.IsCompatible(const Version: TPkgVersion): boolean;
|
||||
begin
|
||||
if ((pdfMinVersion in FFlags) and (MinVersion.Compare(Version)>0))
|
||||
or ((pdfMaxVersion in FFlags) and (MaxVersion.Compare(Version)<0)) then
|
||||
Result:=false
|
||||
else
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
function TPkgDependencyBase.IsCompatible(const PkgName: string; const Version: TPkgVersion): boolean;
|
||||
begin
|
||||
Result:=(CompareText(PkgName,PackageName)=0) and IsCompatible(Version);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -125,6 +125,8 @@ type
|
||||
property IDAsWord: string read GetIDAsWord;
|
||||
end;
|
||||
|
||||
TIteratePackagesEvent = procedure(APackage: TLazPackageID) of object;
|
||||
|
||||
TPackageInstallType = (
|
||||
pitNope,
|
||||
pitStatic,
|
||||
@ -369,15 +371,19 @@ var
|
||||
PackageGraphInterface: TPackageGraphInterface; // must be set along with PackageSystem.PackageGraph
|
||||
|
||||
|
||||
procedure RegisterPackageDescriptor(PkgDesc: TPackageDescriptor);
|
||||
function PackageDescriptorStd: TPackageDescriptor;
|
||||
|
||||
function PkgCompileFlagsToString(Flags: TPkgCompileFlags): string;
|
||||
procedure RegisterPackageDescriptor(PkgDesc: TPackageDescriptor);
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
function PackageDescriptorStd: TPackageDescriptor;
|
||||
begin
|
||||
Result:=PackageDescriptors.FindByName(PkgDescNameStandard);
|
||||
end;
|
||||
|
||||
function PkgCompileFlagsToString(Flags: TPkgCompileFlags): string;
|
||||
var
|
||||
f: TPkgCompileFlag;
|
||||
@ -406,10 +412,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function PackageDescriptorStd: TPackageDescriptor;
|
||||
begin
|
||||
Result:=PackageDescriptors.FindByName(PkgDescNameStandard);
|
||||
end;
|
||||
|
||||
{ TPackageGraphInterface }
|
||||
|
||||
|
@ -40,16 +40,22 @@ unit JITForms;
|
||||
|
||||
{ $DEFINE VerboseJITForms}
|
||||
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{$IFDEF IDE_MEM_CHECK}
|
||||
MemCheck,
|
||||
{$ENDIF}
|
||||
Classes, SysUtils, AvgLvlTree, BasicCodeTools, TypInfo, LCLProc, LResources,
|
||||
Forms, Controls, LCLMemManager, LCLIntf, Dialogs,
|
||||
PropEditUtils, PropEdits, UnitResources, IDEDialogs,
|
||||
Classes, SysUtils, TypInfo,
|
||||
// LCL
|
||||
Forms, Controls, Dialogs, LResources, LCLMemManager, LCLIntf, LCLProc,
|
||||
//LazUtils
|
||||
AvgLvlTree,
|
||||
// CodeTools
|
||||
BasicCodeTools,
|
||||
// IdeIntf
|
||||
PackageDependencyIntf, PropEditUtils, PropEdits, UnitResources, IDEDialogs,
|
||||
// IDE
|
||||
IDEProcs, PackageDefs, BasePkgManager, DesignerProcs;
|
||||
|
||||
type
|
||||
|
@ -42,10 +42,10 @@ uses
|
||||
BasicCodeTools, CodeToolsStructs, CodeToolManager, FileProcs, DefineTemplates,
|
||||
CodeCache, CodeTree, FindDeclarationTool, KeywordFuncLists,
|
||||
// IdeIntf
|
||||
IDEDialogs, PropEdits, IDEMsgIntf, LazIDEIntf, MenuIntf, NewItemIntf,
|
||||
CompOptsIntf, SrcEditorIntf, IDEWindowIntf, ProjectIntf, PackageIntf,
|
||||
FormEditingIntf, IDEExternToolIntf, ObjectInspector, UnitResources, ComponentReg,
|
||||
EditorSyntaxHighlighterDef,
|
||||
IDEDialogs, PropEdits, IDEMsgIntf, LazIDEIntf, MenuIntf, NewItemIntf, CompOptsIntf,
|
||||
IDEWindowIntf, ProjectIntf, PackageIntf, PackageDependencyIntf, FormEditingIntf,
|
||||
IDEExternToolIntf, ObjectInspector, UnitResources, ComponentReg,
|
||||
SrcEditorIntf, EditorSyntaxHighlighterDef,
|
||||
// IDE
|
||||
IDEProcs, DialogProcs, IDEProtocol, LazarusIDEStrConsts, NewDialog, NewProjectDlg,
|
||||
MainBase, MainBar, MainIntf, Project, ProjectDefs, ProjectInspector, CompilerOptions,
|
||||
|
@ -65,8 +65,6 @@ type
|
||||
);
|
||||
TPackageUpdatePolicies = set of TPackageUpdatePolicy;
|
||||
|
||||
TIteratePackagesEvent =
|
||||
procedure(APackage: TLazPackageID) of object;
|
||||
TGetAllRequiredPackagesEvent =
|
||||
procedure(APackage: TLazPackage; // if not nil then ignore FirstDependency and do not add APackage to Result
|
||||
FirstDependency: TPkgDependency;
|
||||
@ -255,15 +253,12 @@ type
|
||||
FileVersion: integer);
|
||||
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string;
|
||||
UsePathDelim: TPathDelimSwitch);
|
||||
function IsMakingSense: boolean;
|
||||
function IsCompatible(const Version: TPkgVersion): boolean;
|
||||
function IsCompatible(const PkgName: string;
|
||||
const Version: TPkgVersion): boolean;
|
||||
|
||||
function Compare(Dependency2: TPkgDependency): integer;
|
||||
procedure Assign(Source: TPkgDependency);
|
||||
procedure Assign(Source: TLazPackageID);
|
||||
procedure ConsistencyCheck;
|
||||
function IsCompatible(Pkg: TLazPackageID): boolean;
|
||||
function IsCompatible(Pkg: TLazPackageID): boolean; overload;
|
||||
procedure MakeCompatible(const PkgName: string; const Version: TPkgVersion);
|
||||
function AsString(WithOwner: boolean = false; WithDefaults: boolean = false): string;
|
||||
// API for iterating dependencies.
|
||||
@ -868,8 +863,6 @@ function FindNextPkgDependencyNodeWithSameName(Node: TAVLTreeNode): TAVLTreeNode
|
||||
function GetDependencyOwnerAsString(Dependency: TPkgDependency): string;
|
||||
function GetDependencyOwnerDirectory(Dependency: TPkgDependency): string;
|
||||
|
||||
function PackageFileNameIsValid(const AFilename: string): boolean;
|
||||
|
||||
procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
|
||||
XMLConfig: TXMLConfig; const Path: string; FileVersion: integer);
|
||||
procedure PkgVersionSaveToXMLConfig(Version: TPkgVersion; XMLConfig: TXMLConfig;
|
||||
@ -877,9 +870,6 @@ procedure PkgVersionSaveToXMLConfig(Version: TPkgVersion; XMLConfig: TXMLConfig;
|
||||
procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
|
||||
XMLConfig: TXMLConfig);
|
||||
|
||||
function IsValidUnitName(AUnitName: String): Boolean; inline;
|
||||
function IsValidPkgName(APkgName: String): Boolean; inline;
|
||||
|
||||
var
|
||||
Package1: TLazPackage; // don't use it - only for options dialog
|
||||
|
||||
@ -887,19 +877,9 @@ function dbgs(p: TPackageUpdatePolicy): string; overload;
|
||||
function dbgs(p: TLazPackageType): string; overload;
|
||||
function PackagePathToStr(PathList: TFPList): string;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
function IsValidUnitName(AUnitName: String): Boolean;
|
||||
begin
|
||||
Result := IsDottedIdentifier(AUnitName);
|
||||
end;
|
||||
|
||||
function IsValidPkgName(APkgName: String): Boolean;
|
||||
begin
|
||||
Result := IsDottedIdentifier(APkgName);
|
||||
end;
|
||||
|
||||
function PkgFileTypeIdentToType(const s: string): TPkgFileType;
|
||||
begin
|
||||
for Result:=Low(TPkgFileType) to High(TPkgFileType) do
|
||||
@ -1333,17 +1313,6 @@ begin
|
||||
OnGetDependencyOwnerDirectory(Dependency,Result);
|
||||
end;
|
||||
|
||||
function PackageFileNameIsValid(const AFilename: string): boolean;
|
||||
var
|
||||
PkgName: String;
|
||||
begin
|
||||
Result:=false;
|
||||
if CompareFileExt(AFilename,'.lpk',false)<>0 then exit;
|
||||
PkgName:=ExtractFileNameOnly(AFilename);
|
||||
if (PkgName='') or (not IsValidPkgName(PkgName)) then exit;
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
|
||||
XMLConfig: TXMLConfig; const Path: string; FileVersion: integer);
|
||||
var
|
||||
@ -1897,30 +1866,6 @@ begin
|
||||
XMLConfig.SetDeleteValue(Path+'DefaultFilename/Prefer',PreferDefaultFilename,false);
|
||||
end;
|
||||
|
||||
function TPkgDependency.IsMakingSense: boolean;
|
||||
begin
|
||||
Result:=IsValidPkgName(PackageName);
|
||||
if Result
|
||||
and (pdfMinVersion in FFlags) and (pdfMaxVersion in FFlags)
|
||||
and (MinVersion.Compare(MaxVersion)>0) then
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
function TPkgDependency.IsCompatible(const Version: TPkgVersion): boolean;
|
||||
begin
|
||||
if ((pdfMinVersion in FFlags) and (MinVersion.Compare(Version)>0))
|
||||
or ((pdfMaxVersion in FFlags) and (MaxVersion.Compare(Version)<0)) then
|
||||
Result:=false
|
||||
else
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
function TPkgDependency.IsCompatible(const PkgName: string;
|
||||
const Version: TPkgVersion): boolean;
|
||||
begin
|
||||
Result:=(SysUtils.CompareText(PkgName,PackageName)=0) and IsCompatible(Version);
|
||||
end;
|
||||
|
||||
function TPkgDependency.Compare(Dependency2: TPkgDependency): integer;
|
||||
begin
|
||||
Result:=SysUtils.CompareText(PackageName,Dependency2.PackageName);
|
||||
@ -1969,8 +1914,7 @@ begin
|
||||
if MaxVersion.Compare(Version)<0 then MaxVersion.Assign(Version);
|
||||
end;
|
||||
|
||||
function TPkgDependency.AsString(WithOwner: boolean; WithDefaults: boolean
|
||||
): string;
|
||||
function TPkgDependency.AsString(WithOwner: boolean; WithDefaults: boolean): string;
|
||||
begin
|
||||
if Self=nil then
|
||||
exit('(nil)');
|
||||
@ -3054,9 +2998,7 @@ end;
|
||||
|
||||
function TLazPackage.IsMakingSense: boolean;
|
||||
begin
|
||||
Result:=false;
|
||||
if not IsValidPkgName(Name) then exit;
|
||||
Result:=true;
|
||||
Result:=IsValidPkgName(Name);
|
||||
end;
|
||||
|
||||
procedure TLazPackage.ShortenFilename(var ExpandedFilename: string; UseUp: boolean);
|
||||
|
@ -144,7 +144,7 @@ type
|
||||
function FindLinkWithPkgNameInTree(LinkTree: TAvgLvlTree;
|
||||
const PkgName: string; IgnoreFiles: TFilenameToStringTree): TPackageLink;
|
||||
function FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree;
|
||||
Dependency: TPkgDependency; IgnoreFiles: TFilenameToStringTree): TPackageLink;
|
||||
Dependency: TPkgDependencyID; IgnoreFiles: TFilenameToStringTree): TPackageLink;
|
||||
function FindLinkWithPackageIDInTree(LinkTree: TAvgLvlTree;
|
||||
APackageID: TLazPackageID): TPackageLink;
|
||||
function FindLinkWithLPKFilenameInTree(LinkTree: TAvgLvlTree;
|
||||
@ -176,13 +176,13 @@ type
|
||||
procedure WriteLinkTree(LinkTree: TAvgLvlTree);
|
||||
function FindLinkWithPkgName(const PkgName: string;
|
||||
IgnoreFiles: TFilenameToStringTree = nil): TPackageLink;
|
||||
function FindLinkWithDependency(Dependency: TPkgDependency;
|
||||
function FindLinkWithDependency(Dependency: TPkgDependencyID;
|
||||
IgnoreFiles: TFilenameToStringTree = nil): TPackageLink;
|
||||
function FindLinkWithPackageID(APackageID: TLazPackageID): TPackageLink;
|
||||
function FindLinkWithFilename(const PkgName, LPKFilename: string): TPackageLink;
|
||||
procedure IteratePackages(MustExist: boolean; Event: TIteratePackagesEvent;
|
||||
Origins: TPkgLinkOrigins = AllPkgLinkOrigins);
|
||||
function AddUserLink(APackage: TLazPackage): TPackageLink;
|
||||
function AddUserLink(APackage: TIDEPackage): TPackageLink;
|
||||
function AddUserLink(const PkgFilename, PkgName: string): TPackageLink;// do not use this if package is open in IDE
|
||||
procedure RemoveUserLink(Link: TPackageLink);
|
||||
procedure RemoveUserLinks(APackageID: TLazPackageID);
|
||||
@ -1022,7 +1022,7 @@ begin
|
||||
end;
|
||||
|
||||
function TPackageLinks.FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree;
|
||||
Dependency: TPkgDependency; IgnoreFiles: TFilenameToStringTree): TPackageLink;
|
||||
Dependency: TPkgDependencyID; IgnoreFiles: TFilenameToStringTree): TPackageLink;
|
||||
var
|
||||
Link: TPackageLink;
|
||||
CurNode: TAvgLvlTreeNode;
|
||||
@ -1165,7 +1165,7 @@ begin
|
||||
Result:=GetNewerLink(UserLink,GlobalLink);
|
||||
end;
|
||||
|
||||
function TPackageLinks.FindLinkWithDependency(Dependency: TPkgDependency;
|
||||
function TPackageLinks.FindLinkWithDependency(Dependency: TPkgDependencyID;
|
||||
IgnoreFiles: TFilenameToStringTree): TPackageLink;
|
||||
var
|
||||
UserLink, GlobalLink: TPackageLink;
|
||||
@ -1204,7 +1204,7 @@ begin
|
||||
IteratePackagesInTree(MustExist,FGlobalLinks,Event);
|
||||
end;
|
||||
|
||||
function TPackageLinks.AddUserLink(APackage: TLazPackage): TPackageLink;
|
||||
function TPackageLinks.AddUserLink(APackage: TIDEPackage): TPackageLink;
|
||||
var
|
||||
OldLink: TPackageLink;
|
||||
NewLink: TPackageLink;
|
||||
@ -1244,8 +1244,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPackageLinks.AddUserLink(const PkgFilename, PkgName: string
|
||||
): TPackageLink;
|
||||
function TPackageLinks.AddUserLink(const PkgFilename, PkgName: string): TPackageLink;
|
||||
var
|
||||
OldLink: TPackageLink;
|
||||
NewLink: TPackageLink;
|
||||
|
@ -56,9 +56,9 @@ uses
|
||||
CodeToolsConfig, CodeToolManager, CodeCache, CodeToolsStructs, BasicCodeTools,
|
||||
FileProcs, CodeTree,
|
||||
// IDE Interface
|
||||
SrcEditorIntf, NewItemIntf, ProjPackIntf, ProjectIntf, PackageIntf, CompOptsIntf,
|
||||
MenuIntf, IDEWindowIntf, IDEExternToolIntf, MacroIntf, LazIDEIntf, IDEMsgIntf,
|
||||
ComponentReg, PropEdits, IDEDialogs, UnitResources,
|
||||
NewItemIntf, ProjPackIntf, ProjectIntf, PackageIntf, PackageDependencyIntf,
|
||||
CompOptsIntf, MenuIntf, IDEWindowIntf, IDEExternToolIntf, MacroIntf, LazIDEIntf,
|
||||
IDEMsgIntf, SrcEditorIntf, ComponentReg, PropEdits, IDEDialogs, UnitResources,
|
||||
// IDE
|
||||
PkgRegisterBase, IDECmdLine, LazarusIDEStrConsts, IDEProcs, ObjectLists,
|
||||
DialogProcs, IDECommands, IDEOptionDefs, EnvironmentOpts, MiscOptions,
|
||||
|
@ -38,8 +38,15 @@ unit PkgVirtualUnitEditor;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Dialogs,
|
||||
PackageDefs, FileUtil, LazFileUtils, LazarusIDEStrConsts;
|
||||
Classes, SysUtils,
|
||||
// LCL
|
||||
Forms, Controls, Dialogs,
|
||||
// LazUtils
|
||||
FileUtil, LazFileUtils,
|
||||
// IdeIntf
|
||||
PackageDependencyIntf,
|
||||
// IDE
|
||||
PackageDefs, LazarusIDEStrConsts;
|
||||
|
||||
function ShowEditVirtualPackageDialog(PkgFile: TPkgFile): TModalResult;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user