pkgrepos.pp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. unit pkgrepos;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes,SysUtils,
  6. fprepos;
  7. procedure LoadLocalRepository;
  8. procedure SaveRepository;
  9. procedure ListRepository;
  10. procedure RebuildRepository;
  11. var
  12. CurrentRepository : TFPRepository;
  13. implementation
  14. uses
  15. zipper,
  16. fpxmlrep,
  17. pkgglobals,
  18. pkgoptions,
  19. pkgmessages;
  20. procedure LoadLocalRepository;
  21. var
  22. S : String;
  23. X : TFPXMLRepositoryHandler;
  24. begin
  25. if assigned(CurrentRepository) then
  26. CurrentRepository.Free;
  27. CurrentRepository:=TFPRepository.Create(Nil);
  28. // Repository
  29. Log(vDebug,SLogLoadingPackagesFile,[Defaults.LocalPackagesFile]);
  30. if FileExists(Defaults.LocalPackagesFile) then
  31. begin
  32. X:=TFPXMLRepositoryHandler.Create;
  33. With X do
  34. try
  35. LoadFromXml(CurrentRepository,Defaults.LocalPackagesFile);
  36. finally
  37. Free;
  38. end;
  39. end;
  40. // Versions
  41. S:=Defaults.LocalVersionsFile(Defaults.CurrentCompilerConfig);
  42. Log(vDebug,SLogLoadingVersionsFile,[S]);
  43. if FileExists(S) then
  44. CurrentRepository.LoadStatusFromFile(S);
  45. end;
  46. procedure SaveRepository;
  47. var
  48. X : TFPXMLRepositoryHandler;
  49. begin
  50. // Repository
  51. Writeln('Saving repository in packages.xml');
  52. X:=TFPXMLRepositoryHandler.Create;
  53. With X do
  54. try
  55. SaveToXml(CurrentRepository,'packages.xml');
  56. finally
  57. Free;
  58. end;
  59. end;
  60. procedure ListRepository;
  61. var
  62. P : TFPPackage;
  63. i : integer;
  64. begin
  65. for i:=0 to CurrentRepository.PackageCount-1 do
  66. begin
  67. P:=CurrentRepository.Packages[i];
  68. Writeln(Format('%-20s %-20s',[P.Name,P.FileName]));
  69. end;
  70. end;
  71. procedure RebuildRepository;
  72. var
  73. X : TFPXMLRepositoryHandler;
  74. i : integer;
  75. ArchiveSL : TStringList;
  76. ManifestSL : TStringList;
  77. begin
  78. if assigned(CurrentRepository) then
  79. CurrentRepository.Free;
  80. CurrentRepository:=TFPRepository.Create(Nil);
  81. try
  82. ManifestSL:=TStringList.Create;
  83. ManifestSL.Add(DefaultManifestFile);
  84. { Find all archives }
  85. ArchiveSL:=TStringList.Create;
  86. SearchFiles(ArchiveSL,'*.zip');
  87. if ArchiveSL.Count=0 then
  88. Error('No archive files found');
  89. { Process all archives }
  90. for i:=0 to ArchiveSL.Count-1 do
  91. begin
  92. Writeln('Processing ',ArchiveSL[i]);
  93. { Unzip manifest.xml }
  94. With TUnZipper.Create do
  95. try
  96. Log(vCommands,SLogUnzippping,[ArchiveSL[i]]);
  97. OutputPath:='.';
  98. UnZipFiles(ArchiveSL[i],ManifestSL);
  99. Finally
  100. Free;
  101. end;
  102. { Load manifest.xml }
  103. if FileExists(DefaultManifestFile) then
  104. begin
  105. X:=TFPXMLRepositoryHandler.Create;
  106. With X do
  107. try
  108. LoadFromXml(CurrentRepository.PackageCollection,DefaultManifestFile);
  109. finally
  110. Free;
  111. end;
  112. DeleteFile(DefaultManifestFile);
  113. end
  114. else
  115. Writeln('No manifest found in archive ',ArchiveSL[i]);
  116. end;
  117. finally
  118. ArchiveSL.Free;
  119. ManifestSL.Free;
  120. end;
  121. end;
  122. initialization
  123. end.