2
0

pkgrepos.pp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. unit pkgrepos;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes,SysUtils,
  6. fprepos;
  7. procedure LoadLocalRepository;
  8. procedure LoadLocalStatus;
  9. procedure SaveLocalStatus;
  10. procedure LoadFPMakeLocalStatus;
  11. procedure ListLocalRepository(all:boolean=false);
  12. procedure ListRemoteRepository;
  13. procedure RebuildRemoteRepository;
  14. procedure SaveRemoteRepository;
  15. var
  16. CurrentRepository : TFPRepository;
  17. implementation
  18. uses
  19. zipper,
  20. fpxmlrep,
  21. pkgglobals,
  22. pkgoptions,
  23. pkgmessages;
  24. {*****************************************************************************
  25. Local Repository
  26. *****************************************************************************}
  27. procedure LoadLocalRepository;
  28. var
  29. S : String;
  30. X : TFPXMLRepositoryHandler;
  31. begin
  32. if assigned(CurrentRepository) then
  33. CurrentRepository.Free;
  34. CurrentRepository:=TFPRepository.Create(Nil);
  35. // Repository
  36. S:=GlobalOptions.LocalPackagesFile;
  37. Log(vDebug,SLogLoadingPackagesFile,[S]);
  38. if not FileExists(S) then
  39. exit;
  40. try
  41. X:=TFPXMLRepositoryHandler.Create;
  42. With X do
  43. try
  44. LoadFromXml(CurrentRepository,S);
  45. finally
  46. Free;
  47. end;
  48. except
  49. on E : Exception do
  50. begin
  51. Log(vError,E.Message);
  52. Error(SErrCorruptPackagesFile,[S]);
  53. end;
  54. end;
  55. end;
  56. procedure LoadLocalStatus;
  57. var
  58. S : String;
  59. begin
  60. S:=GlobalOptions.LocalVersionsFile(GlobalOptions.CompilerConfig);
  61. Log(vDebug,SLogLoadingStatusFile,[S]);
  62. CurrentRepository.ClearStatus;
  63. if FileExists(S) then
  64. CurrentRepository.LoadStatusFromFile(S);
  65. end;
  66. procedure SaveLocalStatus;
  67. var
  68. S : String;
  69. begin
  70. S:=GlobalOptions.LocalVersionsFile(GlobalOptions.CompilerConfig);
  71. Log(vDebug,SLogSavingStatusFile,[S]);
  72. CurrentRepository.SaveStatusToFile(S);
  73. end;
  74. procedure LoadFPMakeLocalStatus;
  75. var
  76. i : Integer;
  77. S : String;
  78. P : TFPPackage;
  79. ReqVer : TFPVersion;
  80. begin
  81. S:=GlobalOptions.LocalVersionsFile(GlobalOptions.FPMakeCompilerConfig);
  82. Log(vDebug,SLogLoadingStatusFile,[S]);
  83. CurrentRepository.ClearStatus;
  84. if FileExists(S) then
  85. CurrentRepository.LoadStatusFromFile(S);
  86. // Check for fpmkunit dependencies
  87. for i:=1 to FPMKUnitDepCount do
  88. begin
  89. FPMKUnitDepAvailable[i]:=false;
  90. P:=CurrentRepository.PackageByName(FPMKUnitDeps[i].package);
  91. if P<>nil then
  92. begin
  93. ReqVer:=TFPVersion.Create;
  94. ReqVer.AsString:=FPMKUnitDeps[i].ReqVer;
  95. Log(vDebug,SLogFPMKUnitDepVersion,[P.Name,ReqVer.AsString,P.InstalledVersion.AsString,P.Version.AsString]);
  96. if ReqVer.CompareVersion(P.InstalledVersion)<=0 then
  97. FPMKUnitDepAvailable[i]:=true
  98. else
  99. Log(vDebug,SLogFPMKUnitDepTooOld,[FPMKUnitDeps[i].package]);
  100. end
  101. else
  102. Log(vDebug,SLogFPMKUnitDepTooOld,[FPMKUnitDeps[i].package]);
  103. end;
  104. end;
  105. procedure ListLocalRepository(all:boolean=false);
  106. var
  107. P : TFPPackage;
  108. i : integer;
  109. begin
  110. Writeln(Format('%-20s %-12s %-12s',['Name','Installed','Available']));
  111. for i:=0 to CurrentRepository.PackageCount-1 do
  112. begin
  113. P:=CurrentRepository.Packages[i];
  114. if all or (P.Version.CompareVersion(P.InstalledVersion)>0) then
  115. begin
  116. Writeln(Format('%-20s %-12s %-12s',[P.Name,P.InstalledVersion.AsString,P.Version.AsString]));
  117. end;
  118. end;
  119. end;
  120. {*****************************************************************************
  121. Remote Repository
  122. *****************************************************************************}
  123. procedure ListRemoteRepository;
  124. var
  125. P : TFPPackage;
  126. i : integer;
  127. begin
  128. Writeln(Format('%-20s %-12s %-20s',['Name','Available','FileName']));
  129. for i:=0 to CurrentRepository.PackageCount-1 do
  130. begin
  131. P:=CurrentRepository.Packages[i];
  132. Writeln(Format('%-20s %-12s %-20s',[P.Name,P.Version.AsString,P.FileName]));
  133. end;
  134. end;
  135. procedure RebuildRemoteRepository;
  136. var
  137. X : TFPXMLRepositoryHandler;
  138. i : integer;
  139. ArchiveSL : TStringList;
  140. ManifestSL : TStringList;
  141. begin
  142. if assigned(CurrentRepository) then
  143. CurrentRepository.Free;
  144. CurrentRepository:=TFPRepository.Create(Nil);
  145. try
  146. ManifestSL:=TStringList.Create;
  147. ManifestSL.Add(DefaultManifestFile);
  148. { Find all archives }
  149. ArchiveSL:=TStringList.Create;
  150. SearchFiles(ArchiveSL,'*.zip');
  151. if ArchiveSL.Count=0 then
  152. Error('No archive files found');
  153. { Process all archives }
  154. for i:=0 to ArchiveSL.Count-1 do
  155. begin
  156. Writeln('Processing ',ArchiveSL[i]);
  157. { Unzip manifest.xml }
  158. With TUnZipper.Create do
  159. try
  160. Log(vCommands,SLogUnzippping,[ArchiveSL[i]]);
  161. OutputPath:='.';
  162. UnZipFiles(ArchiveSL[i],ManifestSL);
  163. Finally
  164. Free;
  165. end;
  166. { Load manifest.xml }
  167. if FileExists(DefaultManifestFile) then
  168. begin
  169. X:=TFPXMLRepositoryHandler.Create;
  170. With X do
  171. try
  172. LoadFromXml(CurrentRepository.PackageCollection,DefaultManifestFile);
  173. finally
  174. Free;
  175. end;
  176. DeleteFile(DefaultManifestFile);
  177. end
  178. else
  179. Writeln('No manifest found in archive ',ArchiveSL[i]);
  180. end;
  181. finally
  182. ArchiveSL.Free;
  183. ManifestSL.Free;
  184. end;
  185. end;
  186. procedure SaveRemoteRepository;
  187. var
  188. X : TFPXMLRepositoryHandler;
  189. begin
  190. // Repository
  191. Writeln('Saving repository in packages.xml');
  192. X:=TFPXMLRepositoryHandler.Create;
  193. With X do
  194. try
  195. SaveToXml(CurrentRepository,'packages.xml');
  196. finally
  197. Free;
  198. end;
  199. end;
  200. initialization
  201. end.