mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-23 16:59:42 +02:00
aarre: store version
git-svn-id: trunk@38480 -
This commit is contained in:
parent
67b639d8cf
commit
38f6ef6f3d
@ -34,7 +34,7 @@ unit AarrePkgList;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Laz2_XMLCfg, laz2_DOM;
|
||||
Classes, SysUtils, Laz2_XMLCfg, laz2_DOM, LazLogger;
|
||||
|
||||
type
|
||||
TAPackageType = (
|
||||
@ -76,9 +76,9 @@ type
|
||||
TAPkgDependency = class
|
||||
private
|
||||
FDefaultFilename: string;
|
||||
FMaxVersion: TPkgVersion;
|
||||
FMaxVersion: TAPkgVersion;
|
||||
FMaxVersionValid: boolean;
|
||||
FMinVersion: TPkgVersion;
|
||||
FMinVersion: TAPkgVersion;
|
||||
FMinVersionValid: boolean;
|
||||
FName: string;
|
||||
FPreferDefaultFilename: boolean;
|
||||
@ -88,9 +88,9 @@ type
|
||||
procedure Load(XML: TXMLConfig; Path: string); virtual;
|
||||
procedure Save(XML: TXMLConfig; Path: string); virtual;
|
||||
property Name: string read FName write FName;
|
||||
property MinVersion: TPkgVersion read FMinVersion;
|
||||
property MinVersion: TAPkgVersion read FMinVersion;
|
||||
property MinVersionValid: boolean read FMinVersionValid write FMinVersionValid;
|
||||
property MaxVersion: TPkgVersion read FMaxVersion;
|
||||
property MaxVersion: TAPkgVersion read FMaxVersion;
|
||||
property MaxVersionValid: boolean read FMaxVersionValid write FMaxVersionValid;
|
||||
property DefaultFilename: string read FDefaultFilename write FDefaultFilename;
|
||||
property PreferDefaultFilename: boolean read FPreferDefaultFilename write FPreferDefaultFilename;
|
||||
@ -125,14 +125,17 @@ type
|
||||
FLPKFilename: string;
|
||||
FName: string;
|
||||
FPackageType: TAPackageType;
|
||||
FDependencies: TAPkgDependencies;
|
||||
FVersion: TAPkgVersion;
|
||||
procedure SetLPKFilename(AValue: string);
|
||||
procedure SetName(AValue: string);
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Clear;
|
||||
procedure Load(XML: TXMLConfig; Path: string); virtual;
|
||||
procedure Save(XML: TXMLConfig; Path: string); virtual;
|
||||
procedure LoadLPK(LPKFilename: string);
|
||||
property Name: string read FName write SetName;
|
||||
property Version: TAPkgVersion read FVersion;
|
||||
property PackageType: TAPackageType read FPackageType write FPackageType;
|
||||
@ -141,6 +144,7 @@ type
|
||||
property License: String read FLicense write FLicense;
|
||||
|
||||
property LPKFilename: string read FLPKFilename write SetLPKFilename;
|
||||
property Dependencies: TAPkgDependencies read FDependencies;
|
||||
end;
|
||||
|
||||
{ TAarrePkgList }
|
||||
@ -207,13 +211,30 @@ begin
|
||||
end;
|
||||
|
||||
procedure TAPkgDependencies.Load(XML: TXMLConfig; Path: string);
|
||||
var
|
||||
NewCount: Integer;
|
||||
i: Integer;
|
||||
Dep: TAPkgDependency;
|
||||
begin
|
||||
|
||||
Clear;
|
||||
NewCount:=XML.GetValue(Path+'Count',0);
|
||||
for i:=0 to NewCount-1 do begin
|
||||
Dep:=TAPkgDependency.Create;
|
||||
Dep.Load(XML,Path+'Item'+IntToStr(i+1)+'/');
|
||||
if Dep.Name='' then
|
||||
Dep.Free
|
||||
else
|
||||
FItems.Add(Dep);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAPkgDependencies.Save(XML: TXMLConfig; Path: string);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
|
||||
XML.SetValue(Path+'Count',0);
|
||||
for i:=0 to Count-1 do
|
||||
Items[i].Save(XML,Path+'Item'+IntToStr(i+1)+'/');
|
||||
end;
|
||||
|
||||
procedure TAPkgDependencies.Add(Item: TAPkgDependency);
|
||||
@ -286,14 +307,23 @@ end;
|
||||
|
||||
constructor TAarrePkgListItem.Create;
|
||||
begin
|
||||
|
||||
FVersion:=TAPkgVersion.Create;
|
||||
FDependencies:=TAPkgDependencies.Create;
|
||||
end;
|
||||
|
||||
destructor TAarrePkgListItem.Destroy;
|
||||
begin
|
||||
Clear;
|
||||
FreeAndNil(FDescription);
|
||||
FreeAndNil(FVersion);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TAarrePkgListItem.Clear;
|
||||
begin
|
||||
FDependencies.Clear;
|
||||
end;
|
||||
|
||||
procedure TAarrePkgListItem.Load(XML: TXMLConfig; Path: string);
|
||||
begin
|
||||
Name:=XML.GetValue(Path+'Name','');
|
||||
@ -304,6 +334,7 @@ begin
|
||||
Description:=XML.GetValue(Path+'Description/Value','');
|
||||
License:=XML.GetValue(Path+'License/Value','');
|
||||
LPKFilename:=XML.GetValue(Path+'LPKFilename/Value','');
|
||||
Dependencies.Load(XML,Path+'Dependencies/');
|
||||
end;
|
||||
|
||||
procedure TAarrePkgListItem.Save(XML: TXMLConfig; Path: string);
|
||||
@ -316,6 +347,51 @@ begin
|
||||
XML.SetDeleteValue(Path+'Description/Value',Description,'');
|
||||
XML.SetDeleteValue(Path+'License/Value',License,'');
|
||||
XML.SetDeleteValue(Path+'LPKFilename/Value',LPKFilename,'');
|
||||
Dependencies.Save(XML,Path+'Dependencies/');
|
||||
end;
|
||||
|
||||
procedure TAarrePkgListItem.LoadLPK(LPKFilename: string);
|
||||
var
|
||||
xml: TXMLConfig;
|
||||
Path: String;
|
||||
FileVersion: Integer;
|
||||
i: Integer;
|
||||
NewCount: Integer;
|
||||
PkgDependency: TAPkgDependency;
|
||||
begin
|
||||
xml:=TXMLConfig.Create(LPKFilename);
|
||||
try
|
||||
Path:='Package/';
|
||||
FileVersion:=xml.GetValue(Path+'Version',0);
|
||||
if FileVersion=0 then
|
||||
raise Exception.Create('no file version');
|
||||
Name:=xml.GetValue(Path+'Name/Value','');
|
||||
PackageType:=APackageTypeIdentToType(xml.GetValue(Path+'Type/Value',
|
||||
APackageTypeIdents[DefaultPackageType]));
|
||||
Author:=xml.GetValue(Path+'Author/Value','');
|
||||
Description:=xml.GetValue(Path+'Description/Value','');
|
||||
License:=xml.GetValue(Path+'License/Value','');
|
||||
Version.Load(xml,Path+'Version/');
|
||||
|
||||
NewCount:=xml.GetValue(Path+'RequiredPkgs/Count',0);
|
||||
Dependencies.Clear;
|
||||
for i:=0 to NewCount-1 do begin
|
||||
PkgDependency:=TAPkgDependency.Create;
|
||||
PkgDependency.Load(xml,Path+'RequiredPkgs/Item'+IntToStr(i+1)+'/');
|
||||
Dependencies.Add(PkgDependency);
|
||||
end;
|
||||
|
||||
DebugLn(['TLPackage.Load Name="',Name,'"',
|
||||
' Type=',APackageTypeIdents[PackageType],
|
||||
' Author="',Author,'"',
|
||||
' Description="',Description,'"',
|
||||
' License="',License,'"',
|
||||
' Version="',Version.AsString,'"'
|
||||
]);
|
||||
|
||||
finally
|
||||
xml.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TAarrePkgList }
|
||||
@ -341,7 +417,9 @@ procedure TAarrePkgList.Clear;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=Count-1 downto 0 do Delete(i);
|
||||
debugln(['TAarrePkgList.Clear ',Count]);
|
||||
for i:=Count-1 downto 0 do
|
||||
Delete(i);
|
||||
end;
|
||||
|
||||
procedure TAarrePkgList.Load(XML: TXMLConfig; Path: string);
|
||||
@ -377,6 +455,8 @@ end;
|
||||
|
||||
procedure TAarrePkgList.Add(Item: TAarrePkgListItem);
|
||||
begin
|
||||
if Item=nil then
|
||||
raise Exception.Create('Item=nil');
|
||||
Insert(Count,Item);
|
||||
end;
|
||||
|
||||
@ -392,7 +472,9 @@ end;
|
||||
|
||||
procedure TAarrePkgList.Delete(Index: integer);
|
||||
begin
|
||||
debugln(['TAarrePkgList.Delete AAA1 ',Index,' ',dbgs(fItems[Index])]);
|
||||
TObject(fItems[Index]).Free;
|
||||
debugln(['TAarrePkgList.Delete AAA2 ',Index]);
|
||||
fItems.Delete(Index);
|
||||
end;
|
||||
|
||||
@ -410,8 +492,8 @@ end;
|
||||
|
||||
constructor TAPkgDependency.Create;
|
||||
begin
|
||||
FMinVersion:=TPkgVersion.Create;
|
||||
FMaxVersion:=TPkgVersion.Create;
|
||||
FMinVersion:=TAPkgVersion.Create;
|
||||
FMaxVersion:=TAPkgVersion.Create;
|
||||
end;
|
||||
|
||||
destructor TAPkgDependency.Destroy;
|
||||
|
@ -6,96 +6,17 @@ uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Classes, SysUtils, LazFileUtils, LazLogger, Laz2_XMLCfg, CustApp, contnrs;
|
||||
Classes, SysUtils, LazFileUtils, LazLogger, Laz2_XMLCfg, CustApp, contnrs,
|
||||
AarrePkgList;
|
||||
|
||||
type
|
||||
|
||||
TLazPackageType = (
|
||||
lptRunTime, // RunTime packages can't register anything in the IDE.
|
||||
// They can be used by designtime packages.
|
||||
lptDesignTime, // DesignTime packages can register anything in the IDE
|
||||
// and should not be compiled into projects.
|
||||
// The IDE calls the 'register' procedures of each unit.
|
||||
lptRunAndDesignTime,// RunAndDesignTime packages can do anything.
|
||||
lptRunTimeOnly // as lptRunTime, but they can not be used in the IDE
|
||||
);
|
||||
|
||||
{ TPkgVersion }
|
||||
|
||||
TPkgVersion = class
|
||||
private
|
||||
FBuild: integer;
|
||||
FMajor: integer;
|
||||
FMinor: integer;
|
||||
FRelease: integer;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Load(XML: TXMLConfig; Path: string);
|
||||
procedure Save(XML: TXMLConfig; Path: string);
|
||||
function AsString: string;
|
||||
property Major: integer read FMajor write FMajor;
|
||||
property Minor: integer read FMinor write FMinor;
|
||||
property Release: integer read FRelease write FRelease;
|
||||
property Build: integer read FBuild write FBuild;
|
||||
end;
|
||||
|
||||
{ TPkgDependency }
|
||||
|
||||
TPkgDependency = class
|
||||
private
|
||||
FDefaultFilename: string;
|
||||
FMaxVersion: TPkgVersion;
|
||||
FMaxVersionValid: boolean;
|
||||
FMinVersion: TPkgVersion;
|
||||
FMinVersionValid: boolean;
|
||||
FName: string;
|
||||
FPreferDefaultFilename: boolean;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Load(XML: TXMLConfig; Path: string);
|
||||
procedure Save(XML: TXMLConfig; Path: string);
|
||||
property Name: string read FName write FName;
|
||||
property MinVersion: TPkgVersion read FMinVersion;
|
||||
property MinVersionValid: boolean read FMinVersionValid write FMinVersionValid;
|
||||
property MaxVersion: TPkgVersion read FMaxVersion;
|
||||
property MaxVersionValid: boolean read FMaxVersionValid write FMaxVersionValid;
|
||||
property DefaultFilename: string read FDefaultFilename write FDefaultFilename;
|
||||
property PreferDefaultFilename: boolean read FPreferDefaultFilename write FPreferDefaultFilename;
|
||||
end;
|
||||
|
||||
{ TLPackage }
|
||||
|
||||
TLPackage = class
|
||||
private
|
||||
FAuthor: String;
|
||||
FDescription: String;
|
||||
FLicense: String;
|
||||
FLPKFilename: string;
|
||||
FName: String;
|
||||
FPackageType: TLazPackageType;
|
||||
FRequiredDeps: TObjectList;
|
||||
FVersion: TPkgVersion;
|
||||
public
|
||||
constructor Create(aLPKFilename: string);
|
||||
destructor Destroy; override;
|
||||
procedure Load;
|
||||
property LPKFilename: string read FLPKFilename;
|
||||
property Version: TPkgVersion read FVersion;
|
||||
property Name: String read FName write FName;
|
||||
property PackageType: TLazPackageType read FPackageType write FPackageType;
|
||||
property Author: String read FAuthor write FAuthor;
|
||||
property Description: String read FDescription write FDescription;
|
||||
property License: String read FLicense write FLicense;
|
||||
property RequiredDeps: TObjectList read FRequiredDeps;
|
||||
end;
|
||||
|
||||
{ TAarreUpdateList }
|
||||
|
||||
TAarreUpdateList = class(TCustomApplication)
|
||||
private
|
||||
FDirectory: string;
|
||||
FList: TAarrePkgList;
|
||||
FOutputFile: string;
|
||||
FQuiet: boolean;
|
||||
FVerbose: boolean;
|
||||
@ -110,151 +31,15 @@ type
|
||||
destructor Destroy; override;
|
||||
procedure WriteHelp; virtual;
|
||||
|
||||
// options
|
||||
property Verbose: boolean read FVerbose write FVerbose;
|
||||
property Quiet: boolean read FQuiet write FQuiet;
|
||||
property Directory: string read FDirectory write SetDirectory;
|
||||
property OutputFile: string read FOutputFile write SetOutputFile;
|
||||
|
||||
property List: TAarrePkgList read FList;
|
||||
end;
|
||||
|
||||
const
|
||||
LazPackageTypeIdents: array[TLazPackageType] of string = (
|
||||
'RunTime', 'DesignTime', 'RunAndDesignTime', 'RunTimeOnly');
|
||||
|
||||
function LazPackageTypeIdentToType(const s: string): TLazPackageType;
|
||||
begin
|
||||
for Result:=Low(TLazPackageType) to High(TLazPackageType) do
|
||||
if SysUtils.CompareText(s,LazPackageTypeIdents[Result])=0 then exit;
|
||||
Result:=lptRunTime;
|
||||
end;
|
||||
|
||||
{ TPkgDependency }
|
||||
|
||||
constructor TPkgDependency.Create;
|
||||
begin
|
||||
FMinVersion:=TPkgVersion.Create;
|
||||
FMaxVersion:=TPkgVersion.Create;
|
||||
end;
|
||||
|
||||
destructor TPkgDependency.Destroy;
|
||||
begin
|
||||
FreeAndNil(FMinVersion);
|
||||
FreeAndNil(FMaxVersion);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.Load(XML: TXMLConfig; Path: string);
|
||||
begin
|
||||
MaxVersion.Load(XML,Path+'MaxVersion');
|
||||
MaxVersionValid:=XML.GetValue(Path+'MaxVersion/Valid',false);
|
||||
MinVersion.Load(XML,Path+'MinVersion');
|
||||
MinVersionValid:=XML.GetValue(Path+'MinVersion/Valid',false);
|
||||
DefaultFilename:=XML.GetValue(Path+'DefaultFilename/Value','');
|
||||
PreferDefaultFilename:=XML.GetValue(Path+'DefaultFilename/Prefer',false);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.Save(XML: TXMLConfig; Path: string);
|
||||
begin
|
||||
MaxVersion.Save(XML,Path+'MaxVersion');
|
||||
XML.SetDeleteValue(Path+'MaxVersion/Valid',MaxVersionValid,false);
|
||||
MinVersion.Save(XML,Path+'MinVersion');
|
||||
XML.SetDeleteValue(Path+'MinVersion/Valid',MinVersionValid,false);
|
||||
XML.SetDeleteValue(Path+'DefaultFilename/Value',FDefaultFilename,'');
|
||||
XML.SetDeleteValue(Path+'DefaultFilename/Prefer',FPreferDefaultFilename,false);
|
||||
end;
|
||||
|
||||
{ TPkgVersion }
|
||||
|
||||
constructor TPkgVersion.Create;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
destructor TPkgVersion.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TPkgVersion.Load(XML: TXMLConfig; Path: string);
|
||||
begin
|
||||
Major:=XML.GetValue(Path+'Major',0);
|
||||
Minor:=XML.GetValue(Path+'Minor',0);
|
||||
Release:=XML.GetValue(Path+'Release',0);
|
||||
Build:=XML.GetValue(Path+'Build',0);
|
||||
end;
|
||||
|
||||
procedure TPkgVersion.Save(XML: TXMLConfig; Path: string);
|
||||
begin
|
||||
XML.SetDeleteValue(Path+'Major',Major,0);
|
||||
XML.SetDeleteValue(Path+'Minor',Minor,0);
|
||||
XML.SetDeleteValue(Path+'Release',Release,0);
|
||||
XML.SetDeleteValue(Path+'Build',Build,0);
|
||||
end;
|
||||
|
||||
function TPkgVersion.AsString: string;
|
||||
begin
|
||||
Result:=IntToStr(Major)+'.'+IntToStr(Minor)+'.'+IntToStr(Release)+'.'+IntToStr(Build);
|
||||
end;
|
||||
|
||||
{ TLPK }
|
||||
|
||||
constructor TLPackage.Create(aLPKFilename: string);
|
||||
begin
|
||||
fLPKFilename:=aLPKFilename;
|
||||
FVersion:=TPkgVersion.Create;
|
||||
FRequiredDeps:=TObjectList.Create;
|
||||
end;
|
||||
|
||||
destructor TLPackage.Destroy;
|
||||
begin
|
||||
FreeAndNil(FVersion);
|
||||
FreeAndNil(FRequiredDeps);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TLPackage.Load;
|
||||
var
|
||||
xml: TXMLConfig;
|
||||
Path: String;
|
||||
FileVersion: Integer;
|
||||
i: Integer;
|
||||
NewCount: Integer;
|
||||
PkgDependency: TPkgDependency;
|
||||
begin
|
||||
xml:=TXMLConfig.Create(LPKFilename);
|
||||
try
|
||||
Path:='Package/';
|
||||
FileVersion:=xml.GetValue(Path+'Version',0);
|
||||
if FileVersion=0 then
|
||||
raise Exception.Create('no file version');
|
||||
Name:=xml.GetValue(Path+'Name/Value','');
|
||||
PackageType:=LazPackageTypeIdentToType(xml.GetValue(Path+'Type/Value',
|
||||
LazPackageTypeIdents[lptRunTime]));
|
||||
Author:=xml.GetValue(Path+'Author/Value','');
|
||||
Description:=xml.GetValue(Path+'Description/Value','');
|
||||
License:=xml.GetValue(Path+'License/Value','');
|
||||
Version.Load(xml,Path+'Version/');
|
||||
|
||||
NewCount:=xml.GetValue(Path+'RequiredPkgs/Count',0);
|
||||
RequiredDeps.Clear;
|
||||
for i:=0 to NewCount-1 do begin
|
||||
PkgDependency:=TPkgDependency.Create;
|
||||
PkgDependency.Load(xml,Path+'RequiredPkgs/Item'+IntToStr(i+1)+'/');
|
||||
RequiredDeps.Add(PkgDependency);
|
||||
end;
|
||||
|
||||
debugln(['TLPackage.Load Name="',Name,'"',
|
||||
' Type=',LazPackageTypeIdents[PackageType],
|
||||
' Author="',Author,'"',
|
||||
' Description="',Description,'"',
|
||||
' License="',License,'"',
|
||||
' Version="',Version.AsString,'"'
|
||||
]);
|
||||
|
||||
finally
|
||||
xml.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TAarreUpdateList }
|
||||
|
||||
procedure TAarreUpdateList.SetDirectory(AValue: string);
|
||||
@ -345,18 +130,25 @@ end;
|
||||
|
||||
procedure TAarreUpdateList.AddLPK(LPKFilename: string);
|
||||
var
|
||||
Pkg: TLPackage;
|
||||
Pkg: TAarrePkgListItem;
|
||||
ok: Boolean;
|
||||
begin
|
||||
DebugLn(['TAarreUpdateList.AddLPK ',LPKFilename]);
|
||||
|
||||
Pkg:=TLPackage.Create(LPKFilename);
|
||||
Pkg:=TAarrePkgListItem.Create;
|
||||
ok:=false;
|
||||
try
|
||||
Pkg.Load;
|
||||
Pkg.LoadLPK(LPKFilename);
|
||||
ok:=true;
|
||||
except
|
||||
on E: Exception do begin
|
||||
debugln(['ERROR: while reading "'+LPKFilename+'": '+E.Message]);
|
||||
end;
|
||||
end;
|
||||
if ok then begin
|
||||
List.Add(Pkg);
|
||||
end else
|
||||
Pkg.Free;
|
||||
end;
|
||||
|
||||
constructor TAarreUpdateList.Create(TheOwner: TComponent);
|
||||
@ -367,10 +159,12 @@ begin
|
||||
Quiet:=false;
|
||||
Directory:='.';
|
||||
OutputFile:='packages.gz';
|
||||
FList:=TAarrePkgList.Create;
|
||||
end;
|
||||
|
||||
destructor TAarreUpdateList.Destroy;
|
||||
begin
|
||||
FreeAndNil(FList);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user