pkgrepos.pp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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 ListLocalRepository(all:boolean=false);
  11. procedure ListRemoteRepository;
  12. procedure RebuildRemoteRepository;
  13. procedure SaveRemoteRepository;
  14. var
  15. CurrentRepository : TFPRepository;
  16. implementation
  17. uses
  18. zipper,
  19. fpxmlrep,
  20. pkgglobals,
  21. pkgoptions,
  22. pkgmessages;
  23. {*****************************************************************************
  24. Local Repository
  25. *****************************************************************************}
  26. procedure LoadLocalRepository;
  27. var
  28. S : String;
  29. X : TFPXMLRepositoryHandler;
  30. begin
  31. if assigned(CurrentRepository) then
  32. CurrentRepository.Free;
  33. CurrentRepository:=TFPRepository.Create(Nil);
  34. // Repository
  35. S:=GlobalOptions.LocalPackagesFile;
  36. Log(vDebug,SLogLoadingPackagesFile,[S]);
  37. if not FileExists(S) then
  38. exit;
  39. try
  40. X:=TFPXMLRepositoryHandler.Create;
  41. With X do
  42. try
  43. LoadFromXml(CurrentRepository,S);
  44. finally
  45. Free;
  46. end;
  47. except
  48. on E : Exception do
  49. begin
  50. Log(vError,E.Message);
  51. Error(SErrCorruptPackagesFile,[S]);
  52. end;
  53. end;
  54. end;
  55. procedure LoadLocalStatus;
  56. var
  57. S : String;
  58. begin
  59. S:=GlobalOptions.LocalVersionsFile(GlobalOptions.CompilerConfig);
  60. Log(vDebug,SLogLoadingStatusFile,[S]);
  61. if FileExists(S) then
  62. CurrentRepository.LoadStatusFromFile(S);
  63. end;
  64. procedure SaveLocalStatus;
  65. var
  66. S : String;
  67. begin
  68. S:=GlobalOptions.LocalVersionsFile(GlobalOptions.CompilerConfig);
  69. Log(vDebug,SLogSavingStatusFile,[S]);
  70. CurrentRepository.SaveStatusToFile(S);
  71. end;
  72. procedure ListLocalRepository(all:boolean=false);
  73. var
  74. P : TFPPackage;
  75. i : integer;
  76. begin
  77. Writeln(Format('%-20s %-12s %-12s',['Name','Installed','Available']));
  78. for i:=0 to CurrentRepository.PackageCount-1 do
  79. begin
  80. P:=CurrentRepository.Packages[i];
  81. if all or (P.Version.CompareVersion(P.InstalledVersion)>0) then
  82. begin
  83. Writeln(Format('%-20s %-12s %-12s',[P.Name,P.InstalledVersion.AsString,P.Version.AsString]));
  84. end;
  85. end;
  86. end;
  87. {*****************************************************************************
  88. Remote Repository
  89. *****************************************************************************}
  90. procedure ListRemoteRepository;
  91. var
  92. P : TFPPackage;
  93. i : integer;
  94. begin
  95. Writeln(Format('%-20s %-12s %-20s',['Name','Available','FileName']));
  96. for i:=0 to CurrentRepository.PackageCount-1 do
  97. begin
  98. P:=CurrentRepository.Packages[i];
  99. Writeln(Format('%-20s %-12s %-20s',[P.Name,P.Version.AsString,P.FileName]));
  100. end;
  101. end;
  102. procedure RebuildRemoteRepository;
  103. var
  104. X : TFPXMLRepositoryHandler;
  105. i : integer;
  106. ArchiveSL : TStringList;
  107. ManifestSL : TStringList;
  108. begin
  109. if assigned(CurrentRepository) then
  110. CurrentRepository.Free;
  111. CurrentRepository:=TFPRepository.Create(Nil);
  112. try
  113. ManifestSL:=TStringList.Create;
  114. ManifestSL.Add(DefaultManifestFile);
  115. { Find all archives }
  116. ArchiveSL:=TStringList.Create;
  117. SearchFiles(ArchiveSL,'*.zip');
  118. if ArchiveSL.Count=0 then
  119. Error('No archive files found');
  120. { Process all archives }
  121. for i:=0 to ArchiveSL.Count-1 do
  122. begin
  123. Writeln('Processing ',ArchiveSL[i]);
  124. { Unzip manifest.xml }
  125. With TUnZipper.Create do
  126. try
  127. Log(vCommands,SLogUnzippping,[ArchiveSL[i]]);
  128. OutputPath:='.';
  129. UnZipFiles(ArchiveSL[i],ManifestSL);
  130. Finally
  131. Free;
  132. end;
  133. { Load manifest.xml }
  134. if FileExists(DefaultManifestFile) then
  135. begin
  136. X:=TFPXMLRepositoryHandler.Create;
  137. With X do
  138. try
  139. LoadFromXml(CurrentRepository.PackageCollection,DefaultManifestFile);
  140. finally
  141. Free;
  142. end;
  143. DeleteFile(DefaultManifestFile);
  144. end
  145. else
  146. Writeln('No manifest found in archive ',ArchiveSL[i]);
  147. end;
  148. finally
  149. ArchiveSL.Free;
  150. ManifestSL.Free;
  151. end;
  152. end;
  153. procedure SaveRemoteRepository;
  154. var
  155. X : TFPXMLRepositoryHandler;
  156. begin
  157. // Repository
  158. Writeln('Saving repository in packages.xml');
  159. X:=TFPXMLRepositoryHandler.Create;
  160. With X do
  161. try
  162. SaveToXml(CurrentRepository,'packages.xml');
  163. finally
  164. Free;
  165. end;
  166. end;
  167. initialization
  168. end.