123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- unit pkgrepos;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes,SysUtils,
- fprepos;
- procedure LoadLocalRepository;
- procedure LoadLocalStatus;
- procedure SaveLocalStatus;
- procedure LoadFPMakeLocalStatus;
- procedure ListLocalRepository(all:boolean=false);
- procedure ListRemoteRepository;
- procedure RebuildRemoteRepository;
- procedure SaveRemoteRepository;
- var
- CurrentRepository : TFPRepository;
- implementation
- uses
- zipper,
- fpxmlrep,
- pkgglobals,
- pkgoptions,
- pkgmessages;
- {*****************************************************************************
- Local Repository
- *****************************************************************************}
- procedure LoadLocalRepository;
- var
- S : String;
- X : TFPXMLRepositoryHandler;
- begin
- if assigned(CurrentRepository) then
- CurrentRepository.Free;
- CurrentRepository:=TFPRepository.Create(Nil);
- // Repository
- S:=GlobalOptions.LocalPackagesFile;
- Log(vDebug,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(vError,E.Message);
- Error(SErrCorruptPackagesFile,[S]);
- end;
- end;
- end;
- procedure LoadLocalStatus;
- var
- S : String;
- begin
- S:=GlobalOptions.LocalVersionsFile(GlobalOptions.CompilerConfig);
- Log(vDebug,SLogLoadingStatusFile,[S]);
- CurrentRepository.ClearStatus;
- if FileExists(S) then
- CurrentRepository.LoadStatusFromFile(S);
- end;
- procedure SaveLocalStatus;
- var
- S : String;
- begin
- S:=GlobalOptions.LocalVersionsFile(GlobalOptions.CompilerConfig);
- Log(vDebug,SLogSavingStatusFile,[S]);
- CurrentRepository.SaveStatusToFile(S);
- end;
- procedure LoadFPMakeLocalStatus;
- var
- i : Integer;
- S : String;
- P : TFPPackage;
- ReqVer : TFPVersion;
- begin
- S:=GlobalOptions.LocalVersionsFile(GlobalOptions.FPMakeCompilerConfig);
- Log(vDebug,SLogLoadingStatusFile,[S]);
- CurrentRepository.ClearStatus;
- if FileExists(S) then
- CurrentRepository.LoadStatusFromFile(S);
- // Check for fpmkunit dependencies
- for i:=1 to FPMKUnitDepCount do
- begin
- FPMKUnitDepAvailable[i]:=false;
- P:=CurrentRepository.PackageByName(FPMKUnitDeps[i].package);
- if P<>nil then
- begin
- ReqVer:=TFPVersion.Create;
- ReqVer.AsString:=FPMKUnitDeps[i].ReqVer;
- Log(vDebug,SLogFPMKUnitDepVersion,[P.Name,ReqVer.AsString,P.InstalledVersion.AsString,P.Version.AsString]);
- if ReqVer.CompareVersion(P.InstalledVersion)<=0 then
- FPMKUnitDepAvailable[i]:=true
- else
- Log(vDebug,SLogFPMKUnitDepTooOld,[FPMKUnitDeps[i].package]);
- end
- else
- Log(vDebug,SLogFPMKUnitDepTooOld,[FPMKUnitDeps[i].package]);
- end;
- end;
- procedure ListLocalRepository(all:boolean=false);
- var
- P : TFPPackage;
- i : integer;
- begin
- Writeln(Format('%-20s %-12s %-12s',['Name','Installed','Available']));
- for i:=0 to CurrentRepository.PackageCount-1 do
- begin
- P:=CurrentRepository.Packages[i];
- if all or (P.Version.CompareVersion(P.InstalledVersion)>0) then
- begin
- Writeln(Format('%-20s %-12s %-12s',[P.Name,P.InstalledVersion.AsString,P.Version.AsString]));
- end;
- end;
- end;
- {*****************************************************************************
- Remote Repository
- *****************************************************************************}
- procedure ListRemoteRepository;
- var
- P : TFPPackage;
- i : integer;
- begin
- Writeln(Format('%-20s %-12s %-20s',['Name','Available','FileName']));
- for i:=0 to CurrentRepository.PackageCount-1 do
- begin
- P:=CurrentRepository.Packages[i];
- Writeln(Format('%-20s %-12s %-20s',[P.Name,P.Version.AsString,P.FileName]));
- end;
- end;
- procedure RebuildRemoteRepository;
- var
- X : TFPXMLRepositoryHandler;
- i : integer;
- ArchiveSL : TStringList;
- ManifestSL : TStringList;
- begin
- if assigned(CurrentRepository) then
- CurrentRepository.Free;
- CurrentRepository:=TFPRepository.Create(Nil);
- try
- ManifestSL:=TStringList.Create;
- ManifestSL.Add(DefaultManifestFile);
- { Find all archives }
- ArchiveSL:=TStringList.Create;
- SearchFiles(ArchiveSL,'*.zip');
- if ArchiveSL.Count=0 then
- Error('No archive files found');
- { Process all archives }
- for i:=0 to ArchiveSL.Count-1 do
- begin
- Writeln('Processing ',ArchiveSL[i]);
- { Unzip manifest.xml }
- With TUnZipper.Create do
- try
- Log(vCommands,SLogUnzippping,[ArchiveSL[i]]);
- OutputPath:='.';
- UnZipFiles(ArchiveSL[i],ManifestSL);
- Finally
- Free;
- end;
- { Load manifest.xml }
- if FileExists(DefaultManifestFile) then
- begin
- X:=TFPXMLRepositoryHandler.Create;
- With X do
- try
- LoadFromXml(CurrentRepository.PackageCollection,DefaultManifestFile);
- finally
- Free;
- end;
- DeleteFile(DefaultManifestFile);
- end
- else
- Writeln('No manifest found in archive ',ArchiveSL[i]);
- end;
- finally
- ArchiveSL.Free;
- ManifestSL.Free;
- end;
- end;
- procedure SaveRemoteRepository;
- var
- X : TFPXMLRepositoryHandler;
- begin
- // Repository
- Writeln('Saving repository in packages.xml');
- X:=TFPXMLRepositoryHandler.Create;
- With X do
- try
- SaveToXml(CurrentRepository,'packages.xml');
- finally
- Free;
- end;
- end;
- initialization
- end.
|