mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 22:49:23 +02:00
* recovery mode added to always use internal fpmkunit
* fix dependency versioning git-svn-id: trunk@10280 -
This commit is contained in:
parent
3e63d3f1dd
commit
36316bea75
File diff suppressed because it is too large
Load Diff
@ -154,6 +154,7 @@ begin
|
|||||||
Writeln(' -d --debug Show debugging information');
|
Writeln(' -d --debug Show debugging information');
|
||||||
Writeln(' -g --global Force installation to global (system-wide) directory');
|
Writeln(' -g --global Force installation to global (system-wide) directory');
|
||||||
Writeln(' -f --force Force installation also if the package is already installed');
|
Writeln(' -f --force Force installation also if the package is already installed');
|
||||||
|
Writeln(' -r --recovery Recovery mode, use always internal fpmkunit');
|
||||||
Writeln('Actions:');
|
Writeln('Actions:');
|
||||||
Writeln(' update Update packages list');
|
Writeln(' update Update packages list');
|
||||||
Writeln(' showavail List available packages');
|
Writeln(' showavail List available packages');
|
||||||
@ -242,6 +243,8 @@ begin
|
|||||||
LogLevels:=AllLogLevels+[vlDebug]
|
LogLevels:=AllLogLevels+[vlDebug]
|
||||||
else if CheckOption(I,'g','global') then
|
else if CheckOption(I,'g','global') then
|
||||||
GlobalOptions.InstallGlobal:=true
|
GlobalOptions.InstallGlobal:=true
|
||||||
|
else if CheckOption(I,'r','recovery') then
|
||||||
|
GlobalOptions.RecoveryMode:=true
|
||||||
else if CheckOption(I,'h','help') then
|
else if CheckOption(I,'h','help') then
|
||||||
begin
|
begin
|
||||||
ShowUsage;
|
ShowUsage;
|
||||||
@ -313,16 +316,18 @@ begin
|
|||||||
begin
|
begin
|
||||||
if FileExists(ParaPackages[i]) then
|
if FileExists(ParaPackages[i]) then
|
||||||
begin
|
begin
|
||||||
ActionPackage:=CurrentRepository.AddPackage(ChangeFileExt(ExtractFileName(ParaPackages[i]),''));
|
ActionPackage:=LoadOrCreatePackage(ChangeFileExt(ExtractFileName(ParaPackages[i]),''));
|
||||||
ActionPackage.FileName:=ExpandFileName(ParaPackages[i]);
|
ActionPackage.FileName:=ExpandFileName(ParaPackages[i]);
|
||||||
ActionPackage.IsLocalPackage:=true;
|
ActionPackage.IsLocalPackage:=true;
|
||||||
|
res:=pkghandler.ExecuteAction(ActionPackage,ParaAction);
|
||||||
|
FreeAndNil(ActionPackage);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
begin
|
||||||
ActionPackage:=CurrentRepository.PackageByName(ParaPackages[i]);
|
ActionPackage:=CurrentRepository.PackageByName(ParaPackages[i]);
|
||||||
Log(vlDebug,SLogCommandLineAction,['['+ActionPackage.Name+']',ParaAction]);
|
Log(vlDebug,SLogCommandLineAction,['['+ActionPackage.Name+']',ParaAction]);
|
||||||
res:=pkghandler.ExecuteAction(ActionPackage,ParaAction);
|
res:=pkghandler.ExecuteAction(ActionPackage,ParaAction);
|
||||||
if ActionPackage.IsLocalPackage then;
|
end;
|
||||||
FreeAndNil(ActionPackage);
|
|
||||||
if not res then
|
if not res then
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
|
@ -121,13 +121,9 @@ type
|
|||||||
FOSes : TOSES;
|
FOSes : TOSES;
|
||||||
FCPUs : TCPUS;
|
FCPUs : TCPUS;
|
||||||
FIsLocalPackage : Boolean;
|
FIsLocalPackage : Boolean;
|
||||||
function GetDependencies: TFPDependencies;
|
|
||||||
function GetHasDependencies: Boolean;
|
|
||||||
function GetFileName: String;
|
function GetFileName: String;
|
||||||
procedure SetName(const AValue: String);
|
procedure SetName(const AValue: String);
|
||||||
procedure SetVersion(const AValue: TFPVersion);
|
procedure SetVersion(const AValue: TFPVersion);
|
||||||
Protected
|
|
||||||
Function CreateDependencies : TFPDependencies; virtual;
|
|
||||||
Public
|
Public
|
||||||
Constructor Create(ACollection : TCollection); override;
|
Constructor Create(ACollection : TCollection); override;
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
@ -135,8 +131,7 @@ type
|
|||||||
Procedure SaveToStream(Stream : TStream); override;
|
Procedure SaveToStream(Stream : TStream); override;
|
||||||
Procedure Assign(Source : TPersistent); override;
|
Procedure Assign(Source : TPersistent); override;
|
||||||
Function AddDependency(Const APackageName : String; AMinVersion : String = '') : TFPDependency;
|
Function AddDependency(Const APackageName : String; AMinVersion : String = '') : TFPDependency;
|
||||||
Property HasDependencies : Boolean Read GetHasDependencies;
|
Property Dependencies : TFPDependencies Read FDependencies;
|
||||||
Property Dependencies : TFPDependencies Read GetDependencies;
|
|
||||||
Published
|
Published
|
||||||
Property Name : String Read FName Write SetName;
|
Property Name : String Read FName Write SetName;
|
||||||
Property Author : String Read FAuthor Write FAuthor;
|
Property Author : String Read FAuthor Write FAuthor;
|
||||||
@ -196,10 +191,12 @@ type
|
|||||||
Procedure Save;
|
Procedure Save;
|
||||||
// Loading and Saving version numbers: List of Name=Value pairs.
|
// Loading and Saving version numbers: List of Name=Value pairs.
|
||||||
procedure ClearStatus;
|
procedure ClearStatus;
|
||||||
|
{$ifdef STATUSFILE}
|
||||||
Procedure LoadStatusFromStream(Stream : TStream); virtual;
|
Procedure LoadStatusFromStream(Stream : TStream); virtual;
|
||||||
Procedure SaveStatusToStream(Stream : TStream); virtual;
|
Procedure SaveStatusToStream(Stream : TStream); virtual;
|
||||||
Procedure LoadStatusFromFile(const AFileName : String);
|
Procedure LoadStatusFromFile(const AFileName : String);
|
||||||
Procedure SaveStatusToFile(const AFileName : String);
|
Procedure SaveStatusToFile(const AFileName : String);
|
||||||
|
{$endif STATUSFILE}
|
||||||
// Package management
|
// Package management
|
||||||
Function IndexOfPackage(const APackageName : String) : Integer;
|
Function IndexOfPackage(const APackageName : String) : Integer;
|
||||||
Function FindPackage(const APackageName : String) : TFPPackage;
|
Function FindPackage(const APackageName : String) : TFPPackage;
|
||||||
@ -298,34 +295,32 @@ ResourceString
|
|||||||
|
|
||||||
|
|
||||||
Function OSToString(OS: TOS) : String;
|
Function OSToString(OS: TOS) : String;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Result:=LowerCase(GetenumName(TypeInfo(TOS),Ord(OS)));
|
Result:=LowerCase(GetenumName(TypeInfo(TOS),Ord(OS)));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function OSesToString(OSes: TOSes) : String;
|
|
||||||
|
|
||||||
|
Function OSesToString(OSes: TOSes) : String;
|
||||||
begin
|
begin
|
||||||
Result:=LowerCase(SetToString(PtypeInfo(TypeInfo(TOSes)),Integer(OSes),False));
|
Result:=LowerCase(SetToString(PtypeInfo(TypeInfo(TOSes)),Integer(OSes),False));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function CPUToString(CPU: TCPU) : String;
|
|
||||||
|
|
||||||
|
Function CPUToString(CPU: TCPU) : String;
|
||||||
begin
|
begin
|
||||||
Result:=LowerCase(GetenumName(TypeInfo(TCPU),Ord(CPU)));
|
Result:=LowerCase(GetenumName(TypeInfo(TCPU),Ord(CPU)));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function CPUSToString(CPUS: TCPUS) : String;
|
|
||||||
|
|
||||||
|
Function CPUSToString(CPUS: TCPUS) : String;
|
||||||
begin
|
begin
|
||||||
Result:=LowerCase(SetToString(PTypeInfo(TypeInfo(TCPUS)),Integer(CPUS),False));
|
Result:=LowerCase(SetToString(PTypeInfo(TypeInfo(TCPUS)),Integer(CPUS),False));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function StringToOS(S : String) : TOS;
|
|
||||||
|
|
||||||
|
Function StringToOS(S : String) : TOS;
|
||||||
Var
|
Var
|
||||||
I : Integer;
|
I : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
I:=GetEnumValue(TypeInfo(TOS),S);
|
I:=GetEnumValue(TypeInfo(TOS),S);
|
||||||
if (I=-1) then
|
if (I=-1) then
|
||||||
@ -335,16 +330,14 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
Function OSesToString(S : String) : TOSes;
|
Function OSesToString(S : String) : TOSes;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Result:=TOSes(StringToSet(PTypeInfo(TypeInfo(TOSes)),S));
|
Result:=TOSes(StringToSet(PTypeInfo(TypeInfo(TOSes)),S));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function StringToCPU(S : String) : TCPU;
|
|
||||||
|
|
||||||
|
Function StringToCPU(S : String) : TCPU;
|
||||||
Var
|
Var
|
||||||
I : Integer;
|
I : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
I:=GetEnumValue(TypeInfo(TCPU),S);
|
I:=GetEnumValue(TypeInfo(TCPU),S);
|
||||||
if (I=-1) then
|
if (I=-1) then
|
||||||
@ -352,23 +345,22 @@ begin
|
|||||||
Result:=TCPU(I);
|
Result:=TCPU(I);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function StringToCPUS(S : String) : TCPUS;
|
|
||||||
|
|
||||||
|
Function StringToCPUS(S : String) : TCPUS;
|
||||||
begin
|
begin
|
||||||
Result:=TCPUS(StringToSet(PTypeInfo(TypeInfo(TCPUS)),S));
|
Result:=TCPUS(StringToSet(PTypeInfo(TypeInfo(TCPUS)),S));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function MakeTargetString(CPU : TCPU;OS: TOS) : String;
|
|
||||||
|
|
||||||
|
Function MakeTargetString(CPU : TCPU;OS: TOS) : String;
|
||||||
begin
|
begin
|
||||||
Result:=CPUToString(CPU)+'-'+OSToString(OS);
|
Result:=CPUToString(CPU)+'-'+OSToString(OS);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure StringToCPUOS(S : String; Var CPU : TCPU; Var OS: TOS);
|
|
||||||
|
|
||||||
|
Procedure StringToCPUOS(S : String; Var CPU : TCPU; Var OS: TOS);
|
||||||
Var
|
Var
|
||||||
P : integer;
|
P : integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
P:=Pos('-',S);
|
P:=Pos('-',S);
|
||||||
If (P=0) then
|
If (P=0) then
|
||||||
@ -388,18 +380,18 @@ begin
|
|||||||
Result:=Format('%d.%d.%d-%d',[Major,Minor,Micro,Build]);
|
Result:=Format('%d.%d.%d-%d',[Major,Minor,Micro,Build]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TFPVersion.GetEmpty: Boolean;
|
function TFPVersion.GetEmpty: Boolean;
|
||||||
begin
|
begin
|
||||||
Result:=(Major=0) and (Minor=0) and (Micro=0) and (Build=0);
|
Result:=(Major=0) and (Minor=0) and (Micro=0) and (Build=0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPVersion.SetAsString(const AValue: String);
|
procedure TFPVersion.SetAsString(const AValue: String);
|
||||||
|
|
||||||
Function NextDigit(sep : Char; var V : string) : integer;
|
Function NextDigit(sep : Char; var V : string) : integer;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
P : Integer;
|
P : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
P:=Pos(Sep,V);
|
P:=Pos(Sep,V);
|
||||||
If (P=0) then
|
If (P=0) then
|
||||||
@ -425,6 +417,7 @@ begin
|
|||||||
Build:=NextDigit(#0,V);
|
Build:=NextDigit(#0,V);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPVersion.Clear;
|
procedure TFPVersion.Clear;
|
||||||
begin
|
begin
|
||||||
Micro:=0;
|
Micro:=0;
|
||||||
@ -433,11 +426,10 @@ begin
|
|||||||
Build:=0;
|
Build:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPVersion.Assign(Source: TPersistent);
|
|
||||||
|
|
||||||
|
procedure TFPVersion.Assign(Source: TPersistent);
|
||||||
Var
|
Var
|
||||||
V : TFPVersion;
|
V : TFPVersion;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if Source is TFPVersion then
|
if Source is TFPVersion then
|
||||||
begin
|
begin
|
||||||
@ -451,6 +443,7 @@ begin
|
|||||||
inherited Assign(Source);
|
inherited Assign(Source);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TFPVersion.CompareVersion(AVersion: TFPVersion): Integer;
|
function TFPVersion.CompareVersion(AVersion: TFPVersion): Integer;
|
||||||
begin
|
begin
|
||||||
Result:=Major-AVersion.Major;
|
Result:=Major-AVersion.Major;
|
||||||
@ -466,6 +459,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TFPVersion.SameVersion(AVersion: TFPVersion): Boolean;
|
function TFPVersion.SameVersion(AVersion: TFPVersion): Boolean;
|
||||||
begin
|
begin
|
||||||
Result:=CompareVersion(AVersion)=0;
|
Result:=CompareVersion(AVersion)=0;
|
||||||
@ -480,10 +474,6 @@ begin
|
|||||||
FVersion.Assign(AValue);
|
FVersion.Assign(AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function TFPPackage.CreateDependencies : TFPDependencies;
|
|
||||||
begin
|
|
||||||
Result:=TFPDependencies.Create(TFPDependency);
|
|
||||||
end;
|
|
||||||
|
|
||||||
constructor TFPPackage.Create(ACollection: TCollection);
|
constructor TFPPackage.Create(ACollection: TCollection);
|
||||||
begin
|
begin
|
||||||
@ -492,6 +482,7 @@ begin
|
|||||||
FInstalledVersion:=TFPVersion.Create;
|
FInstalledVersion:=TFPVersion.Create;
|
||||||
FOSes:=AllOSes;
|
FOSes:=AllOSes;
|
||||||
FCPUs:=AllCPUs;
|
FCPUs:=AllCPUs;
|
||||||
|
FDependencies:=TFPDependencies.Create(TFPDependency);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -503,8 +494,8 @@ begin
|
|||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPPackage.SetName(const AValue: String);
|
|
||||||
|
|
||||||
|
procedure TFPPackage.SetName(const AValue: String);
|
||||||
begin
|
begin
|
||||||
If (AValue<>FName) and (AValue<>'') then
|
If (AValue<>FName) and (AValue<>'') then
|
||||||
If (Collection<>Nil) and (Collection is TFPPackages) then
|
If (Collection<>Nil) and (Collection is TFPPackages) then
|
||||||
@ -515,17 +506,6 @@ begin
|
|||||||
FName:=AValue;
|
FName:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TFPPackage.GetDependencies: TFPDependencies;
|
|
||||||
begin
|
|
||||||
If Not Assigned(FDependencies) then
|
|
||||||
FDependencies:=CreateDependencies;
|
|
||||||
Result:=FDependencies;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TFPPackage.GetHasDependencies: Boolean;
|
|
||||||
begin
|
|
||||||
Result:=(Dependencies<>nil) and (FDependencies.Count>0);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TFPPackage.GetFileName: String;
|
function TFPPackage.GetFileName: String;
|
||||||
var
|
var
|
||||||
@ -540,14 +520,13 @@ begin
|
|||||||
Result:=FFileName;
|
Result:=FFileName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPPackage.LoadFromStream(Stream: TStream; Streamversion : Integer);
|
|
||||||
|
|
||||||
|
procedure TFPPackage.LoadFromStream(Stream: TStream; Streamversion : Integer);
|
||||||
Var
|
Var
|
||||||
B : Boolean;
|
B : Boolean;
|
||||||
O : TOSes;
|
O : TOSes;
|
||||||
C : TCPUs;
|
C : TCPUs;
|
||||||
I,J,Count : Integer;
|
I,J,Count : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Version.AsString:=ReadString(Stream);
|
Version.AsString:=ReadString(Stream);
|
||||||
Name:=ReadString(Stream);
|
Name:=ReadString(Stream);
|
||||||
@ -575,22 +554,18 @@ begin
|
|||||||
Include(C,TCPU(J));
|
Include(C,TCPU(J));
|
||||||
end;
|
end;
|
||||||
CPUS:=C;
|
CPUS:=C;
|
||||||
FreeAndNil(FDependencies);
|
FDependencies.Clear;
|
||||||
B:=ReadBoolean(Stream);
|
B:=ReadBoolean(Stream);
|
||||||
If B then
|
If B then
|
||||||
begin
|
|
||||||
FDependencies:=CreateDependencies;
|
|
||||||
FDependencies.LoadFromStream(Stream);
|
FDependencies.LoadFromStream(Stream);
|
||||||
end
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPPackage.SaveToStream(Stream: TStream);
|
|
||||||
|
|
||||||
|
procedure TFPPackage.SaveToStream(Stream: TStream);
|
||||||
Var
|
Var
|
||||||
Count : Integer;
|
Count : Integer;
|
||||||
O : TOS;
|
O : TOS;
|
||||||
C : TCPU;
|
C : TCPU;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
WriteString(Stream,Version.AsString);
|
WriteString(Stream,Version.AsString);
|
||||||
WriteString(Stream,Name);
|
WriteString(Stream,Name);
|
||||||
@ -619,16 +594,15 @@ begin
|
|||||||
For C:=Low(TCPU) to High(TCPU) do
|
For C:=Low(TCPU) to High(TCPU) do
|
||||||
If C in CPUS then
|
If C in CPUS then
|
||||||
WriteString(Stream,GetEnumName(TypeInfo(TCPU),Ord(C)));
|
WriteString(Stream,GetEnumName(TypeInfo(TCPU),Ord(C)));
|
||||||
WriteBoolean(Stream,HasDependencies);
|
WriteBoolean(Stream,FDependencies.Count>0);
|
||||||
If HasDependencies then
|
If FDependencies.Count>0 then
|
||||||
FDependencies.SaveToStream(Stream);
|
FDependencies.SaveToStream(Stream);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPPackage.Assign(Source: TPersistent);
|
|
||||||
|
|
||||||
|
procedure TFPPackage.Assign(Source: TPersistent);
|
||||||
Var
|
Var
|
||||||
P : TFPPackage;
|
P : TFPPackage;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if Source is TFPPackage then
|
if Source is TFPPackage then
|
||||||
begin
|
begin
|
||||||
@ -641,22 +615,21 @@ begin
|
|||||||
Description:=P.Description;
|
Description:=P.Description;
|
||||||
ExternalURL:=P.ExternalURL;
|
ExternalURL:=P.ExternalURL;
|
||||||
FileName:=P.FileName;
|
FileName:=P.FileName;
|
||||||
InstalledVersion:=P.Installedversion;
|
InstalledVersion.Assign(P.Installedversion);
|
||||||
If P.HasDependencies then
|
Dependencies.Clear;
|
||||||
Dependencies.Assign(P.Dependencies)
|
Dependencies.Assign(P.Dependencies);
|
||||||
else
|
|
||||||
FreeAndNil(FDependencies);
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
inherited Assign(Source);
|
inherited Assign(Source);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TFPPackage.AddDependency(const APackageName: String;
|
|
||||||
AMinVersion: String): TFPDependency;
|
function TFPPackage.AddDependency(const APackageName: String;AMinVersion: String): TFPDependency;
|
||||||
begin
|
begin
|
||||||
Result:=Dependencies.AddDependency(APackageName,AMinVersion);
|
Result:=Dependencies.AddDependency(APackageName,AMinVersion);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TFPPackages }
|
{ TFPPackages }
|
||||||
|
|
||||||
function TFPPackages.GetPackage(Index : Integer): TFPPackage;
|
function TFPPackages.GetPackage(Index : Integer): TFPPackage;
|
||||||
@ -839,13 +812,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$ifdef STATUSFILE}
|
||||||
procedure TFPRepository.LoadStatusFromStream(Stream: TStream);
|
procedure TFPRepository.LoadStatusFromStream(Stream: TStream);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
L : TStrings;
|
L : TStrings;
|
||||||
I : Integer;
|
I : Integer;
|
||||||
N,V : String;
|
N,V : String;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
L:=TStringList.Create;
|
L:=TStringList.Create;
|
||||||
Try
|
Try
|
||||||
@ -861,12 +833,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPRepository.SaveStatusToStream(Stream: TStream);
|
|
||||||
|
|
||||||
|
procedure TFPRepository.SaveStatusToStream(Stream: TStream);
|
||||||
Var
|
Var
|
||||||
L : TStrings;
|
L : TStrings;
|
||||||
I : Integer;
|
I : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
L:=TStringList.Create;
|
L:=TStringList.Create;
|
||||||
Try
|
Try
|
||||||
@ -880,11 +851,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPRepository.LoadStatusFromFile(const AFileName: String);
|
|
||||||
|
|
||||||
|
procedure TFPRepository.LoadStatusFromFile(const AFileName: String);
|
||||||
Var
|
Var
|
||||||
F : TFileStream;
|
F : TFileStream;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
F:=TFileStream.Create(AFileName,fmOpenRead);
|
F:=TFileStream.Create(AFileName,fmOpenRead);
|
||||||
Try
|
Try
|
||||||
@ -894,11 +864,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPRepository.SaveStatusToFile(const AFileName: String);
|
|
||||||
|
|
||||||
|
procedure TFPRepository.SaveStatusToFile(const AFileName: String);
|
||||||
Var
|
Var
|
||||||
F : TFileStream;
|
F : TFileStream;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
If FileExists(AFileName) and BackupFiles then
|
If FileExists(AFileName) and BackupFiles then
|
||||||
BackupFile(AFileName);
|
BackupFile(AFileName);
|
||||||
@ -909,52 +878,58 @@ begin
|
|||||||
F.Free;
|
F.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif STATUSFILE}
|
||||||
|
|
||||||
|
|
||||||
function TFPRepository.IndexOfPackage(const APackageName: String): Integer;
|
function TFPRepository.IndexOfPackage(const APackageName: String): Integer;
|
||||||
begin
|
begin
|
||||||
Result:=FPackages.IndexOfPackage(APackageName);
|
Result:=FPackages.IndexOfPackage(APackageName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TFPRepository.FindPackage(const APackageName: String): TFPPackage;
|
function TFPRepository.FindPackage(const APackageName: String): TFPPackage;
|
||||||
begin
|
begin
|
||||||
Result:=FPackages.FindPackage(APackageName);
|
Result:=FPackages.FindPackage(APackageName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TFPRepository.PackageByName(const APackageName: String): TFPPackage;
|
function TFPRepository.PackageByName(const APackageName: String): TFPPackage;
|
||||||
begin
|
begin
|
||||||
Result:=FPackages.PackageByName(APackageName);
|
Result:=FPackages.PackageByName(APackageName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPRepository.RemovePackage(const APackageName: string);
|
procedure TFPRepository.RemovePackage(const APackageName: string);
|
||||||
begin
|
begin
|
||||||
PackageByName(APackageName).Free;
|
PackageByName(APackageName).Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPRepository.DeletePackage(Index : Integer);
|
procedure TFPRepository.DeletePackage(Index : Integer);
|
||||||
begin
|
begin
|
||||||
GetPackage(Index).Free;
|
GetPackage(Index).Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TFPRepository.AddPackage(const APackageName: string): TFPPackage;
|
|
||||||
|
|
||||||
|
function TFPRepository.AddPackage(const APackageName: string): TFPPackage;
|
||||||
begin
|
begin
|
||||||
Result:=FPackages.AddPackage(APackageName);
|
Result:=FPackages.AddPackage(APackageName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPRepository.DoGetPackageDependencies(const APackageName: String;
|
|
||||||
List: TStringList; Level: Integer);
|
procedure TFPRepository.DoGetPackageDependencies(const APackageName: String; List: TStringList; Level: Integer);
|
||||||
Var
|
Var
|
||||||
P : TFPPackage;
|
P : TFPPackage;
|
||||||
D2,D1 : TFPDependency;
|
D2,D1 : TFPDependency;
|
||||||
i,J : Integer;
|
i,J : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// If too many levels, bail out
|
// If too many levels, bail out
|
||||||
If (Level>FMaxDependencyLevel) then
|
If (Level>FMaxDependencyLevel) then
|
||||||
Raise EPackage.CreateFmt(SErrMaxLevelExceeded,[Level,APackageName]);
|
Raise EPackage.CreateFmt(SErrMaxLevelExceeded,[Level,APackageName]);
|
||||||
// Check if it is a known package.
|
// Check if it is a known package.
|
||||||
P:=FindPackage(APackageName);
|
P:=FindPackage(APackageName);
|
||||||
If Assigned(P) and P.HasDependencies then
|
If not Assigned(P) then
|
||||||
|
exit;
|
||||||
For I:=0 to P.Dependencies.Count-1 do
|
For I:=0 to P.Dependencies.Count-1 do
|
||||||
begin
|
begin
|
||||||
D1:=P.Dependencies[i];
|
D1:=P.Dependencies[i];
|
||||||
@ -979,13 +954,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPRepository.GetPackageDependencies(const APackageName: String;
|
|
||||||
List: TObjectList; Recurse: Boolean);
|
|
||||||
|
|
||||||
|
procedure TFPRepository.GetPackageDependencies(const APackageName: String; List: TObjectList; Recurse: Boolean);
|
||||||
Var
|
Var
|
||||||
L : TStringList;
|
L : TStringList;
|
||||||
I : Integer;
|
I : Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
L:=TStringList.Create;
|
L:=TStringList.Create;
|
||||||
Try
|
Try
|
||||||
@ -1007,6 +980,7 @@ begin
|
|||||||
FMinVersion.Assign(AValue);
|
FMinVersion.Assign(AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
constructor TFPDependency.Create(ACollection: TCollection);
|
constructor TFPDependency.Create(ACollection: TCollection);
|
||||||
begin
|
begin
|
||||||
inherited Create(ACollection);
|
inherited Create(ACollection);
|
||||||
@ -1015,37 +989,45 @@ begin
|
|||||||
FCPUs:=AllCPUs;
|
FCPUs:=AllCPUs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
destructor TFPDependency.Destroy;
|
destructor TFPDependency.Destroy;
|
||||||
begin
|
begin
|
||||||
FreeAndNil(FMinVersion);
|
FreeAndNil(FMinVersion);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPDependency.LoadFromStream(Stream: TStream; Streamversion: Integer
|
|
||||||
);
|
procedure TFPDependency.LoadFromStream(Stream: TStream; Streamversion: Integer);
|
||||||
begin
|
begin
|
||||||
PackageName:=ReadString(Stream);
|
PackageName:=ReadString(Stream);
|
||||||
MinVersion.AsString:=ReadString(Stream)
|
MinVersion.AsString:=ReadString(Stream)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPDependency.SaveToStream(Stream: TStream);
|
procedure TFPDependency.SaveToStream(Stream: TStream);
|
||||||
begin
|
begin
|
||||||
WriteString(Stream,PackageName);
|
WriteString(Stream,PackageName);
|
||||||
WriteString(Stream,MinVersion.AsString);
|
WriteString(Stream,MinVersion.AsString);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPDependency.Assign(Source: TPersistent);
|
procedure TFPDependency.Assign(Source: TPersistent);
|
||||||
|
var
|
||||||
|
S : TFPDependency;
|
||||||
begin
|
begin
|
||||||
If Source is TFPDependency then
|
If Source is TFPDependency then
|
||||||
With Source as TFPDependency do
|
|
||||||
begin
|
begin
|
||||||
Self.PackageName:=PackageName;
|
S:=Source as TFPDependency;
|
||||||
Self.MinVersion:=MinVersion;
|
FPackageName:=S.PackageName;
|
||||||
|
FMinVersion.Assign(S.MinVersion);
|
||||||
|
FOSes:=S.OSes;
|
||||||
|
FCPUs:=S.CPUs;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
inherited Assign(Source);
|
inherited Assign(Source);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TFPDependencies }
|
{ TFPDependencies }
|
||||||
|
|
||||||
function TFPDependencies.GetDependency(Index : Integer): TFPDependency;
|
function TFPDependencies.GetDependency(Index : Integer): TFPDependency;
|
||||||
@ -1053,12 +1035,13 @@ begin
|
|||||||
Result:=TFPDependency(Items[Index]);
|
Result:=TFPDependency(Items[Index]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPDependencies.SetDependency(Index : Integer;
|
|
||||||
const AValue: TFPDependency);
|
procedure TFPDependencies.SetDependency(Index : Integer; const AValue: TFPDependency);
|
||||||
begin
|
begin
|
||||||
Items[Index]:=AValue;
|
Items[Index]:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TFPDependencies.AddDependency(const APackageName: String; const AMinVersion: String): TFPDependency;
|
function TFPDependencies.AddDependency(const APackageName: String; const AMinVersion: String): TFPDependency;
|
||||||
begin
|
begin
|
||||||
Result:=Add as TFPDependency;
|
Result:=Add as TFPDependency;
|
||||||
@ -1067,6 +1050,7 @@ begin
|
|||||||
Result.MinVersion.AsString:=AMinVersion;
|
Result.MinVersion.AsString:=AMinVersion;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TFPMirror }
|
{ TFPMirror }
|
||||||
|
|
||||||
constructor TFPMirror.Create(ACollection: TCollection);
|
constructor TFPMirror.Create(ACollection: TCollection);
|
||||||
|
@ -327,7 +327,7 @@ begin
|
|||||||
OSesToXML(P.OSes,XML,Result);
|
OSesToXML(P.OSes,XML,Result);
|
||||||
if P.CPUs<>AllCPUs then
|
if P.CPUs<>AllCPUs then
|
||||||
CPUsToXML(P.CPUs,XML,Result);
|
CPUsToXML(P.CPUs,XML,Result);
|
||||||
If P.HasDependencies then
|
If P.Dependencies.Count>0 then
|
||||||
DependenciesToXML(P.Dependencies,XML,Result);
|
DependenciesToXML(P.Dependencies,XML,Result);
|
||||||
Except
|
Except
|
||||||
Parent.RemoveChild(Result);
|
Parent.RemoveChild(Result);
|
||||||
|
@ -207,10 +207,20 @@ end;
|
|||||||
function TCommandCompile.Execute(const Args:TActionArgs):boolean;
|
function TCommandCompile.Execute(const Args:TActionArgs):boolean;
|
||||||
begin
|
begin
|
||||||
if assigned(CurrentPackage) then
|
if assigned(CurrentPackage) then
|
||||||
|
begin
|
||||||
|
// For local files we need the information inside the zip to get the
|
||||||
|
// dependencies
|
||||||
|
if CurrentPackage.IsLocalPackage then
|
||||||
|
begin
|
||||||
|
ExecuteAction(CurrentPackage,'unzip',Args);
|
||||||
|
ExecuteAction(CurrentPackage,'installdependencies',Args);
|
||||||
|
end
|
||||||
|
else
|
||||||
begin
|
begin
|
||||||
ExecuteAction(CurrentPackage,'installdependencies',Args);
|
ExecuteAction(CurrentPackage,'installdependencies',Args);
|
||||||
ExecuteAction(CurrentPackage,'unzip',Args);
|
ExecuteAction(CurrentPackage,'unzip',Args);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
ExecuteAction(CurrentPackage,'fpmakecompile',Args);
|
ExecuteAction(CurrentPackage,'fpmakecompile',Args);
|
||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
@ -219,10 +229,20 @@ end;
|
|||||||
function TCommandBuild.Execute(const Args:TActionArgs):boolean;
|
function TCommandBuild.Execute(const Args:TActionArgs):boolean;
|
||||||
begin
|
begin
|
||||||
if assigned(CurrentPackage) then
|
if assigned(CurrentPackage) then
|
||||||
|
begin
|
||||||
|
// For local files we need the information inside the zip to get the
|
||||||
|
// dependencies
|
||||||
|
if CurrentPackage.IsLocalPackage then
|
||||||
|
begin
|
||||||
|
ExecuteAction(CurrentPackage,'unzip',Args);
|
||||||
|
ExecuteAction(CurrentPackage,'installdependencies',Args);
|
||||||
|
end
|
||||||
|
else
|
||||||
begin
|
begin
|
||||||
ExecuteAction(CurrentPackage,'installdependencies',Args);
|
ExecuteAction(CurrentPackage,'installdependencies',Args);
|
||||||
ExecuteAction(CurrentPackage,'unzip',Args);
|
ExecuteAction(CurrentPackage,'unzip',Args);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
ExecuteAction(CurrentPackage,'fpmakebuild',Args);
|
ExecuteAction(CurrentPackage,'fpmakebuild',Args);
|
||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
@ -257,14 +277,26 @@ end;
|
|||||||
function TCommandInstallDependencies.Execute(const Args:TActionArgs):boolean;
|
function TCommandInstallDependencies.Execute(const Args:TActionArgs):boolean;
|
||||||
var
|
var
|
||||||
i : Integer;
|
i : Integer;
|
||||||
|
MissingDependency,
|
||||||
D : TFPDependency;
|
D : TFPDependency;
|
||||||
|
P,
|
||||||
DepPackage : TFPPackage;
|
DepPackage : TFPPackage;
|
||||||
L : TStringList;
|
L : TStringList;
|
||||||
status : string;
|
status : string;
|
||||||
begin
|
begin
|
||||||
if not assigned(CurrentPackage) then
|
if not assigned(CurrentPackage) then
|
||||||
Error(SErrNoPackageSpecified);
|
Error(SErrNoPackageSpecified);
|
||||||
// List dependencies
|
// Load dependencies for local packages
|
||||||
|
if CurrentPackage.IsLocalPackage then
|
||||||
|
begin
|
||||||
|
ExecuteAction(CurrentPackage,'fpmakemanifest',Args);
|
||||||
|
P:=LoadPackageManifest(ManifestFileName);
|
||||||
|
// Update CurrentPackage
|
||||||
|
CurrentPackage.Assign(P);
|
||||||
|
CurrentPackage.IsLocalPackage:=true;
|
||||||
|
end;
|
||||||
|
// Find and List dependencies
|
||||||
|
MissingDependency:=nil;
|
||||||
L:=TStringList.Create;
|
L:=TStringList.Create;
|
||||||
for i:=0 to CurrentPackage.Dependencies.Count-1 do
|
for i:=0 to CurrentPackage.Dependencies.Count-1 do
|
||||||
begin
|
begin
|
||||||
@ -278,23 +310,31 @@ begin
|
|||||||
(DepPackage.InstalledVersion.CompareVersion(D.MinVersion)<0) then
|
(DepPackage.InstalledVersion.CompareVersion(D.MinVersion)<0) then
|
||||||
begin
|
begin
|
||||||
if DepPackage.Version.CompareVersion(D.MinVersion)<0 then
|
if DepPackage.Version.CompareVersion(D.MinVersion)<0 then
|
||||||
status:='Not Available!'
|
begin
|
||||||
|
status:='Not Available!';
|
||||||
|
MissingDependency:=D;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
|
begin
|
||||||
status:='Updating';
|
status:='Updating';
|
||||||
L.Add(DepPackage.Name);
|
L.Add(DepPackage.Name);
|
||||||
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
status:='OK';
|
status:='OK';
|
||||||
Log(vlDebug,SDbgPackageDependency,
|
Log(vlInfo,SLogPackageDependency,
|
||||||
[D.PackageName,D.MinVersion.AsString,DepPackage.InstalledVersion.AsString,DepPackage.Version.AsString,status]);
|
[D.PackageName,D.MinVersion.AsString,DepPackage.InstalledVersion.AsString,DepPackage.Version.AsString,status]);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Log(vlDebug,SDbgPackageDependencyOtherTarget,[D.PackageName,MakeTargetString(CompilerOptions.CompilerCPU,CompilerOptions.CompilerOS)]);
|
||||||
end;
|
end;
|
||||||
end;
|
// Give error on first missing dependency
|
||||||
|
if assigned(MissingDependency) then
|
||||||
|
Error(SErrNoPackageAvailable,[MissingDependency.PackageName,MissingDependency.MinVersion.AsString]);
|
||||||
// Install needed updates
|
// Install needed updates
|
||||||
for i:=0 to L.Count-1 do
|
for i:=0 to L.Count-1 do
|
||||||
begin
|
begin
|
||||||
DepPackage:=CurrentRepository.PackageByName(L[i]);
|
DepPackage:=CurrentRepository.PackageByName(L[i]);
|
||||||
// if DepPackage.Version.CompareVersion(D.MinVersion)<0 then
|
|
||||||
// Error(SErrNoPackageAvailable,[D.PackageName,D.MinVersion.AsString]);
|
|
||||||
ExecuteAction(DepPackage,'install');
|
ExecuteAction(DepPackage,'install');
|
||||||
end;
|
end;
|
||||||
FreeAndNil(L);
|
FreeAndNil(L);
|
||||||
|
@ -72,14 +72,15 @@ Resourcestring
|
|||||||
SLogFPMKUnitDepTooOld = 'Minimum version of %s is not installed, using internal fpmkunit with limited functionality';
|
SLogFPMKUnitDepTooOld = 'Minimum version of %s is not installed, using internal fpmkunit with limited functionality';
|
||||||
SLogSelectedMirror = 'Selected mirror "%s"';
|
SLogSelectedMirror = 'Selected mirror "%s"';
|
||||||
SLogUpgradingConfig = 'Configuration file "%s" is updated with new configuration settings';
|
SLogUpgradingConfig = 'Configuration file "%s" is updated with new configuration settings';
|
||||||
SLogPackageMultipleLocations = 'Multiple installations found for package %s, using installation "%s"';
|
SLogPackageDependency = 'Dependency on package %s %s, installed %s, available %s (%s)';
|
||||||
|
|
||||||
SDbgFound = 'Found';
|
SDbgFound = 'Found';
|
||||||
SDbgNotFound = 'Not Found';
|
SDbgNotFound = 'Not Found';
|
||||||
SDbgDirectoryExists = 'Directory "%s" %s';
|
SDbgDirectoryExists = 'Directory "%s" %s';
|
||||||
SDbgFileExists = 'File "%s" %s';
|
SDbgFileExists = 'File "%s" %s';
|
||||||
SDbgBackupFile = 'Creating Backup File "%s"';
|
SDbgBackupFile = 'Creating Backup File "%s"';
|
||||||
SDbgPackageDependency = 'Dependency on package %s %s, installed %s, available %s (%s)';
|
SDbgPackageMultipleLocations = 'Multiple installations found for package %s, using installation "%s"';
|
||||||
|
SDbgPackageDependencyOtherTarget = 'Dependency on package %s is not for %s';
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -502,7 +502,7 @@ begin
|
|||||||
Res:=R.IndexOfName(N)<>-1;
|
Res:=R.IndexOfName(N)<>-1;
|
||||||
GetOSCPU(V,OS,CPU);
|
GetOSCPU(V,OS,CPU);
|
||||||
Pre[1]:=Upcase(Pre[1]);
|
Pre[1]:=Upcase(Pre[1]);
|
||||||
Src.Add(' T:=P.Targets.Add'+Pre+'('''+Prefix+N+''');');
|
Src.Add(' T:=P.Targets.Add'+Pre+'('''+Prefix+N+'.pp'');');
|
||||||
If (CPU<>'') then
|
If (CPU<>'') then
|
||||||
Src.Add(' T.CPU:=['+CPU+'];');
|
Src.Add(' T.CPU:=['+CPU+'];');
|
||||||
If (OS<>'') then
|
If (OS<>'') then
|
||||||
|
@ -45,7 +45,8 @@ Type
|
|||||||
FFPMakeCompilerConfig : String;
|
FFPMakeCompilerConfig : String;
|
||||||
// Parameter options
|
// Parameter options
|
||||||
FCompilerConfig : String;
|
FCompilerConfig : String;
|
||||||
FInstallGlobal : Boolean;
|
FInstallGlobal,
|
||||||
|
FRecoveryMode : Boolean;
|
||||||
function GetOptString(Index: integer): String;
|
function GetOptString(Index: integer): String;
|
||||||
procedure SetOptString(Index: integer; const AValue: String);
|
procedure SetOptString(Index: integer; const AValue: String);
|
||||||
Public
|
Public
|
||||||
@ -72,6 +73,7 @@ Type
|
|||||||
// Parameters
|
// Parameters
|
||||||
Property CompilerConfig : String Read FCompilerConfig Write FCompilerConfig;
|
Property CompilerConfig : String Read FCompilerConfig Write FCompilerConfig;
|
||||||
Property InstallGlobal : Boolean Read FInstallGlobal Write FInstallGlobal;
|
Property InstallGlobal : Boolean Read FInstallGlobal Write FInstallGlobal;
|
||||||
|
Property RecoveryMode : Boolean Read FRecoveryMode Write FRecoveryMode;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -258,6 +260,7 @@ begin
|
|||||||
// Parameter defaults
|
// Parameter defaults
|
||||||
FCompilerConfig:=FDefaultCompilerConfig;
|
FCompilerConfig:=FDefaultCompilerConfig;
|
||||||
FInstallGlobal:=False;
|
FInstallGlobal:=False;
|
||||||
|
FRecoveryMode:=False;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@ function GetRemoteRepositoryURL(const AFileName:string):string;
|
|||||||
|
|
||||||
procedure LoadLocalMirrors;
|
procedure LoadLocalMirrors;
|
||||||
procedure LoadLocalRepository;
|
procedure LoadLocalRepository;
|
||||||
|
function LoadOrCreatePackage(const AName:string):TFPPackage;
|
||||||
|
function LoadPackageManifest(const AManifestFN:string):TFPPackage;
|
||||||
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
||||||
procedure CheckFPMakeDependencies;
|
procedure CheckFPMakeDependencies;
|
||||||
procedure ListLocalRepository(all:boolean=false);
|
procedure ListLocalRepository(all:boolean=false);
|
||||||
@ -189,8 +191,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
|
||||||
|
|
||||||
function LoadOrCreatePackage(const AName:string):TFPPackage;
|
function LoadOrCreatePackage(const AName:string):TFPPackage;
|
||||||
begin
|
begin
|
||||||
result:=CurrentRepository.FindPackage(AName);
|
result:=CurrentRepository.FindPackage(AName);
|
||||||
@ -201,6 +201,51 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function LoadPackageManifest(const AManifestFN:string):TFPPackage;
|
||||||
|
var
|
||||||
|
X : TFPXMLRepositoryHandler;
|
||||||
|
i : integer;
|
||||||
|
DoAdd : Boolean;
|
||||||
|
NewP : TFPPackage;
|
||||||
|
NewPackages : TFPPackages;
|
||||||
|
begin
|
||||||
|
result:=nil;
|
||||||
|
NewPackages:=TFPPackages.Create(TFPPackage);
|
||||||
|
X:=TFPXMLRepositoryHandler.Create;
|
||||||
|
try
|
||||||
|
X.LoadFromXml(NewPackages,AManifestFN);
|
||||||
|
// Update or Add packages to repository
|
||||||
|
for i:=0 to NewPackages.Count-1 do
|
||||||
|
begin
|
||||||
|
NewP:=NewPackages[i];
|
||||||
|
DoAdd:=True;
|
||||||
|
result:=CurrentRepository.FindPackage(NewP.Name);
|
||||||
|
if assigned(result) then
|
||||||
|
begin
|
||||||
|
if NewP.Version.CompareVersion(result.Version)<0 then
|
||||||
|
begin
|
||||||
|
Writeln(Format('Ignoring package %s-%s (old %s)',[NewP.Name,NewP.Version.AsString,result.Version.AsString]));
|
||||||
|
DoAdd:=False;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Writeln(Format('Updating package %s-%s (old %s)',[NewP.Name,NewP.Version.AsString,result.Version.AsString]));
|
||||||
|
end
|
||||||
|
else
|
||||||
|
result:=CurrentRepository.PackageCollection.AddPackage(NewP.Name);
|
||||||
|
// Copy contents
|
||||||
|
if DoAdd then
|
||||||
|
result.Assign(NewP);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
X.Free;
|
||||||
|
NewPackages.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
||||||
|
|
||||||
procedure LoadUnitConfigFromFile(APackage:TFPPackage;const AFileName: String);
|
procedure LoadUnitConfigFromFile(APackage:TFPPackage;const AFileName: String);
|
||||||
Var
|
Var
|
||||||
L : TStrings;
|
L : TStrings;
|
||||||
@ -217,7 +262,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
|
|||||||
if not APackage.InstalledVersion.Empty then
|
if not APackage.InstalledVersion.Empty then
|
||||||
begin
|
begin
|
||||||
if showdups then
|
if showdups then
|
||||||
Log(vlInfo,SLogPackageMultipleLocations,[APackage.Name,ExtractFilePath(AFileName)]);
|
Log(vlDebug,SDbgPackageMultipleLocations,[APackage.Name,ExtractFilePath(AFileName)]);
|
||||||
end;
|
end;
|
||||||
Finally
|
Finally
|
||||||
L.Free;
|
L.Free;
|
||||||
@ -292,10 +337,16 @@ var
|
|||||||
P : TFPPackage;
|
P : TFPPackage;
|
||||||
ReqVer : TFPVersion;
|
ReqVer : TFPVersion;
|
||||||
begin
|
begin
|
||||||
|
// Reset availability
|
||||||
|
for i:=1 to FPMKUnitDepCount do
|
||||||
|
FPMKUnitDepAvailable[i]:=false;
|
||||||
|
// Not version check needed in Recovery mode, we always need to use
|
||||||
|
// the internal bootstrap procedure
|
||||||
|
if GlobalOptions.RecoveryMode then
|
||||||
|
exit;
|
||||||
// Check for fpmkunit dependencies
|
// Check for fpmkunit dependencies
|
||||||
for i:=1 to FPMKUnitDepCount do
|
for i:=1 to FPMKUnitDepCount do
|
||||||
begin
|
begin
|
||||||
FPMKUnitDepAvailable[i]:=false;
|
|
||||||
P:=CurrentRepository.FindPackage(FPMKUnitDeps[i].package);
|
P:=CurrentRepository.FindPackage(FPMKUnitDeps[i].package);
|
||||||
if P<>nil then
|
if P<>nil then
|
||||||
begin
|
begin
|
||||||
@ -350,47 +401,6 @@ end;
|
|||||||
|
|
||||||
procedure RebuildRemoteRepository;
|
procedure RebuildRemoteRepository;
|
||||||
|
|
||||||
procedure AddPackage(const AManifestFN:string);
|
|
||||||
var
|
|
||||||
X : TFPXMLRepositoryHandler;
|
|
||||||
i : integer;
|
|
||||||
DoAdd : Boolean;
|
|
||||||
P,NewP : TFPPackage;
|
|
||||||
NewPackages : TFPPackages;
|
|
||||||
begin
|
|
||||||
NewPackages:=TFPPackages.Create(TFPPackage);
|
|
||||||
X:=TFPXMLRepositoryHandler.Create;
|
|
||||||
try
|
|
||||||
X.LoadFromXml(NewPackages,AManifestFN);
|
|
||||||
DeleteFile(ManifestFileName);
|
|
||||||
// Update or Add packages to repository
|
|
||||||
for i:=0 to NewPackages.Count-1 do
|
|
||||||
begin
|
|
||||||
NewP:=NewPackages[i];
|
|
||||||
DoAdd:=True;
|
|
||||||
P:=CurrentRepository.FindPackage(NewP.Name);
|
|
||||||
if assigned(P) then
|
|
||||||
begin
|
|
||||||
if NewP.Version.CompareVersion(P.Version)<0 then
|
|
||||||
begin
|
|
||||||
Writeln(Format('Ignoring package %s-%s (old %s)',[NewP.Name,NewP.Version.AsString,P.Version.AsString]));
|
|
||||||
DoAdd:=False;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Writeln(Format('Updating package %s-%s (old %s)',[NewP.Name,NewP.Version.AsString,P.Version.AsString]));
|
|
||||||
end
|
|
||||||
else
|
|
||||||
P:=CurrentRepository.PackageCollection.AddPackage(NewP.Name);
|
|
||||||
// Copy contents
|
|
||||||
if DoAdd then
|
|
||||||
P.Assign(NewP);
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
X.Free;
|
|
||||||
NewPackages.Free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
ArchiveSL : TStringList;
|
ArchiveSL : TStringList;
|
||||||
@ -422,7 +432,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
{ Load manifest.xml }
|
{ Load manifest.xml }
|
||||||
if FileExists(ManifestFileName) then
|
if FileExists(ManifestFileName) then
|
||||||
AddPackage(ManifestFileName)
|
begin
|
||||||
|
LoadPackageManifest(ManifestFileName);
|
||||||
|
DeleteFile(ManifestFileName);
|
||||||
|
end
|
||||||
else
|
else
|
||||||
Writeln('No manifest found in archive ',ArchiveSL[i]);
|
Writeln('No manifest found in archive ',ArchiveSL[i]);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user