|
@@ -10,24 +10,27 @@ uses
|
|
|
|
|
|
function GetRemoteRepositoryURL(const AFileName:string):string;
|
|
|
|
|
|
-procedure LoadLocalMirrors;
|
|
|
-procedure LoadLocalRepository;
|
|
|
-function LoadOrCreatePackage(const AName:string):TFPPackage;
|
|
|
+procedure LoadLocalAvailableMirrors;
|
|
|
+procedure LoadLocalAvailableRepository;
|
|
|
procedure LoadUnitConfigFromFile(APackage:TFPPackage;const AFileName: String);
|
|
|
-function LoadPackageManifest(const AManifestFN:string):TFPPackage;
|
|
|
+function LoadManifestFromFile(const AManifestFN:string):TFPPackage;
|
|
|
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
|
|
function PackageIsBroken(APackage:TFPPackage):boolean;
|
|
|
function FindBrokenPackages(SL:TStrings):Boolean;
|
|
|
procedure CheckFPMakeDependencies;
|
|
|
-procedure ListLocalRepository(all:boolean=false);
|
|
|
+function PackageInstalledVersionStr(const AName:String):string;
|
|
|
+function PackageAvailableVersionStr(const AName:String):string;
|
|
|
+procedure ListAvailablePackages;
|
|
|
+procedure ListInstalledPackages;
|
|
|
|
|
|
procedure ListRemoteRepository;
|
|
|
procedure RebuildRemoteRepository;
|
|
|
procedure SaveRemoteRepository;
|
|
|
|
|
|
var
|
|
|
- CurrentMirrors : TFPMirrors;
|
|
|
- CurrentRepository : TFPRepository;
|
|
|
+ AvailableMirrors : TFPMirrors;
|
|
|
+ AvailableRepository,
|
|
|
+ InstalledRepository : TFPRepository;
|
|
|
|
|
|
|
|
|
implementation
|
|
@@ -45,14 +48,14 @@ uses
|
|
|
var
|
|
|
CurrentRemoteRepositoryURL : String;
|
|
|
|
|
|
-procedure LoadLocalMirrors;
|
|
|
+procedure LoadLocalAvailableMirrors;
|
|
|
var
|
|
|
S : String;
|
|
|
X : TFPXMLMirrorHandler;
|
|
|
begin
|
|
|
- if assigned(CurrentMirrors) then
|
|
|
- CurrentMirrors.Free;
|
|
|
- CurrentMirrors:=TFPMirrors.Create(TFPMirror);
|
|
|
+ if assigned(AvailableMirrors) then
|
|
|
+ AvailableMirrors.Free;
|
|
|
+ AvailableMirrors:=TFPMirrors.Create(TFPMirror);
|
|
|
|
|
|
// Repository
|
|
|
S:=GlobalOptions.LocalMirrorsFile;
|
|
@@ -63,7 +66,7 @@ begin
|
|
|
X:=TFPXMLMirrorHandler.Create;
|
|
|
With X do
|
|
|
try
|
|
|
- LoadFromXml(CurrentMirrors,S);
|
|
|
+ LoadFromXml(AvailableMirrors,S);
|
|
|
finally
|
|
|
Free;
|
|
|
end;
|
|
@@ -86,22 +89,22 @@ var
|
|
|
begin
|
|
|
Result:='';
|
|
|
M:=nil;
|
|
|
- if assigned(CurrentMirrors) then
|
|
|
+ if assigned(AvailableMirrors) then
|
|
|
begin
|
|
|
// Create array for selection
|
|
|
BucketCnt:=0;
|
|
|
- for i:=0 to CurrentMirrors.Count-1 do
|
|
|
- inc(BucketCnt,CurrentMirrors[i].Weight);
|
|
|
+ for i:=0 to AvailableMirrors.Count-1 do
|
|
|
+ inc(BucketCnt,AvailableMirrors[i].Weight);
|
|
|
// Select random entry
|
|
|
Bucket:=Random(BucketCnt);
|
|
|
M:=nil;
|
|
|
- for i:=0 to CurrentMirrors.Count-1 do
|
|
|
+ for i:=0 to AvailableMirrors.Count-1 do
|
|
|
begin
|
|
|
- for j:=0 to CurrentMirrors[i].Weight-1 do
|
|
|
+ for j:=0 to AvailableMirrors[i].Weight-1 do
|
|
|
begin
|
|
|
if Bucket=0 then
|
|
|
begin
|
|
|
- M:=CurrentMirrors[i];
|
|
|
+ M:=AvailableMirrors[i];
|
|
|
break;
|
|
|
end;
|
|
|
Dec(Bucket);
|
|
@@ -163,55 +166,11 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-procedure LoadLocalRepository;
|
|
|
-var
|
|
|
- S : String;
|
|
|
- X : TFPXMLRepositoryHandler;
|
|
|
-begin
|
|
|
- if assigned(CurrentRepository) then
|
|
|
- CurrentRepository.Free;
|
|
|
- CurrentRepository:=TFPRepository.Create(Nil);
|
|
|
- // Repository
|
|
|
- S:=GlobalOptions.LocalPackagesFile;
|
|
|
- Log(vlDebug,SLogLoadingPackagesFile,[S]);
|
|
|
- if not FileExists(S) then
|
|
|
- exit;
|
|
|
- try
|
|
|
- X:=TFPXMLRepositoryHandler.Create;
|
|
|
- With X do
|
|
|
- try
|
|
|
- LoadFromXml(CurrentRepository,S);
|
|
|
- finally
|
|
|
- Free;
|
|
|
- end;
|
|
|
- except
|
|
|
- on E : Exception do
|
|
|
- begin
|
|
|
- Log(vlError,E.Message);
|
|
|
- Error(SErrCorruptPackagesFile,[S]);
|
|
|
- end;
|
|
|
- end;
|
|
|
-end;
|
|
|
-
|
|
|
-
|
|
|
-function LoadOrCreatePackage(const AName:string):TFPPackage;
|
|
|
-begin
|
|
|
- result:=CurrentRepository.FindPackage(AName);
|
|
|
- if not assigned(result) then
|
|
|
- begin
|
|
|
- result:=CurrentRepository.AddPackage(AName);
|
|
|
- result.IsLocalPackage:=true;
|
|
|
- end;
|
|
|
-end;
|
|
|
-
|
|
|
-
|
|
|
-function LoadPackageManifest(const AManifestFN:string):TFPPackage;
|
|
|
+function LoadManifestFromFile(const AManifestFN:string):TFPPackage;
|
|
|
var
|
|
|
X : TFPXMLRepositoryHandler;
|
|
|
- i : integer;
|
|
|
- DoAdd : Boolean;
|
|
|
- NewP : TFPPackage;
|
|
|
NewPackages : TFPPackages;
|
|
|
+ NewP,P : TFPPackage;
|
|
|
begin
|
|
|
result:=nil;
|
|
|
NewPackages:=TFPPackages.Create(TFPPackage);
|
|
@@ -219,27 +178,19 @@ begin
|
|
|
try
|
|
|
X.LoadFromXml(NewPackages,AManifestFN);
|
|
|
// Update or Add packages to repository
|
|
|
- for i:=0 to NewPackages.Count-1 do
|
|
|
+ if NewPackages.Count=1 then
|
|
|
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);
|
|
|
+ NewP:=NewPackages[0];
|
|
|
+ // Prevent duplicate names
|
|
|
+{ P:=InstalledRepository.FindPackage(NewP.Name);
|
|
|
+ if not assigned(P) then
|
|
|
+ P:=InstalledRepository.AddPackage(NewP.Name); }
|
|
|
+ result:=TFPPackage.Create(nil);
|
|
|
// Copy contents
|
|
|
- if DoAdd then
|
|
|
- result.Assign(NewP);
|
|
|
- end;
|
|
|
+ result.Assign(NewP);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ Error(SErrManifestNoSinglePackage,[AManifestFN]);
|
|
|
finally
|
|
|
X.Free;
|
|
|
NewPackages.Free;
|
|
@@ -262,12 +213,12 @@ begin
|
|
|
{$warning TODO Maybe check also CPU-OS}
|
|
|
// Read fpunits.conf
|
|
|
V:=L.Values['version'];
|
|
|
- APackage.InstalledVersion.AsString:=V;
|
|
|
+ APackage.Version.AsString:=V;
|
|
|
V:=L.Values['checksum'];
|
|
|
if V<>'' then
|
|
|
- APackage.InstalledChecksum:=StrToInt(V)
|
|
|
+ APackage.Checksum:=StrToInt(V)
|
|
|
else
|
|
|
- APackage.InstalledChecksum:=$ffffffff;
|
|
|
+ APackage.Checksum:=$ffffffff;
|
|
|
// Load dependencies
|
|
|
V:=L.Values['depends'];
|
|
|
DepSL:=TStringList.Create;
|
|
@@ -304,13 +255,16 @@ end;
|
|
|
|
|
|
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
|
|
|
|
|
- procedure LogDuplicatePackages(APackage:TFPPackage;const AFileName: String);
|
|
|
+ function AddInstalledPackage(const AName,AFileName: String):TFPPackage;
|
|
|
begin
|
|
|
- // Log packages found in multiple locations (local and global) ?
|
|
|
- if not APackage.InstalledVersion.Empty then
|
|
|
+ result:=InstalledRepository.FindPackage(AName);
|
|
|
+ if not assigned(result) then
|
|
|
+ result:=InstalledRepository.AddPackage(AName)
|
|
|
+ else
|
|
|
begin
|
|
|
+ // Log packages found in multiple locations (local and global) ?
|
|
|
if showdups then
|
|
|
- Log(vlDebug,SDbgPackageMultipleLocations,[APackage.Name,ExtractFilePath(AFileName)]);
|
|
|
+ Log(vlDebug,SDbgPackageMultipleLocations,[result.Name,ExtractFilePath(AFileName)]);
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -323,7 +277,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
|
|
|
Try
|
|
|
ReadIniFile(AFileName,L);
|
|
|
V:=L.Values['version'];
|
|
|
- APackage.InstalledVersion.AsString:=V;
|
|
|
+ APackage.Version.AsString:=V;
|
|
|
Finally
|
|
|
L.Free;
|
|
|
end;
|
|
@@ -347,8 +301,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
|
|
|
UF:=UD+UnitConfigFileName;
|
|
|
if FileExistsLog(UF) then
|
|
|
begin
|
|
|
- P:=LoadOrCreatePackage(SR.Name);
|
|
|
- LogDuplicatePackages(P,UF);
|
|
|
+ P:=AddInstalledPackage(SR.Name,UF);
|
|
|
LoadUnitConfigFromFile(P,UF)
|
|
|
end
|
|
|
else
|
|
@@ -357,8 +310,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
|
|
|
UF:=UD+'Package.fpc';
|
|
|
if FileExistsLog(UF) then
|
|
|
begin
|
|
|
- P:=LoadOrCreatePackage(SR.Name);
|
|
|
- LogDuplicatePackages(P,UF);
|
|
|
+ P:=AddInstalledPackage(SR.Name,UF);
|
|
|
LoadPackagefpcFromFile(P,UF);
|
|
|
end;
|
|
|
end;
|
|
@@ -368,7 +320,9 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
|
|
|
end;
|
|
|
|
|
|
begin
|
|
|
- CurrentRepository.ClearStatus;
|
|
|
+ if assigned(InstalledRepository) then
|
|
|
+ InstalledRepository.Free;
|
|
|
+ InstalledRepository:=TFPRepository.Create(nil);
|
|
|
// First scan the global directory
|
|
|
// The local directory will overwrite the versions
|
|
|
if ACompilerOptions.GlobalUnitDir<>'' then
|
|
@@ -391,11 +345,11 @@ begin
|
|
|
if (CompilerOptions.CompilerOS in D.OSes) and
|
|
|
(CompilerOptions.CompilerCPU in D.CPUs) then
|
|
|
begin
|
|
|
- DepPackage:=CurrentRepository.FindPackage(D.PackageName);
|
|
|
+ DepPackage:=InstalledRepository.FindPackage(D.PackageName);
|
|
|
// Don't stop on missing dependencies
|
|
|
if assigned(DepPackage) then
|
|
|
begin
|
|
|
- if (DepPackage.InstalledChecksum<>D.RequireChecksum) then
|
|
|
+ if (DepPackage.Checksum<>D.RequireChecksum) then
|
|
|
begin
|
|
|
Log(vlInfo,SLogPackageChecksumChanged,[APackage.Name,D.PackageName]);
|
|
|
result:=true;
|
|
@@ -415,15 +369,11 @@ var
|
|
|
P : TFPPackage;
|
|
|
begin
|
|
|
SL.Clear;
|
|
|
- for i:=0 to CurrentRepository.PackageCount-1 do
|
|
|
+ for i:=0 to InstalledRepository.PackageCount-1 do
|
|
|
begin
|
|
|
- P:=CurrentRepository.Packages[i];
|
|
|
- // Process only installed packages
|
|
|
- if not P.InstalledVersion.Empty then
|
|
|
- begin
|
|
|
- if PackageIsBroken(P) then
|
|
|
- SL.Add(P.Name);
|
|
|
- end;
|
|
|
+ P:=InstalledRepository.Packages[i];
|
|
|
+ if PackageIsBroken(P) then
|
|
|
+ SL.Add(P.Name);
|
|
|
end;
|
|
|
Result:=(SL.Count>0);
|
|
|
end;
|
|
@@ -432,7 +382,8 @@ end;
|
|
|
procedure CheckFPMakeDependencies;
|
|
|
var
|
|
|
i : Integer;
|
|
|
- P : TFPPackage;
|
|
|
+ P,AvailP : TFPPackage;
|
|
|
+ AvailVerStr : string;
|
|
|
ReqVer : TFPVersion;
|
|
|
begin
|
|
|
// Reset availability
|
|
@@ -445,13 +396,18 @@ begin
|
|
|
// Check for fpmkunit dependencies
|
|
|
for i:=1 to FPMKUnitDepCount do
|
|
|
begin
|
|
|
- P:=CurrentRepository.FindPackage(FPMKUnitDeps[i].package);
|
|
|
+ P:=InstalledRepository.FindPackage(FPMKUnitDeps[i].package);
|
|
|
if P<>nil then
|
|
|
begin
|
|
|
+ AvailP:=AvailableRepository.FindPackage(FPMKUnitDeps[i].package);
|
|
|
+ if P<>nil then
|
|
|
+ AvailVerStr:=AvailP.Version.AsString
|
|
|
+ else
|
|
|
+ AvailVerStr:='<not available>';
|
|
|
ReqVer:=TFPVersion.Create;
|
|
|
ReqVer.AsString:=FPMKUnitDeps[i].ReqVer;
|
|
|
- Log(vlDebug,SLogFPMKUnitDepVersion,[P.Name,ReqVer.AsString,P.InstalledVersion.AsString,P.Version.AsString]);
|
|
|
- if ReqVer.CompareVersion(P.InstalledVersion)<=0 then
|
|
|
+ Log(vlDebug,SLogFPMKUnitDepVersion,[P.Name,ReqVer.AsString,P.Version.AsString,AvailVerStr]);
|
|
|
+ if ReqVer.CompareVersion(P.Version)<=0 then
|
|
|
FPMKUnitDepAvailable[i]:=true
|
|
|
else
|
|
|
Log(vlDebug,SLogFPMKUnitDepTooOld,[FPMKUnitDeps[i].package]);
|
|
@@ -462,19 +418,102 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-procedure ListLocalRepository(all:boolean=false);
|
|
|
+{*****************************************************************************
|
|
|
+ Local Available Repository
|
|
|
+*****************************************************************************}
|
|
|
+
|
|
|
+procedure LoadLocalAvailableRepository;
|
|
|
+var
|
|
|
+ S : String;
|
|
|
+ X : TFPXMLRepositoryHandler;
|
|
|
+begin
|
|
|
+ if assigned(AvailableRepository) then
|
|
|
+ AvailableRepository.Free;
|
|
|
+ AvailableRepository:=TFPRepository.Create(Nil);
|
|
|
+ // Repository
|
|
|
+ S:=GlobalOptions.LocalPackagesFile;
|
|
|
+ Log(vlDebug,SLogLoadingPackagesFile,[S]);
|
|
|
+ if not FileExists(S) then
|
|
|
+ exit;
|
|
|
+ try
|
|
|
+ X:=TFPXMLRepositoryHandler.Create;
|
|
|
+ With X do
|
|
|
+ try
|
|
|
+ LoadFromXml(AvailableRepository,S);
|
|
|
+ finally
|
|
|
+ Free;
|
|
|
+ end;
|
|
|
+ except
|
|
|
+ on E : Exception do
|
|
|
+ begin
|
|
|
+ Log(vlError,E.Message);
|
|
|
+ Error(SErrCorruptPackagesFile,[S]);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+function PackageAvailableVersionStr(const AName:String):string;
|
|
|
+var
|
|
|
+ P : TFPPackage;
|
|
|
+begin
|
|
|
+ P:=InstalledRepository.FindPackage(AName);
|
|
|
+ if P<>nil then
|
|
|
+ result:=P.Version.AsString
|
|
|
+ else
|
|
|
+ result:='-';
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+function PackageInstalledVersionStr(const AName:String):string;
|
|
|
var
|
|
|
P : TFPPackage;
|
|
|
+begin
|
|
|
+ P:=InstalledRepository.FindPackage(AName);
|
|
|
+ if P<>nil then
|
|
|
+ result:=P.Version.AsString
|
|
|
+ else
|
|
|
+ result:='-';
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+procedure ListAvailablePackages;
|
|
|
+var
|
|
|
+ InstalledP,
|
|
|
+ AvailP : TFPPackage;
|
|
|
i : integer;
|
|
|
SL : TStringList;
|
|
|
begin
|
|
|
SL:=TStringList.Create;
|
|
|
SL.Sorted:=true;
|
|
|
- for i:=0 to CurrentRepository.PackageCount-1 do
|
|
|
+ for i:=0 to AvailableRepository.PackageCount-1 do
|
|
|
begin
|
|
|
- P:=CurrentRepository.Packages[i];
|
|
|
- if all or (P.Version.CompareVersion(P.InstalledVersion)>0) then
|
|
|
- SL.Add(Format('%-20s %-12s %-12s',[P.Name,P.InstalledVersion.AsString,P.Version.AsString]));
|
|
|
+ AvailP:=AvailableRepository.Packages[i];
|
|
|
+ InstalledP:=InstalledRepository.FindPackage(AvailP.Name);
|
|
|
+ if not assigned(InstalledP) or
|
|
|
+ (AvailP.Version.CompareVersion(InstalledP.Version)>0) then
|
|
|
+ SL.Add(Format('%-20s %-12s %-12s',[AvailP.Name,PackageInstalledVersionStr(AvailP.Name),AvailP.Version.AsString]));
|
|
|
+ end;
|
|
|
+ Writeln(Format('%-20s %-12s %-12s',['Name','Installed','Available']));
|
|
|
+ for i:=0 to SL.Count-1 do
|
|
|
+ Writeln(SL[i]);
|
|
|
+ FreeAndNil(SL);
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+procedure ListInstalledPackages;
|
|
|
+var
|
|
|
+ P : TFPPackage;
|
|
|
+ i : integer;
|
|
|
+ SL : TStringList;
|
|
|
+begin
|
|
|
+ SL:=TStringList.Create;
|
|
|
+ SL.Sorted:=true;
|
|
|
+ for i:=0 to InstalledRepository.PackageCount-1 do
|
|
|
+ begin
|
|
|
+ P:=InstalledRepository.Packages[i];
|
|
|
+ SL.Add(Format('%-20s %-12s %-12s',[P.Name,P.Version.AsString,PackageAvailableVersionStr(P.Name)]));
|
|
|
end;
|
|
|
Writeln(Format('%-20s %-12s %-12s',['Name','Installed','Available']));
|
|
|
for i:=0 to SL.Count-1 do
|
|
@@ -487,6 +526,7 @@ end;
|
|
|
Remote Repository
|
|
|
*****************************************************************************}
|
|
|
|
|
|
+
|
|
|
procedure ListRemoteRepository;
|
|
|
var
|
|
|
P : TFPPackage;
|
|
@@ -495,9 +535,9 @@ var
|
|
|
begin
|
|
|
SL:=TStringList.Create;
|
|
|
SL.Sorted:=true;
|
|
|
- for i:=0 to CurrentRepository.PackageCount-1 do
|
|
|
+ for i:=0 to InstalledRepository.PackageCount-1 do
|
|
|
begin
|
|
|
- P:=CurrentRepository.Packages[i];
|
|
|
+ P:=InstalledRepository.Packages[i];
|
|
|
SL.Add(Format('%-20s %-12s %-20s',[P.Name,P.Version.AsString,P.FileName]));
|
|
|
end;
|
|
|
Writeln(Format('%-20s %-12s %-20s',['Name','Available','FileName']));
|
|
@@ -509,14 +549,54 @@ end;
|
|
|
|
|
|
procedure RebuildRemoteRepository;
|
|
|
|
|
|
+ procedure LoadPackageManifest(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);
|
|
|
+ // Update or Add packages to repository
|
|
|
+ for i:=0 to NewPackages.Count-1 do
|
|
|
+ begin
|
|
|
+ NewP:=NewPackages[i];
|
|
|
+ DoAdd:=True;
|
|
|
+ P:=InstalledRepository.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:=InstalledRepository.PackageCollection.AddPackage(NewP.Name);
|
|
|
+ // Copy contents
|
|
|
+ if DoAdd then
|
|
|
+ P.Assign(NewP);
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ X.Free;
|
|
|
+ NewPackages.Free;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
var
|
|
|
i : integer;
|
|
|
ArchiveSL : TStringList;
|
|
|
ManifestSL : TStringList;
|
|
|
begin
|
|
|
- if assigned(CurrentRepository) then
|
|
|
- CurrentRepository.Free;
|
|
|
- CurrentRepository:=TFPRepository.Create(Nil);
|
|
|
+ if assigned(InstalledRepository) then
|
|
|
+ InstalledRepository.Free;
|
|
|
+ InstalledRepository:=TFPRepository.Create(Nil);
|
|
|
try
|
|
|
ManifestSL:=TStringList.Create;
|
|
|
ManifestSL.Add(ManifestFileName);
|
|
@@ -564,7 +644,7 @@ begin
|
|
|
X:=TFPXMLRepositoryHandler.Create;
|
|
|
With X do
|
|
|
try
|
|
|
- SaveToXml(CurrentRepository,'packages.xml');
|
|
|
+ SaveToXml(InstalledRepository,'packages.xml');
|
|
|
finally
|
|
|
Free;
|
|
|
end;
|