aarre: store version

git-svn-id: trunk@38480 -
This commit is contained in:
mattias 2012-09-02 09:49:39 +00:00
parent 67b639d8cf
commit 38f6ef6f3d
2 changed files with 111 additions and 235 deletions

View File

@ -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;

View File

@ -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;